Контекст: мне нужен доступ к защищенным носителям за моим сервером. Поскольку я не могу передавать заголовки в тег <video>
, доступ можно получить, запросив одноразовый токен доступа к файлу, который затем добавляется к медиа-объекту в качестве параметра запроса. Моя реализация выглядит так:
async loadMedia(URI) {
//Extracting MediaObject id & filename from URI
let [id, filename] = URI.split("/")[2].split("-");
//Obtaining token from MediaObject
let { data } = await Api.get(`${MEDIA_ENDPOINT}/${id}`, {
properties: ["token"]
});
//Obtaining MimeType from Filename
let type = lookup(filename);
return {
src: `${process.env.HOSTURL}${URI}?token=${data.token}`,
type
};
}
И компонент выглядит так:
<video controls width="100%">
<source src="${src}" type="${type}">
</video>
Он работает на веб-устройствах и Android устройствах, но на iOS он просто показывает пустой экран управления:
Тот же метод повторно используется для изображений, и они, кажется, отлично работают в iOS, но видео доставляют мне проблемы. Я что-то упустил?
Возвращенный src
выглядит примерно так:
https://example.com/media/123-5ea3ba34b6ac1907212752.mp4?token=103416a1b294e1db83ee3175993cb79c
Я также пробовал использовать <video src="${src}" />
и фреймы, без удачи.
Временным решением может быть загрузка всего носителя через XHR и установка base64 как sr c, но это будет проблемой для больших медиафайлов и медленных rnet соединений.
Я осмотрелся и не смог найти видеопроигрыватель HTTP, который может передавать заголовки запросов.
Если это важно, я использую VueJS и загружаю медиа и другой контент через анонимный Компонент.
Любые мысли приветствуются :)