Oh hi.
Я перепилил свою стримилку, теперь задержка может опускаться до 0.5 секунд, если настроить броадкастер чтобы он делал libx264-кодирование с -preset ultrafast и -tune zerolatency. Особенно если без звука. В среднем же, без специальной настройки - порядка 1-5 секунд. Чуть меньше, чем у тех же твитчей с их хард-лимитом в 20-60 секунд, но (и благодоря чему получается низкая задержка) -- никаких перекодировок. Как поток пришлют, так его стримилка и разошлёт всем кто подписан на rtmp-сообщения. Ещё один возможный дравбек - это долгая "буферизация" стрима, которая на самом деле не буферизация вовсе, а ожидание первого кейфрейма в потоке, что позволяет синхронизироваться с потоком и получить те самые 0.5 секунды идеальной задержки.
Может кому пригодится.
video.eientei.org
github.com/eientei/videostreamer
Пожелания и предложения крайне желательны. Особенно в форме патчей.
Краткий гайд по стриму:
(Unix/ffmpeg):
ffmpeg -r 30 -f x11grab -s 1366x768 -i :0.0 -f pulse -ac 2 -i loopback.monitor -vcodec libx264 -preset ultrafast -tune zerolatency -pix_fmt yuv420p -s 1366x768 -ar 44100 -threads 0 -f flv rtmp://video.eientei.org/live/128c853bb99bfeb971f9f766c92326c8
Здесь:
- -f x11grab -s 1366x768 -i :0.0 -- разрешение экрана на нулевом дисплее нулевого X-сервера
- -f pulse -ac 2 -i loopback.monitor -- монитор девайса loopback пульсы (будут браться все звуки что играют через loopback); loopback - название синка, который хотим захватывать.
- -preset ultrafast -tune zerolatency -- полезные оптимизации libx264-кодека
- -s 1366x768 -- разрешение стрима
- 128c853bb99bfeb971f9f766c92326c8 -- приватный ключ стрима (выдаётся после примитивной регистрации, виден в профиле)
(Windows/OBS):
- Broadcast Settings -> Mode: Live Stream
- Broadcast Settings -> Streaming Service: Custom
- Broadcast Settings -> FMS URL: rtmp://video.eientei.org/live
- Broadcast Settings -> Play Path/Stream key: 128c853bb99bfeb971f9f766c92326c8
- Broadcast Settings -> Auto-Reconnect: true (просто чтобы стрим переподключался сам, если я начну опять крутить какую-нибудь педальку и всё отвалится)
- Advanced -> Video -> x264 CPU Prset: Ultrafast (будет жрать больше трафика, будет меньше задержка). Если траффик - проблема, можно опустить до Superfast или Veryfast дурацкие названия, но что поделать
- Advanced -> Video -> Custom x264 Encoder Settings: tune=zerolatency
Остальное по вкусу. Рекомендую большие разрешения (>720p) ужимать в 1.25-полтора-1.75-два-раза, в зависимости от исходного разрешения, чтобы достичь оптимального 720p.