Javascript YouTube api返回404 liveBroadcastNotFound,用于从“0”到“0”状态转换的现有liveBroadcast;“生活”;至;“完成”;

Javascript YouTube api返回404 liveBroadcastNotFound,用于从“0”到“0”状态转换的现有liveBroadcast;“生活”;至;“完成”;,javascript,node.js,youtube,youtube-api,Javascript,Node.js,Youtube,Youtube Api,我使用Node.js作为后端技术和简单的YouTube api集成工具 const { google: { auth: { OAuth2 }, youtube, }, } = GoogleApis; const oauth2Client = new OAuth2(tokenId, secretKey, redirectUrl); const youTube = youtube({ version: 'v3', auth: oauth2Client

我使用Node.js作为后端技术和简单的YouTube api集成工具

const {
    google: {
        auth: { OAuth2 },
        youtube,
    },
} = GoogleApis;

const oauth2Client = new OAuth2(tokenId, secretKey, redirectUrl);
const youTube = youtube({ version: 'v3', auth: oauth2Client });
流量:

1)liveBroadcast创建

youTube.liveBroadcasts.insert({
    part: 'id,snippet,status,contentDetails',
    requestBody: {
        snippet,
        contentDetails: { monitorStream: { enableMonitorStream: false } },
        status: { privacyStatus: 'public' },
    },
}),
youTube.liveStreams.insert({
    part: 'id,snippet,cdn',
    requestBody: {
        snippet,
        cdn: {
            ingestionType: 'rtmp',
            frameRate: 'variable',
            resolution: 'variable',
        },
    },
}),
代码段包含scheduledStartTime、标题和说明

2)liveStream创建

youTube.liveBroadcasts.insert({
    part: 'id,snippet,status,contentDetails',
    requestBody: {
        snippet,
        contentDetails: { monitorStream: { enableMonitorStream: false } },
        status: { privacyStatus: 'public' },
    },
}),
youTube.liveStreams.insert({
    part: 'id,snippet,cdn',
    requestBody: {
        snippet,
        cdn: {
            ingestionType: 'rtmp',
            frameRate: 'variable',
            resolution: 'variable',
        },
    },
}),
代码段包含标题和说明

3)将liveBroadcast绑定到liveStream

youTube.liveBroadcasts.bind({
    part: 'id',
    id,
    streamId,
}),
此时,直播状态为“就绪”,直播流状态为“就绪”

4)开始使用liveStream rtmp键向YouTube播放视频流

5)等待15秒

此时,直播状态为“就绪”,直播流状态为“活动”

6)将直播状态从“就绪”转换为“直播”

此时,直播状态为“直播”,直播流状态为“活动”

到目前为止,一切正常,正如预期的那样

7)将直播状态从“直播”转换为“完成”

这里发生了黑魔法:
YouTube api
返回
404 liveBroadcastNotFound

直播似乎消失了。 此实况广播在几小时后出现(可用)

作为响应,我得到下一个错误响应(将JSON粘贴到下面的中):

{“response”:{“config”:{“url”:“${liveBroadcastIdReplacedHere}&broadcastStatus=complete”,“method”:“POST”,“headers”:{“Accept Encoding”:“gzip”,“User Agent”:“google api nodejs client/2.0.4 (gzip)”,“授权”:“持票人” ${jwtTokenReplacedHere},“接受”:“应用程序/json”},“参数”:{“部分”:“id”,“id”:“${liveBroadcastIdReplacedHere}”,“广播状态”:“完成”},“重试”:true,“响应类型”:“json”,“retryConfig”:{“当前重试尝试”:0,“重试”:3,“重试延迟”:100,“httpMethodsToRetry”:[“获取”,“HEAD”,“PUT”,“OPTIONS”,“DELETE”],“noresponseRetryConfig”:“2”,“statusCodesToRetry”:”[100199],[429429],[500599]},“数据”:{“错误”:{“错误”:{“域”:“youtube.liveBroadcast”,“原因”:“liveBroadcastNotFound”,“消息”:“Broadcast” 未找到“}],“代码”:404,“消息”:“未广播” 找到“}”,标题:{“alt svc”:“quic=\”:443\;ma=2592000; v=46,43,h3-Q048=443,ma=2592000,h3-Q046=443; ma=2592000,h3-Q043=\“:443\“ma=2592000”,“缓存控制”:“专用”, 最大年龄=0,“连接”:“关闭”,“内容编码”:“gzip”,“内容类型”:“应用程序/json”; 字符集=UTF-8,“日期”:“2019年10月2日星期三13:10:02 GMT”,“到期”:“星期三, 2019年10月2日13:10:02 GMT“,”服务器“:”GSE“,”传输编码“:”分块“,”变化“:”来源, X-Origin、“X-content-type-options”:“nosniff”、“X-frame-options”:“SAMEORIGIN”、“X-xss-protection”:“1; 模式=块“}”,状态:404,“状态文本”:“不” 找到“}”,配置“{”url“${liveBroadcastIdReplacedHere}&broadcastStatus=complete”,“方法“:”POST“,”标题“{”接受编码“:”gzip“,”用户代理“:”google api nodejs客户端/2.0.4 (gzip)”,“授权”:“持票人” ${jwtTokenReplacedHere},“接受”:“应用程序/json”},“参数”:{“部分”:“id”,“id”:“${liveBroadcastIdReplacedHere}”,“广播状态”:“完成”},“重试”:true,“响应类型”:“json”,“retryConfig”:{“当前重试尝试”:0,“重试”:3,“重试延迟”:100,“httpMethodsToRetry”:[“获取”,“HEAD”,“PUT”,“OPTIONS”,“DELETE”],“noresponseRetryConfig”:“2”,“statusCodesToRetry”:”[[100199],[429429],[500599]]},“代码”:404,“错误”:[{“域”:“youtube.liveBroadcast”,“原因”:“liveBroadcastNotFound”,“消息”:“Broadcast” 找不到“}]}

我使用了相同的错误


您是否在呼叫从“直播”过渡到“完成”之前结束rtmp?可能是rtmp在您实际呼叫之前结束广播