setToken не переключает канал YouTube в Google API (gapi) - PullRequest
1 голос
/ 07 февраля 2020

У меня есть проблема, которую я не могу решить. Я хочу разрешить пользователям подключаться к нескольким каналам YouTube одновременно и создавать для них потоки 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);
};

Это всего лишь прототип, а данные жестко закодированы. Однако, когда я пытаюсь setToken для каждой цели (канала), профиль не меняется, и я делаю то же самое (создаю жизни) только на одном из каналов. Каждый канал имеет свой собственный token, возвращаемый из Google после входа в систему, и это объект, взятый непосредственно из Google, а не просто ключ (строка). Я проверил это, и каждый токен отличается для каждого канала. Похоже, window.gapi.client.setToken и window.gapi.auth.setToken не работает и ничего не переключает.

1 Ответ

0 голосов
/ 17 февраля 2020

YouTube API основан на каналах, а не на пользователях. Вам придется выйти из системы и войти в систему под другим каналом.

Вам понадобится токен для каждого канала в вашем скрипте, если вы хотите иметь доступ к более чем одному за раз, и я не уверен, что библиотека поддерживает это.

...