Existem inúmeros fóruns e tópicos sobre como se livrar de uma latência de 5 segundos ao usar um Pi junto com uma PI-Cam como uma câmera de vigilância. Muitos tutoriais mostram como usar o vlc para codificar e transmitir as imagens usando o protocolo RTP, o que resulta em um atraso de ~ 5 segundos.
De acordo com mim, o motivo é que o raspivid está codificando o fluxo para o H264, enquanto o VLC precisa decodificá-lo novamente e recodificá-lo para o que quer que seja o RTP. A linha de comando fica assim:
raspivid -w 640 -h 480 -o - -t 0 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
A primeira parte diz ao raspivid para transmitir vídeo para a saída padrão:
raspivid -w 640 -h 480 -o - -t 0
A parte após o tubo, diz ao VLC para buscá-lo e decodifica-lo usando h264:
cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
Este mux-ing e desmux-ing é uma cintura de recursos!
Encontrei as fontes do raspicam no github e acho que algo pode ser feito no método encoder_buffer_callback (atualmente na linha 848) para pular a codificação. No entanto, eu não sou bom em ce nem familiarizado com a codificação de vídeo, então não tenho idéia por onde começar.
No Github, vejo 330 garfos, mas eles não parecem ser especificamente para raspicam (e sim para todo o projeto da terra do usuário). Eu me perdi tentando encontrar um fork que removeu a codificação ou implementou algo mais simples como o mjpeg.
Alguém com conhecimento em codec c e de vídeo poderia ajudar a mim e aos outros zilhões de usuários a se livrar da latência? Provavelmente a solução já está disponível em um desses garfos, mas passei horas procurando por ela sem sorte.
ps Não estou procurando uma solução para navegador , mas, em última análise, quero transmiti-la para uma Synology, preferencialmente usando streaming mjpeg (mas não através de uma página da Web, em vez disso, um fluxo mjpeg padrão que é incorporado na maioria das câmeras IP comerciais). O primeiro passo é se livrar do h264.