Потоковое содержимое Google Диска в Chromecast - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь создать приложение, в котором пользователь может локально воспроизводить контент, сохраненный на диске Google, а также разыгрывать его.

В соответствии с документами Google Drive Документы для разработчиков Google Drive , янужно сделать http-запрос следующим образом:

GET https://www.googleapis.com/drive/v3/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media
Authorization: Bearer <ACCESS_TOKEN>

Для локального воспроизведения я использую exoplayer , который работает очень гладко, моя проблема заключается в том, когда я пытаюсь привести контент.

Мне кажется, что я прочитал все документы, относящиеся к приложениям отправителей и получателей, с сайта разработчиков Google Cast Документы для разработчиков Google Cast , и я не смог привести контент.

Приемное приложение получает 403 error , когда я отлаживаю, потому что оно требует аутентификации. 403 Ошибка в браузере .

Эта ошибка вызвана тем, что я не могу установить заголовки HTTP " Авторизация: канал-носитель ACCESS_TOKEN ", причина в том, что нет опциинасколько я знаю, чтобы установить заголовки HTTP.

Я даже открыл тикет проблемы в Google Здесь , где я просил включить эту функцию в общее приложение приемника, так что мыне нужно размещать приложение получателя только для этой функции.И они ответили на это

". Вам нужно будет написать приемник и предоставить обработчик в translationConfig.manifestRequestHandler, который добавляет заголовок. Вам нужно будет использовать поле customData запроса на загрузку, чтобы передать свой токен.или любые другие данные."

Итак, я попытался сделать то, что мне сказали, и сейчас приложение отправителя отправляет токен авторизации в приложение получателя, но я застрялтокен для заголовка запроса.

Вот текущий код из приложения получателя.

const context = cast.framework.CastReceiverContext.getInstance();
const castOptions = new cast.framework.CastReceiverOptions();
const playerManager = context.getPlayerManager();

let playbackConfig = (Object.assign(new cast.framework.PlaybackConfig(), playerManager.getPlaybackConfig()));

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
    console.log("token: ", request.media.customData.token);

    playbackConfig.manifestRequestHandler = requestInfo => {
    requestInfo.withCredentials = true;
    requestInfo.headers = {};
    requestInfo.headers['Authorization'] = request.media.customData.token;
    };
  return request;
});
castOptions.playbackConfig = playbackConfig;
context.start(castOptions);

Было бы здорово, если кто-нибудь может мне помочь или направить меня.Спасибо

1 Ответ

0 голосов
/ 02 июля 2019

После многих месяцев исследований я изменяю способ создания URL-адреса, который отправляется на каст, без необходимости доступа и токена.Теперь я просто отправляю файл, который хочу преобразовать или скачать, в следующем формате (ключ API должен иметь доступ к файлам)

https://www.googleapis.com/drive/v3/files/GOOGLE_DRIVE_ID_OF_THE_FILE?alt=media&key=API_KEY

После этого я получил другую ошибку,о которых я сообщил Google в этой ссылке , и они обнаружили, что была проблема с кодеком моего видео ( Здесь - список поддерживаемых кодеков).Поэтому мне пришлось перекодировать все мои видео.Я использовал Ручной тормоз , чтобы сделать это, у него даже есть предустановка для Chromecast.И, наконец, я смог снять свое видео с Google Drive.

...