Отображение видеофайла объемом 1 ГБ в интерфейсе react js, сохраненного в частной корзине S3 с помощью flask

#reactjs #flask #amazon-s3 #boto3

#reactjs #flask #amazon-s3 #boto3

Вопрос:

Мне нужно отображать / транслировать большие видеофайлы в reactjs. Эти файлы загружаются в частную корзину s3 пользователем с использованием react form и flask.

Я пробовал getObject метод, но размер моего файла слишком велик. get a signed url метод потребовал от меня загрузки файла.

Я новичок в настройке AWS-python-react. Какой наилучший / наиболее эффективный / наименее затратный подход к отображению больших видеофайлов в react?

Ответ №1:

AWS предлагает другие специальные потоковые сервисы, но если вы действительно хотите получить их с S3, вы можете получить файлы с помощью torrent, который при правильном клиенте / видеоплеере позволит вам начать их воспроизведение без необходимости загружать весь файл.

Поскольку вы упомянули, что используете Python, вы могли бы сделать это с помощью AWS SDK следующим образом:

 import boto3

s3 = boto3.client('s3')
response = client.get_object_torrent(
    Bucket='my_bucket',
    Key='/some_prefix/my_video.mp4'
)
  

Объект ответа будет иметь этот формат:

 {
    'Body': StreamingBody()
}
  

Полные документы здесь.

Затем вы могли бы использовать что-то вроде webtorrent для потоковой передачи его во интерфейсе.

Следует отметить две вещи об этом подходе (цитируя документы):

  • Amazon S3 не поддерживает протокол BitTorrent в регионах AWS, запущенный после 30 мая 2016 года.
  • Вы можете получить торрент-файл только для объектов размером менее 5 ГБ.

Комментарии:

1. привет, спасибо. Ранее я использовал firebase. Кто-то предложил мне использовать s3 (потому что s3 дешевле firebase). Я также открыт для изучения других вариантов хранения.

2. Np. S3 как решение для хранения объектов на самом деле было хорошим и экономически эффективным предложением, но само по себе это не лучший вариант для вашего варианта использования. Не уверен в масштабах вашего проекта, но вам обязательно следует заглянуть в CloudFront, который представляет собой службу CDN, которая, помимо прочего, позволяет вам настраивать RTMP (потоковые) дистрибутивы с S3 в качестве источника. Это означает, что вы можете хранить файлы на S3 и использовать его возможности хранения, а также использовать преимущества CDN и потоковой передачи.

3. Спасибо, обязательно проверю это. Также, если может помочь дальнейший контекст, предположим, что каждый пользователь может загружать видеофайлы объемом до 30 ГБ (в месяц). И все эти видео должны отображаться в reactjs. Предположим, у меня может быть до 1000 пользователей в месяц.

4. Даже с новой информацией я по-прежнему придерживаюсь своего предыдущего ответа / комментариев.

5. Привет, видеофайл не загружается в reactjs codepen.io/drngke/pen/abNGbEg