我遇到了一个无法解决的问题。我希望允许用户同时连接到多个 YouTube channel 并为他们创建 YouTube 流。主要代码如下:
export const setGapiTokenForTarget = async (token) => {
await window.gapi.client.setToken(token);
await window.gapi.auth.setToken(token);
};
export const bindStreamToBroadcast = async (streamId, broadcastId, token) => {
await setGapiTokenForTarget(token);
return window.gapi.client.youtube.liveBroadcasts.bind({
'id': broadcastId,
'part': 'snippet',
'streamId': streamId
});
};
export const createBroadcast = async (token) => {
await setGapiTokenForTarget(token);
return window.gapi.client.youtube.liveBroadcasts.insert({
'part': 'snippet,contentDetails,status',
'resource': {
'snippet': {
'title': 'l1',
'scheduledStartTime': '2020-02-07T09:20:17.039Z',
'scheduledEndTime': '2020-02-07T09:40:17.039Z'
},
'status': {
'privacyStatus': 'unlisted'
}
}
});
};
export const createStream = async (token) => {
await setGapiTokenForTarget(token);
return window.gapi.client.youtube.liveStreams.insert({
'part': 'snippet,cdn,contentDetails,status',
'resource': {
'snippet': {
'title': 'LIVE PANEL TEST',
'description': 'LIVE PANEL TEST'
},
'cdn': {
'frameRate': '60fps',
'ingestionType': 'rtmp',
'resolution': '1080p'
},
'contentDetails': {
'isReusable': true
}
}
});
};
export const createStreamAndBroadcastForTarget = async (target) => {
const broadcast = await createBroadcast(target.token);
const stream = await createStream(target.token);
const binded = await bindStreamToBroadcast(stream.result.id, broadcast.result.id, target.token);
return { stream, broadcast, binded };
};
export const createStreamAndBroadcastForTargets = async (targets, { ...all }) => {
const youtubeEvents = targets.map(createStreamAndBroadcastForTarget);
return Promise.all(youtubeEvents);
};
这只是原型(prototype),数据是硬编码的。但是,当我尝试为每个目标( channel )设置 token 时,配置文件不会更改,并且我仅在其中一个 channel 上执行相同的操作(创建生命)。每个 channel 都有自己的token
,在登录后从 google 返回,它是直接从 google 获取的对象,而不仅仅是 key (字符串)。我已经检查过了,每个 channel 的每个 token 都是不同的。看起来 window.gapi.client.setToken
和 window.gapi.auth.setToken
不起作用,并且不会切换任何内容。
最佳答案
YouTube API 是基于 channel 的,而不是基于用户的。您必须注销用户并在不同的 channel 下登录他们。
如果您想一次访问更多 channel ,并且我不确定该库是否支持该功能,则脚本中的每个 channel 都必须有一个实时 token 。
关于javascript - setToken 不会在 Google API (gapi) 中切换 YouTube channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60111548/