
В эти карантинные дни я собирался поделиться своим рабочим столом с друзьями, чтобы объяснить им, что такое git на практике. Проблемы следующие:
- Я использую FreeBSD.
- Мы за NAT. Но у меня есть VPS с VPN (Wireguard), настроенным для этих целей.
- Я хочу использовать бесплатное и простое («безотстойное») программное обеспечение.
Я решил использовать общий доступ к своему рабочему столу ffmpeg -f x11grab
и потоковую передачу на любой порт. Поскольку мы можем находиться в одной виртуальной сети, друзья могли смотреть эту трансляцию без проблем, используя любой VLC, MPV или веб-браузер. Проблема возникла, когда я понял, что ffmpeg не может выводить напрямую на http. Я перепробовал много решений, таких как отправка через rtmp на YouTube Live Streaming (накладные расходы и не бесплатная услуга) и разделение и передача с протоколом HLS и HTTP-сервером и остановился на HLS.
Мой запуск ffmpeg:
ffmpeg -f x11grab -video_size 1920x1080 -i :0 -c:v h264 -f hls -hls_time 1 -g 15 stream.m3u8
И mpv, с которым я тестирую:
mpv --no-cache --no-resume-playback stream.m3u8
Я вижу, что задержка составляет около 10-15 секунд. Даже если я ставлю битрейт видео на полмегабайта, задержка такая же (и качество, конечно, плохое), так что проблема может быть не в пропускной способности [а я даже не начинал трансляцию куда-то дальше моего локального ПК!].
Я нашелТАК ответьгде пользователь говорит, что HLS — неправильный протокол для низкой задержки. Я прочитал много блогов, статей в Википедии и ffmpeg Википедии (StreamingGuide) но не смог найти решение. Как мне уменьшить задержку или какое программное обеспечение я могу использовать вместо этого (предпочтительнее ffmpeg), чтобы мои друзья могли видеть мой рабочий стол с задержкой в несколько секунд, как это делают Discord и Skype? Стоит сказать: мне не нужно хорошее качество, а падения приемлемы, потому что я собираюсь поделиться окном терминала.