Comments 13
Для этого лучше использовать стриминговые медиасерверы чем велосипеды на ffmpeg
Все так. В вашем посте описывается решение для стримминга. А тут скорее описан подход для статики, начиная с основ технологии. Хотелось показать, что в HLS нет никакой магии, а сделать это проще на элементарном примере с ffmpeg.
Вот про это хотелось рассказать в следующем посте. Сейчас в превью есть CDN https://cloud.yandex.ru/services/cdn, цены на трафик оттуда ниже чем непосредственно из Yandex Object Storage.
Степень «кусачасти» цен оценивать не берусь. Если сравнивать с публично доступными ценами конкурентов, которые я смог найти, то выглядит весьма привлекательно.
На aws легко построить пайплайн который будет брать видео, разбивать его, создавать плейлисты.. и более того в случае необходимости отдавать dash или mss
Если вы про https://aws.amazon.com/elastictranscoder/, то да, к сожалению, в Яндекс Облаке пока нет аналогичного managed решения.
Надеюсь, я смог вас убедить, что сегодня для распространения видеоконтента через интернет стоит смотреть в сторону HLS.
Не смогли, так как отсутствует сравнение с MPEG-DASH
Кстати, HLS с недавних пор получил поддержку fMP4, так что с помощью того же ffmpeg можно сгенерировать одновременно HLS и MPEG-DASH с переиспользованием одних и тех же сегментов
Вы правы, но сравнение их может потянуть на отдельный пост. Моя же цель была рассказать, что обычный MP4 одним файлом — не лучшая идея.
Одним из аргументов в пользу HLS может служить нативная поддержка этого формата браузерами: https://caniuse.com/?search=hls. В остальном это довольно схожие по функциональности и подходу форматы, имеющие примерно одинаковую поддержку сторонними плеерами.
А можете порекомендовать хороший туториал как этого добиться? Я пока нашёл вот этот, но там не fMP4 (т.е. HLS и DASH кодируются отдельно): https://blog.zazu.berlin/internet-programmierung/mpeg-dash-and-hls-adaptive-bitrate-streaming-with-ffmpeg.html
Ещё натыкался на GPAC/MP4Box, но там тоже не понятно.
В документации всё есть (в частности опции hls_playlist и dash_segment_type)
А можно ли как-то работать с видео файлами на s3 через ffmpeg?
На сколько я знаю, ffmpeg умеет сам получать доступ к файлам по HTTP(S). Нам нужно лишь сформировать ссылку. Если речь идет про бакет без публичного доступа, то можно воспользоваться предподписанной ссылкой. Например, так из сомандной строки.
ffmpeg -i "$(aws s3 presign s3://MY_BUCKET/MY_FILE --expires 5)"
Ну или формировать ее при помощи SDK на вашем любимом языке программирования.
Хранение видео в Yandex.Cloud