Reputation: 21
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
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