Трансляция экрана с помощью ffmpeg через http

Трансляция экрана с помощью ffmpeg через http

В эти карантинные дни я собирался поделиться своим рабочим столом с друзьями, чтобы объяснить им, что такое 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? Стоит сказать: мне не нужно хорошее качество, а падения приемлемы, потому что я собираюсь поделиться окном терминала.

Связанный контент