2017-01-07 streaming
by Vasil KolevМалко наблюдения по stream-ването и платформите.
(днес stream-вах учредителното събрание на Да България (в която вече съм и член). По темата за Да България ще пиша някой друг път)
Facebook имат една от най-малоумните streaming платформи, на които съм попадал. Освен разните изисквания и горна граница на качеството (максимумът е 720p), event-ите им expire-ват доста бързо (т.е. не можеш да си го създадеш от предната вечер, като в youtube), на едно-две прекъсвания приключват и event-а (ако се налага човек да си пипне настройките няколко пъти, трябва да го създава наново) и имат и лимит за продължителността (което е особено дразнещо). Като за капак, човек ако няма flash не може да си пусне stream-а да е live каквото и да прави, та докато си правех тестовете се наложи да си ползвам виртуалката с windows (и тестовия facebook account на жената).
Youtube пък имат едно малко неразбирателство с ffmpeg, че пращат някакъв keepalive по RTMP сесията, който ffmpeg-а го няма за нищо, не го чете и в един момент едни tcp буфери се напълват (говорим за 16-тина байта на минута-две, та отнема няколко часа, че да се прояви) и се троши връзката. Слава богу, не махат event-а толкова бързо, колкото facebook и може да се рестартира.
Моя си streaming server си работеше най-добре (един nginx с mod_nginx_rtmp). Понеже имаше малко проблеми да reencode-вам всичко локално, бълвах на 10mbps директно изхода от хардуерния encoder до marla, от там дърпах с 3 ffmpeg-а и качвах смачкания на 1mbps stream до facebook, youtube и до същия nginx, за да мога да си го гледам.
И да си имам редът за бълване до facebook (понеже ми отне един следобед да го докарам както трябва, най-вече заради борбата с оня flash) – двете важни неща за -g 45 (може и 60), имат изискване за keyframe поне на всеки 2 секунди, и -r 30, понеже изискват 30-кадрово видео. Другото е стандартно – H.264, AAC, 44100hz (и моно звук, понеже такъв ми подаваха). Добавката с -af volume=60d трябва да се махне за всички, на които не им подават звук на ужасяващо ниски нива.
(за всички, които имаха забележки за звука, няма хубав automatic gain control, който бих могъл да сложа, за да изравнява добре нивата на това, което влиза. В залата микрофоните се чуваха с различна сила, много хора знаеха къде да говорят и нямаше и как да се направи нещо повече. Аз лично щях да търся начин да окича колкото мога повече от участниците с headset-ове, което па екипът ни много много го мрази)
ffmpeg -i rtmp://strm.ludost.net/st/XXXXX -r 30 -c:v libx264 -b:v 1000k -s 1280x720 -preset:v veryfast -threads 6 -minrate 1000k -r 30 -g 45 -maxrate 1000k \ -c:a libfaac -ar 44100 -ac 1 -b:a 128k -af 'volume=60d' -f flv 'rtmp://rtmp-api.facebook.com:80/rtmp/XXXXXX'
Иначе е неприятно, че трябва да живеем на proprietary кодеци. При някакви скорошни тестове около FOSDEM пак се оказа, че VP9 още няма как да се encode-ва в близо до реално време без поне два пъти процесорната мощ, нужна за H.264, има малко поддръжка и никакъв хардуер, който може да го дава.
p.s. Важен факт – за всичко, което се ползва по време на streaming-а трябва да има хубав работещ КАБЕЛЕН internet, и като резерва, 3G, през което да се работи като се чупи локалния wifi (щото той със сигурност ще умре по някое време).
Tags: streaming