Как правильно хранить на веб-сервере HTTP видеофайлы (HLS, dash, mp4, h264 и т. Д.)
Мне нужно хранить много видео файлов на моем http веб-сервере (каждое видео должно быть максимум 3 минуты). Это видео будет воспроизводиться в приложении для Android/ IOS (аналогично Instagram).
Но сейчас я не знаю, с форматами будет оптимальным. Я определенно хотел бы иметь адаптивную потоковую передачу битрейта (например, hls или dash). Но я не знаю, какой кодек использовать (например, H.264 или H.265), какой контейнер использовать (mp4?), В каких разных битрейтах мне нужно кодировать видео и т. Д...
1 ответ
Обычная архитектура для "правильной" службы потокового видео OTT состоит в том, чтобы хранить ваши потоки ABR в формате "карусели" на головном конце или на стороне сервера и использовать упаковщик JIT (Just in Time) для обслуживания потоков к конечным устройствам по мере необходимости. в то время, когда они запрашиваются пользователем, чаще всего через CDN.
Упаковщик JIT на лету преобразует формат карусели в требуемый формат потоковой передачи для конечного устройства, обычно HLS или DASH.
Устройства и браузеры Apple обычно предпочитают HLS и Windows, а Google наследует, а браузеры теперь предпочитают DASH. В прошлом устройства Windows использовали SmoothStreaming, а Flash использовал HDS, но эти потоковые протоколы ABR сейчас встречаются гораздо реже.
Допустим, вы хотите, чтобы ваш JIT-упаковщик выполнял как можно меньше работы при преобразовании из формата карусели в потоковый формат, сохраняя его в фрагментированном MP4, CMAF ( https://mpeg.chiariglione.org/standards/mpeg-a/common-media-application-format), вероятно, правильный подход сейчас. До недавнего времени HLS поддерживал только формат TS ( https://en.wikipedia.org/wiki/MPEG_transport_stream) для сегментов видео, но теперь он поддерживает фрагментированный MP4, что означает, что он выровнен с DASH.
Если ваши видео должны быть зашифрованы, то JIT-упаковщик, как правило, также выполняет шифрование JIT. В настоящее время режим шифрования ("вкус" шифрования AES) различен для систем / устройств DRM, поэтому, хотя Common Encryption (CENC - https://en.wikipedia.org/wiki/MPEG_Common_Encryption) означает один поток может содержать ключевую информацию для любого из основных DRM, на практике в это время зашифрованный поток обычно будет отличаться для устройств iOS по сравнению с другими устройствами. Это меняется по мере того, как все переходят к одному и тому же режиму шифрования, но для замены или обновления устройства пользователя потребуется некоторое время.
Что касается скорости передачи данных, это зависит от того, какие устройства вы хотите поддерживать, и сколько потоков вы готовы иметь.
Например, нет смысла поддерживать скорость передачи данных, превышающую возможности отображения ваших целевых устройств.
Крупные операторы, как правило, поддерживают 5-9 битрейт, но вам, вероятно, это не нужно, если вы в основном ориентируетесь на короткие видео на мобильных устройствах.