如何为广播ID的流找到ID,反之亦然(YouTube数据API)?

如何为广播ID的流找到ID,反之亦然(YouTube数据API)?,youtube,youtube-api,youtube-data-api,Youtube,Youtube Api,Youtube Data Api,我想查找与状态为“就绪”的广播相关联的流。我一直在使用此调用查看广播,但没有看到可以用来关联它们的流或键: curl -H "Authorization: Bearer XXX_AUTH_TOKEN_XXX" "https://www.googleapis.com/youtube/v3/liveBroadcasts?part=status&broadcastStatus=all&maxResults=100" 这将产生: { &quo

我想查找与状态为“就绪”的广播相关联的流。我一直在使用此调用查看广播,但没有看到可以用来关联它们的流或键:

curl -H "Authorization: Bearer XXX_AUTH_TOKEN_XXX" "https://www.googleapis.com/youtube/v3/liveBroadcasts?part=status&broadcastStatus=all&maxResults=100"
这将产生:

{
  "kind": "youtube#liveBroadcastListResponse",
  "etag": "LgRz6pjADsE_wIIphSY6n_M3LDE",
  "pageInfo": {
    "totalResults": 39,
    "resultsPerPage": 50
  },
  "items": [
    {
      "kind": "youtube#liveBroadcast",
      "etag": "DC7GxUyFsLEyJorVsv7gl7yBxYY",
      "id": "BRsOTPMIb_s",
      "status": {
        "lifeCycleStatus": "ready",
        "privacyStatus": "public",
        "recordingStatus": "notRecording",
        "madeForKids": false,
        "selfDeclaredMadeForKids": false
      }
    },
     ...
 ]
}
{
  "kind": "youtube#liveStream",
  "etag": "i3qny6yeyCwtlZkNHB5lgMLGF1I",
  "id": "EFWoMyGEmXWkp7dWPLYdWA1615776388366728",
  "snippet": {
    "publishedAt": "2021-03-15T02:46:29Z",
    "channelId": "XXXXXXXXXXXXXXXXXXXXXXXX",
    "title": "Default stream key",
    "description": "Description for default stream key",
    "isDefaultStream": false
  },
  "cdn": {
    "ingestionType": "rtmp",
    "ingestionInfo": {
      "streamName": "XXXX-XXXX-XXXX-XXXX-XXXX",
      "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": "inactive",
    "healthStatus": {
      "status": "noData"
    }
  },
  "contentDetails": {
    "closedCaptionsIngestionUrl": "http://upload.youtube.com/closedcaption?cid=sdgs-zk2j-grt3-x9jj-d7ks",
    "isReusable": true
  }
}
类似地,我想知道处于“非活动”状态的流是否与现有广播相关联,因此如果需要,我可以将其添加到新广播中

curl -H "Authorization: Bearer XXX_AUTH_TOKEN_XXX" "https://www.googleapis.com/youtube/v3/liveStreams?part=snippet,cdn,contentDetails,status&mine=true&maxResults=100"
这将产生:

{
  "kind": "youtube#liveBroadcastListResponse",
  "etag": "LgRz6pjADsE_wIIphSY6n_M3LDE",
  "pageInfo": {
    "totalResults": 39,
    "resultsPerPage": 50
  },
  "items": [
    {
      "kind": "youtube#liveBroadcast",
      "etag": "DC7GxUyFsLEyJorVsv7gl7yBxYY",
      "id": "BRsOTPMIb_s",
      "status": {
        "lifeCycleStatus": "ready",
        "privacyStatus": "public",
        "recordingStatus": "notRecording",
        "madeForKids": false,
        "selfDeclaredMadeForKids": false
      }
    },
     ...
 ]
}
{
  "kind": "youtube#liveStream",
  "etag": "i3qny6yeyCwtlZkNHB5lgMLGF1I",
  "id": "EFWoMyGEmXWkp7dWPLYdWA1615776388366728",
  "snippet": {
    "publishedAt": "2021-03-15T02:46:29Z",
    "channelId": "XXXXXXXXXXXXXXXXXXXXXXXX",
    "title": "Default stream key",
    "description": "Description for default stream key",
    "isDefaultStream": false
  },
  "cdn": {
    "ingestionType": "rtmp",
    "ingestionInfo": {
      "streamName": "XXXX-XXXX-XXXX-XXXX-XXXX",
      "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": "inactive",
    "healthStatus": {
      "status": "noData"
    }
  },
  "contentDetails": {
    "closedCaptionsIngestionUrl": "http://upload.youtube.com/closedcaption?cid=sdgs-zk2j-grt3-x9jj-d7ks",
    "isReusable": true
  }
}
例如,上面的广播显然与上面的流相关,因为它们是由YouTube Studio创建的,作为手动启动流时的默认广播。然而,从这两个JSON片段中不清楚它们之间的联系


任何关于如何将它们联系起来的想法都将不胜感激

我的错误,将contentDetails添加到part修复了此问题

curl -H "Authorization: Bearer XXXX_AUTH_TOKEN_XXXX" "https://www.googleapis.com/youtube/v3/liveBroadcasts?part=status,contentDetails&broadcastStatus=all&maxResults=100"
详情:

    {
      "kind": "youtube#liveBroadcast",
      "etag": "m1O2kGwzs7czUSuB5-hvdWu-Qwc",
      "id": "GYnbNz_baGk",
      "status": {
        "lifeCycleStatus": "complete",
        "privacyStatus": "public",
        "recordingStatus": "recorded",
        "madeForKids": true,
        "selfDeclaredMadeForKids": true
      },
      "contentDetails": {
        "boundStreamId": "EFWoMyGEmXWkp7dWPLYdWA1615776388366728",
        "boundStreamLastUpdateTimeMs": "2021-05-17T19:53:36Z",
        "monitorStream": {
          "enableMonitorStream": true,
          "broadcastStreamDelayMs": 0,
          "embedHtml": "\u003ciframe width=\"425\" height=\"344\" src=\"https://www.youtube.com/embed/XXXXXXXXX?autoplay=1&livemonitor=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen\u003e\u003c/iframe\u003e"
        },
        "enableEmbed": false,
        "enableDvr": true,
        "enableContentEncryption": false,
        "startWithSlate": false,
        "recordFromStart": true,
        "enableClosedCaptions": false,
        "closedCaptionsType": "closedCaptionsDisabled",
        "enableLowLatency": false,
        "latencyPreference": "ultraLow",
        "projection": "rectangular",
        "enableAutoStart": true,
        "enableAutoStop": true
      }
    }