Как я могу использовать fetchLoader или xhrLoader при предоставлении заголовка Auhorization?

Я пытаюсь получить доступ к потоку m3u8 на стороннем сервере, для которого я аутентифицировался (через токен в заголовке "Авторизация").

Для контекста, чтобы воспроизвести поток в ffplay, я бы сделал:

ffplay -headers "Authorization: TOKEN" -i "URL"

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

Во-первых, какой загрузчик я должен использовать (чтобы обойти CORS, потому что я не могу сказать серверу разрешить запросы CORS из моего домена), xhr или Fetch? Я предполагаю получить?

Как бы я применил токен авторизации к каждому запросу? Вот мои два конфига для xhr & fetch:

var xhrConfig = {
  xhrSetup: function(xhr, url) {
    xhr.withCredentials = true;
    xhr.open('GET', url, true);
    xhr.setRequestHeader('Authorization', token)
  }
}
var fetchConfig = {
  fetchSetup: function(context, initParams) {
    initParams.credentials = 'include';
    var myHeaders = new Headers();
    myHeaders.append('Authorization', token);
    initParams.headers = myHeaders;
    return new Request(context.url,initParams);
  }
}

Если я пытаюсь использовать xhrLoader, как описано выше, я получаю сообщение об ошибке при загрузке файла манифеста:

Failed to load https://manifest.m3u8: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'MY_DOMAIN' is therefore not allowed access.

Если я попытаюсь с fetchLoader, как описано выше, я получу следующее (подразумевается, что он во время загрузки загрузил файл манифеста, но не может получить доступ к ключу AES, как определено в манифесте):

Failed to load https://KEY_FILE_REFERRED_TO_WITHIN_MANIFEST: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'MY_DOMAON' is therefore not allowed access. The response had HTTP status code 403.
VM39:1 Cross-Origin Read Blocking (CORB) blocked cross-origin response https://KEY_FILE_REFERRED_TO_WITHIN_MANIFEST with MIME type text/html. See https://www.chromestatus.com/feature/5629709824032768 for more details
^ key file within the manifest

Для файла ключа также требуется тот же токен авторизации для доступа. Он находится в том же домене верхнего уровня, что и основной файл манифеста, но остальное отличается, например, так:

Manifest & segments: https://hls.domain.com/manifest.m3u8
AES Key (within Manifest: https://drm.domain.com/manifest.m3u8

0 ответов

Другие вопросы по тегам