Raspivid потоковая передача и сохранение с низкой задержкой

Я пытаюсь сохранить и транслировать Raspi Camera через Wi-Fi со скоростью 10 кадров в секунду с помощью Rpi Zero W (без serverX)

Мне нужно сохранить в полном кадре и высоком разрешении, которые предполагают использование кодека MJPEG. Это делается этой командой:

raspivid -md 2 -w 2592 -h 1944 -fps 10 -cd MJPEG -fl -f -t 0 -o videoOut.mjpeg

Это работает нормально и использует только 6% процессора.

Тогда мне нужно стримить в 640x480. Моя идея состоит в том, чтобы транслировать предварительный просмотр из raspivid с разрешением экрана Rpi, установленным на 640x480.

Чтобы получить очень низкую задержку, я должен использовать WebRTC (https://github.com/mpromonet/webrtc-streamer).

Я не хочу использовать UV4L, чтобы оставаться открытым исходным кодом.

Webrtc-streamer управляет экранами, но кажется только с ServerX.

У кого-нибудь есть идея?

Спасибо!

1 ответ

Трудно или даже невозможно выполнять потоковую передачу с малой задержкой, используя скринкаст окна предварительного просмотра видео. Просто слишком много шагов, каждый из которых занимает целое время кадра.

  1. Возьмите кадр камеры и переведите его из цветового пространства YCrCb 4:2:0 в RGB 1:1:1.
  2. Нарисуйте его на сервере отображения X Window System.
  3. Возьмите его с поверхности дисплея, переведите обратно в YCrCb и сожмите.
  4. Протолкните его через сеть к зрителю.
  5. Расшифруйте и визуализируйте его.

Это пять кадров или полсекунды при 10 кадрах в секунду.

Вам гораздо лучше захватить сжатый поток напрямую. Процессор Broadcom RPi имеет встроенное оборудование для сжатия видео и может создавать сжатые потоки данных чуть более чем за один кадр. Он может отображать окно предварительного просмотра одновременно с созданием сжатого видеопотока.

И WebRTC довольно хорошо справляется с сетевыми аспектами потоковой передачи.

Другие вопросы по тегам