Я использую Node.js в качестве технологии бэкэнда и библиотеку googleapis в качестве инструмента для простой интеграции 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' },
},
}),
фрагмент содержит scheduleStartTime, заголовок и описание.
2) создание liveStream.
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,
}),
На данный момент статус liveBroadcast равен "готов », статус liveStream -« готов ».
4) начать трансляцию видеопотока на YouTube с помощью клавиши liveStream rtmp.
5) wait15 секунд.
На данный момент статус liveBroadcast «готов», статус liveStream - «активный».
6) перевод состояния liveBroadcast из состояния «готов» в «»live "
youTube.liveBroadcasts.transition({
part: 'id',
id,
broadcastStatus: 'live',
}),
На данный момент статус liveBroadcast имеет статус" live ", статус liveStream -" active ".
До сих пор каждыйвсе работает нормально, как и ожидалось.
7) сделать переход статуса liveBroadcast из "живого" в "завершенный".
youTube.liveBroadcasts.transition({
part: 'id',
id,
broadcastStatus: 'complete',
}),
И тут происходит темная магия: YouTube-api
возвращает 404 liveBroadcastNotFound
.
liveBroadcast исчезает. Этот liveBroadcast появляется (становится доступным) через несколько часов-дней.
В качестве ответа я получаю следующий ответ об ошибке (вставьте JSON ниже в JSON formatter ):
{"response": {"config": {"url": "https://www.googleapis.com/youtube/v3/liveBroadcasts/transition?part=id&id=${liveBroadcastIdReplacedHere}&broadcastStatus=complete","method":"POST","headers":{"Accept-Encoding":"gzip","User-Agent":"google-api-nodejs-client/2.0.4 (gzip)", "Authorization": "Bearer $ {jwtTokenReplacedHere}", "Accept": "application / json"}, "Титулы": { "часть": "Идентификация", "ID": "$ {liveBroadcastIdReplacedHere}", "broadcastStatus": "полный"}, "повторная попытка": правда, "responseType": "JSON", "retryConfig": {" currentRetryAttempt ": 0," повторная попытка ": 3," retryDelay ": 100," httpMethodsToRetry ": [" GET», "голова", "PUT", "Опции", "Удалить"], "noResponseRetries": 2, "statusCodesToRetry": [[100199], [429429], [500599]]}}, "данные": { "ошибка": { "ошибка": [{ "домен": "youtube.liveBroadcast",»reason ":" liveBroadcastNotFound "," message ":" Трансляция не найдена "}]," code ": 404," message ":" Трансляция не найдена "}}," headers ": {" alt-svc ":" quic= \ ": 443 \"; ma = 2592000; v = \ "46,43 \", h3-Q048 = \ ": 443 \"; ma = 2592000, h3-Q046 = \ ": 443 \"; ma =2592000, h3-Q043 = \ ": 443 \"; ma = 2592000 "," cache-control ":" private, maх-возраст = 0" , "соединение": "закрыть", "Content-Encoding": "GZIP", "тип содержимого": "приложения / JSON;charset = UTF-8 "," date ":" Wed, 02 Oct 2019 13:10:02 GMT "," expires ":" Wed, 02 Oct 2019 13:10:02 GMT "," server ":" GSE ", "Transfer-Encoding": "Chunked", "var": "Origin, X-Origin", "x-content-type-options": "nosniff", "x-frame-options": "SAMEORIGIN", "х-XSS-защита ":" 1;mode = block "}," status ": 404," statusText ":" Not Found "}," config ": {" url ":" https://www.googleapis.com/youtube/v3/liveBroadcasts/transition?part=id&id=${liveBroadcastIdReplacedHere}&broadcastStatus=complete","method":"POST","headers":{"Accept-Encoding":"gzip","User-Agent":"google-api-nodejs-client/2.0.4 (gzip) "," Authorization ":" Bearer ${jwtTokenReplacedHere} " "Accept": "приложения / JSON"}, "Params": { "часть": "ID", "ID": "$ {liveBroadcastIdReplacedHere}", "broadcastStatus": "полный"},"повторная попытка ": правда," responseType ":" JSON " "retryConfig": { "currentRetryAttempt": 0, "повторная попытка": 3, "retryDelay": 100, "httpMethodsToRetry": [ "GET", "голова","PUT», "Опции", "Удалить"], "noResponseRetries": 2, "statusCodesToRetry": [[100199], [429429], [500599]]}}, "код": 404, "ошибки": [{"домен": "youtube.liveBroadcast", "причина": "liveBroadcastNotFound", "message": "Трансляция не найдена"}]}
Я получаю ту же ошибку, используя пользовательский интерфейс YouTubeдля разработчиков
скриншоты перехода статуса