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 ответ
Трудно или даже невозможно выполнять потоковую передачу с малой задержкой, используя скринкаст окна предварительного просмотра видео. Просто слишком много шагов, каждый из которых занимает целое время кадра.
- Возьмите кадр камеры и переведите его из цветового пространства YCrCb 4:2:0 в RGB 1:1:1.
- Нарисуйте его на сервере отображения X Window System.
- Возьмите его с поверхности дисплея, переведите обратно в YCrCb и сожмите.
- Протолкните его через сеть к зрителю.
- Расшифруйте и визуализируйте его.
Это пять кадров или полсекунды при 10 кадрах в секунду.
Вам гораздо лучше захватить сжатый поток напрямую. Процессор Broadcom RPi имеет встроенное оборудование для сжатия видео и может создавать сжатые потоки данных чуть более чем за один кадр. Он может отображать окно предварительного просмотра одновременно с созданием сжатого видеопотока.
И WebRTC довольно хорошо справляется с сетевыми аспектами потоковой передачи.