Є форуми та теми про позбавлення 5-секундної затримки при використанні Pi разом із PI-Cam як камерою спостереження. У багатьох навчальних посібниках показано, як використовувати vlc для кодування та передачі зображень за допомогою протоколу RTP, що призводить до відставання ~ 5 секунд.
По-моєму, причина полягає в тому, що raspivid кодує потік до H264, тоді як VLC має його знову декодувати і повторно кодувати його до будь-якого RTP. Командний рядок виглядає приблизно так:
raspivid -w 640 -h 480 -o - -t 0 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
Перша частина розповідає raspivid для передачі відео на стандартний вихід:
raspivid -w 640 -h 480 -o - -t 0
Частина після труби, каже VLC забрати її та розшифрувати за допомогою h264:
cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
Цей муксинг та демуфінг - це талія ресурсів!
Я знайшов джерела raspicam у github, і я думаю, що щось можна зробити методом encoder_buffer_callback (зараз в рядку 848), щоб пропустити кодування. Однак я не добре знаю c, і зовсім не знайомий з кодуванням відео, тому у мене немає поняття, з чого почати.
На Github я бачу 330 вил, але вони, здається, не спеціально для rasicam (скоріше для всього проекту користувача). Я заблукав, намагаючись знайти вилку, яка видалила кодування або реалізувала щось простіше, як mjpeg.
Чи міг би хтось із знаннями кодеків c та відео допомогти мені та іншим користувачам gazillion допомогти позбутися затримки? Можливо, рішення вже є там, в одному з цих вил, але я витратив години на пошуки його без жодної удачі.
ps Я не шукаю рішення для браузера , але в кінцевому підсумку хочу передати його в Synology, бажано, використовуючи mjpeg streaming (але не через веб-сторінку, а звичайний mjpeg-потік, який вбудований у більшість комерційних ip-камер). Перший крок - позбутися h264.