7

Youtube 现在有一个直播部分,允许用户播放他们自己的直播会话。在这个“直播”部分,有 2 个选项:“现在直播 [Beta]”和“活动”。

  • Live Now 是一种快速简便的方法,只需将视频编码器指向指定的 RTMP Url 和 Stream Key,即可自动开始流式传输会话。它将自动检测传入媒体并开始公开广播。

  • 事件几乎是一样的,但是有高级设置,虽然它不会自动开始广播,你需要手动设置所有东西。

我知道 Youtube API 允许您检索事件的摄取 url 和 streamkey,因此您可以广播到该目标,但它还需要手动管理许多其他步骤(如发布流、将广播与流绑定、检查状态、启动、停止, ETC..)。另一方面,“Live Now”让一切都自动进行。

问题:如何从 Youtube API v3 检索“Live Now”摄取信息(rtmp url 和 streamkey)?

4

4 回答 4

12

默认广播可以通过 livebroadcasts.list 检索,并将 broadcastType 设置为“persistent”。

默认直播可以通过 livestreams.list 使用 boundstreamid 检索。

于 2016-02-11T01:56:58.783 回答
3

您无法检索“Live Now”摄取信息,因为 API 不区分“Live Now”和“Events”。这两个选项作为 API 之上的接口提供给最终用户,因此他们不必编写自己的与 API 接口的应用程序。

您必须手动设置liveBroadcastliveStream对象,使用 绑定它们liveBroadcasts.bind,测试您的流,并liveStream使用status.streamStatus.

于 2015-11-19T16:17:47.203 回答
2

获取“Live Now” rtmp 和 streamkey

       $broadcastsResponse = $youtube->liveBroadcasts->listLiveBroadcasts(
            'id,snippet,contentDetails',
            array(
                'broadcastType' => 'persistent',
                'mine' => 'true',
            ));

        $boundStreamId = $broadcastsResponse['items']['0']['contentDetails']['boundStreamId'];

        $streamsResponse = $youtube->liveStreams->listLiveStreams('id,snippet,cdn', array(
//            'mine' => 'true',
            'id' => $boundStreamId
        ));

        print_r($streamsResponse);
于 2016-11-04T12:16:14.737 回答
1
 // Keep client_id,client_secret and redirect_uri the client_secrets.json
 UserCredential credential;
 string BoundStreamId = string.Empty;
 string StreamKey=string.Empty;
 using (var stream = new FileStream("client_secrets.json", FileMode.Open, 
   FileAccess.Read))
            {
                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
                new[] { YouTubeService.Scope.Youtube,YouTubeService.Scope.YoutubeReadonly},
                "user",
                CancellationToken.None,
                new FileDataStore(this.GetType().ToString())
             );
            }
if (credential != null)
            {
                var youtubeService = new YouTubeService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "MyApp" // your app name
                });
 LiveBroadcastsResource.ListRequest lbRequest = youtubeService.LiveBroadcasts.List("id,snippet,contentDetails,status");
                lbRequest.BroadcastType = LiveBroadcastsResource.ListRequest.BroadcastTypeEnum.Persistent;
                lbRequest.MaxResults = 10;

                lbRequest.Mine = true;

                var bcResponse = await lbRequest.ExecuteAsync();

                IEnumerator<LiveBroadcast> iLB = bcResponse.Items.GetEnumerator();
                while (iLB.MoveNext() && string.IsNullOrEmpty(liveChatId))
                {
                  BoundStreamId = livebroadcast.ContentDetails.BoundStreamId;
                }
 LiveStreamsResource.ListRequest lsRequest =
                                   youtubeService.LiveStreams.List("id,snippet,cdn,status");
                lsRequest.MaxResults = 50;                    
                lsRequest.Id = BoundStreamId;

                var srResponse = await lsRequest.ExecuteAsync();

                IEnumerator<LiveStream> iLS = srResponse.Items.GetEnumerator();
 if (srResponse != null)
                {
                 foreach(LiveStream lvStream in srResponse.Items)
                    {
                       StreamKey= lvStream.Cdn.IngestionInfo.StreamName);
                    }
                }
          }
于 2019-10-18T21:00:10.687 回答