Служите удаленному URL с потоком node.js - PullRequest
1 голос
/ 06 марта 2020

У меня есть видео, хранящееся в amazon s3.

Теперь я передаю его клиенту с node.js stream

return request(content.url).pipe(res)

Но, Следующий формат не работает с Safari.

Safari не может воспроизводить потоковые данные. Но один и тот же код работает для chrome и firefox.

Я провел некоторое исследование и выяснил, что

chrome параметр диапазона содержимого запроса выглядит как

[0 -]

Но сафари делает то же самое с диапазонами содержимого

[0-10] [11-20] [21-30 ]

Теперь, если содержимое было сохранено на моем сервере, я мог бы разбить файл на фрагменты с помощью

fs.createReadStream(path).pipe(res)

, чтобы обслуживать сафари с запрошенным диапазоном содержимого

Как уже упоминалось в этом блоге https://medium.com/better-programming/video-stream-with-node-js-and-html5-320b3191a6b6

Как я могу сделать то же самое с удаленным URL-адресом, хранящимся в s3?

К вашему сведению, это невозможно временно загрузить контент на сервер и удалить его после подачи. Так как сайт должен получать хороший трафик c.

1 Ответ

2 голосов
/ 07 марта 2020

Как сделать то же самое с удаленным URL-адресом, хранящимся в s3?

Не надо.

Пусть S3 обслуживает данные. Подпишите URL, чтобы временно разрешить доступ клиенту. Тогда вам не нужно ничего обслуживать или прокси, и вы экономите большую пропускную способность. Пример из документации :

var params = {Bucket: 'bucket', Key: 'key'};
var url = s3.getSignedUrl('getObject', params);
console.log('The URL is', url);

... Так как, сайт должен получать хорошие трафики c.

Возможно, вы также захотите использовать CDN, чтобы еще больше сократить ваши расходы и повысить производительность. Если вы уже используете AWS, CloudFront будет хорошим выбором.

...