首页 > 解决方案 > 如何使用 YouTube Data API v3 启动默认的“Go Live”流

问题描述

从 YouTube 中的相机图标中选择“开始直播”,将我带到我的默认流所在的工作室。

在开始通过 rtmp 将数据上传到该流之前,我似乎需要导航到那里(启用它)。同样,如果流中断一分钟左右,流会自动结束,我需要转到页面并单击“关闭”按钮重新开始。

我发现我可以以编程方式检查流是否正在运行:

curl -H "Authorization: Bearer XXXXXXX_AUTHTOKEN" "https://www.googleapis.com/youtube/v3/liveStreams?part=snippet,cdn,contentDetails,status&mine=true"

我在 JSON 中获得与dn.ingestionInfo.streamName工作室页面上的流键相同的条目。该条目还显示contentDetails.isReusable=truestatus.streamStatus=active(我认为它需要“准备好”才能接受/启动流。

    {
      "kind": "youtube#liveStream",
        "title": "Default stream key",
        "description": "Description for default stream key",
        "isDefaultStream": false
      },
      "cdn": {
        "ingestionType": "rtmp",
        "ingestionInfo": {
          "streamName": "XXXXXXXXXXXXXXX",
          "ingestionAddress": "rtmp://a.rtmp.youtube.com/live2",
          "backupIngestionAddress": "rtmp://b.rtmp.youtube.com/live2?backup=1",
          "rtmpsIngestionAddress": "rtmps://a.rtmps.youtube.com/live2",
          "rtmpsBackupIngestionAddress": "rtmps://b.rtmps.youtube.com/live2?backup=1"
        },
        "resolution": "variable",
        "frameRate": "variable"
      },
      "status": {
        "streamStatus": "active",
        "healthStatus": {
          "status": "good"
        }
      },
        "isReusable": true
      }
    }

是否有一个 API 集可用于重用此默认流并以编程方式将其状态从活动更改为就绪?

我尝试在下面这样做,但它总是给出一个新streamName的而不是更改status.streamStatus默认的。

curl -H "Authorization: Bearer AUTHTOKEN" -H "Accept: application/json" -H "Content-Type: application/json" --data "{'id':'STREAMID_FROM_DEFAULT_IN_STATUS_CALL','snippet':{'title':'test','description':'test.'},'status':{'streamStatus':'ready'},'cdn':{'ingestionType':'rtmp','frameRate':'variable','resolution':'variable','ingestionInfo':{'streamName':'STREAM_NAME_FROM_DEFAULT_IN_STATUS_CALL'}}}" --request POST "https://youtube.googleapis.com/youtube/v3/liveStreams?part=snippet,status,cdn".

但是,这会返回一个不同的id,并且与cdn.ingestionInfo.streamName我在调用中指定的不同。

关于如何以编程方式重用默认的“Go live”工作室流的想法或想法?

标签: youtube-apiyoutube-data-apiyoutube-livestreaming-api

解决方案


LiveBroadcasts.transitionAPI 端点,允许更改已创建广播的状态。

发出以下curl命令(在下面的bash's 语法中举例说明),用于更改由$BROADCAST_IDto标识的广播的状态live

$ curl \
--request POST \
--header "Authorization: Bearer $ACCESS_TOKEN" \
"https://www.googleapis.com/youtube/v3/liveBroadcasts/transition?part=id,snippet,contentDetails,status&broadcastStatus=live&id=$BROADCAST_ID"

根据官方规范:

broadcastStatus (细绳)

broadcastStatus参数标识广播正在更改的状态。请注意,要将广播转换为testingorlive状态,status.streamStatus必须是active广播绑定到的流。
[...]

在调用此端点之前,您必须已经拥有您的流active

此外,根据您以编程方式与广播交互的方式,您可能需要通过相应的广播属性将广播设置为自动重启enableAutoStart


推荐阅读