HLS, abr, transcoding presets

mrinner

Member
Входящие потоки: RTMP (Encoder, old flash), WebRTC.
Отдача клиентам: HLS, WebRTC.

- Возможно ли сделать transcoding полагаясь на разрешение входящего потока? К примеру при входящем RTMP 720p 30fps, сделать transcode в 480p, 360p, 240p 30fps? При 1080p -> 720p -> etc.
- Возможно ли организовать hls playlist, который включал в себя эти нарезанные потоки?
- Есть ли способ определить инфо входящего потока: resolution/fps/bitrate?
- Можно ли задать video bitrate в профиле транскодера?
- В профиле транскодинга задается width/height - можно ли задать только height, чтобы aspect правильно рассчитался?
 

Max

Administrator
Staff member
Возможно ли сделать transcoding полагаясь на разрешение входящего потока? К примеру при входящем RTMP 720p 30fps, сделать transcode в 480p, 360p, 240p 30fps? При 1080p -> 720p -> etc.
Транскодер сейчас не имеет встроенной логики, а действует так, как прописано в профиле.
Если например в профиле прописано 640x480 для profile1 и пользователь запросил stream1_profile1, то траскодировать будет в это разрешение вне зависимости от источника потока.
Теоретически можно обратиться к Origin-серверу через REST API /rest-api/stream/find и узнать разрешение входящего потока. Далее на основании этих данных выбрать запрашиваемый профиль. Например, если REST API вернуло 1280x720, то запрашиваем stream1_profile1 с транскодированием в 640x480. Если REST API вернуло 1920x1080, то запрашиваем stream1_profile2 с транскодированием в 640x360.
У нас в планах есть доработать транскодирование по данным входящего потока, но сейчас это не реализовано.
Возможно ли организовать hls playlist, который включал в себя эти нарезанные потоки
Если с помощью HLS запросить поток stream1_profile1 с Edge сервера, то автоматически должен включиться транскодинг и пойти нарезка.
Если этого не происходит, отпишите, перепроверим.
Есть ли способ определить инфо входящего потока: resolution/fps/bitrate?
Система мониторинга потоков в разработке. Поэтому на данный момент простого способа нет.
Можно ли задать video bitrate в профиле транскодера?
Да, можно. В документации этот параметр упустили в описании yml конфига, но в примерах он есть.
В профиле транскодинга задается width/height - можно ли задать только height, чтобы aspect правильно рассчитался?
Нет. Профили сейчас задаются жестко, без привязки к разрешению входящего потока.
 

mrinner

Member
Если с помощью HLS запросить поток stream1_profile1 с Edge сервера, то автоматически должен включиться транскодинг и пойти нарезка.
Если этого не происходит, отпишите, перепроверим.
Имелось ввиду создание плейлиста, который содержит все нарезанные потоки, чтобы заработал adaptive bitrate в hls плеере.
Сегменты в каждом потоке должны быть выровнены по времени, чтобы небыло затыков при переключении качества\проигрывании.
Code:
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-STREAM-INF:BANDWIDTH=488000,NAME="FPS:30.0",CODECS="avc1.42c015,mp4a.40.2",RESOLUTION=426x240
chunklist_1=.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1258000,NAME="FPS:30.0",CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=854x480
chunklist_2=.m3u8
Спасибо за ответы.
 

Max

Administrator
Staff member
Имелось ввиду создание плейлиста, который содержит все нарезанные потоки, чтобы заработал adaptive bitrate в hls плеере.
В текущей HLS реализации один плейлист содержит только один нарезанный поток с сегментами. Т.е. адаптивность не работает.
 
Top