Как я могу использовать 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