Lik
Lik

Reputation: 21

c# youtube-api-live Stream GoogleApiException(Stream is inactive)

I'm developing a live-streaming service using youtube-api.

Here is my code

C# WPF

private void LiveStreamBtn_Click(object sender, RoutedEventArgs e)
{
    var broadcast = new LiveBroadcast
    {
        Kind = "youtube#liveBroadcast",
        Snippet = new LiveBroadcastSnippet
        {
            Title = "StreamService",
            ScheduledStartTime = DateTime.Now
        },
        Status = new LiveBroadcastStatus
        {
            PrivacyStatus = "public",
        },
        ContentDetails = new LiveBroadcastContentDetails
        {
            MonitorStream = new MonitorStreamInfo
            {
                EnableMonitorStream = true
            }
        }
    };

    var liveBroadcastInsert = youTubeService.LiveBroadcasts.Insert(broadcast, "snippet,status,contentDetails");
    var returnedBroadcast = liveBroadcastInsert.Execute();

    Console.WriteLine("\n================== Returned Broadcast ==================\n");
    Console.WriteLine(" - Id: " + returnedBroadcast.Id);
    Console.WriteLine(" - Title: " + returnedBroadcast.Snippet.Title);
    Console.WriteLine(" - Description: " + returnedBroadcast.Snippet.Description);
    Console.WriteLine(" - Published At: " + returnedBroadcast.Snippet.PublishedAt);
    Console.WriteLine(" - Scheduled Start Time: " + returnedBroadcast.Snippet.ScheduledStartTime);
    Console.WriteLine(" - Scheduled End Time: " + returnedBroadcast.Snippet.ScheduledEndTime);

    var stream = new LiveStream
    {
        Kind = "youtube#liveStream",
        Snippet = new LiveStreamSnippet
        {
            Title = "StreamService"
        },
        Status = new LiveStreamStatus
        {
            StreamStatus = "active"
        },
        Cdn = new CdnSettings
        {
            Format = "720p",
            IngestionType = "rtmp"
        }
    };

    var liveStreamInsert = youTubeService.LiveStreams.Insert(stream, "snippet,status,cdn");
    var returnedStream = liveStreamInsert.Execute();

    Console.WriteLine("\n================== Returned Stream ==================\n");
    Console.WriteLine(" - Id: " + returnedStream.Id);
    Console.WriteLine(" - Title: " + returnedStream.Snippet.Title);
    Console.WriteLine(" - Description: " + returnedStream.Snippet.Description);
    Console.WriteLine(" - Published At: " + returnedStream.Snippet.PublishedAt);
    Console.WriteLine(" - URL: " + returnedStream.Cdn.IngestionInfo.IngestionAddress);
    Console.WriteLine(" - Name: " + returnedStream.Cdn.IngestionInfo.StreamName);

    var liveBroadcastBind = youTubeService.LiveBroadcasts.Bind(returnedBroadcast.Id, "id,status,contentDetails");
    liveBroadcastBind.StreamId = returnedStream.Id;
    returnedBroadcast = liveBroadcastBind.Execute();

    Console.WriteLine("\n================== Returned Bound Broadcast ==================\n");
    Console.WriteLine(" - Broadcast Id: " + returnedBroadcast.Id);
    Console.WriteLine(" - Bound Stream Id: " + returnedBroadcast.ContentDetails.BoundStreamId);

    var liveStreamRequest = youTubeService.LiveStreams.List("id,snippet,status");

    liveStreamRequest.Id = returnedStream.Id;

    Console.WriteLine("\n================== Find Bound Broadcast, Stream ==================\n");
    Console.WriteLine("BroadCast status :: " + returnedBroadcast.Status.LifeCycleStatus);
    Console.WriteLine("Stream status :: " + returnedStream.Status.StreamStatus);

    var broadCastTrans
        = youTubeService.LiveBroadcasts.Transition(
            LiveBroadcastsResource.TransitionRequest.BroadcastStatusEnum.Testing, returnedBroadcast.Id, "status");

    Console.WriteLine("\n================== Transition Status==================\n");
    Console.WriteLine("Transition Status :: " + broadCastTrans.BroadcastStatus);

    broadCastTrans.Execute();
}

I got the perfect results of "Returned Broadcast", "Returned Stream" and "Returned Bound Broadcast".

I also got an event on my YouTube account when they were bound.

But when the last line of code is executed an error occurs.

Google.GoogleApiException: 'Google.Apis.Requests.RequestError Stream is inactive [403] Errors [Message[Stream is inactive] Location[ - ] Reason[errorStreamInactive] Domain[youtube.liveBroadcast]]'

How can I change the stream status ?

Upvotes: 2

Views: 858

Answers (1)

Amaninder Singh
Amaninder Singh

Reputation: 1

Just set the EnableAutoStart property in LiveBroadCastContentDetails to true, while creating the LiveBroadCast. Then you won't need to transition the broadcast as it will start streaming automatically.

var contentdetails = new LiveBroadcastContentDetails
{
    EnableAutoStart = true
};

Upvotes: 0

Related Questions