Estou configurando um ffserver para transmissões de CCTV com 16 câmeras - todos os canais individuais estão fluindo bem com uma configuração como:
<Feed 0.ffm>
File /tmp/0.ffm
FileMaxSize 5M
ACL allow 10.1.2.2
</Feed>
<Feed 0_webm.ffm>
File /tmp/0_webm.ffm
FileMaxSize 5M
ACL allow localhost
</Feed>
<Stream 0.mpg>
Feed 0.ffm
Format mpeg1video
NoAudio
VideoFrameRate 24
VideoBitRate 256
VideoSize 320x240
VideoBufferSize 40
VideoGopSize 12
</Stream>
<Stream 0.webm>
Feed 0_webm.ffm
Format webm
NoAudio
VideoCodec libvpx
VideoSize 320x240
VideoFrameRate 24
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 1
AVOptionVideo qmax 31
AVOptionVideo quality good
PreRoll 0
StartSendOnKey
VideoBitRate 500K
</Stream>
E as chamadas ffmpeg associadas feitas em processos iniciantes:
ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://10.1.2.1:8090/0.ffm
e
ffmpeg -f mpegvideo -i http://localhost:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm
No entanto, quando se trata da grande visão geral da grade 4x4 de todos os canais, estou tendo alguns problemas com a configuração do ffserver.conf. Usando esta chamada de ffmpeg feita em um daemon, eu posso gerenciar de maneira confiável cerca de 24-25 FPS (e testei que funciona salvando em um arquivo local e reproduzindo-o via ffplay):
ffmpeg -i http://localhost:8090/0.webm -i http://localhost:8090/1.webm -i http://localhost:8090/2.webm -i http://localhost:8090/3.webm -i http://localhost:8090/4.webm -i http://localhost:8090/5.webm -i http://localhost:8090/6.webm -i http://localhost:8090/7.webm -i http://localhost:8090/8.webm -i http://localhost:8090/9.webm -i http://localhost:8090/10.webm -i http://localhost:8090/11.webm -i http://localhost:8090/12.webm -i http://localhost:8090/13.webm -i http://localhost:8090/14.webm -i http://localhost:8090/15.webm -filter_complex "
nullsrc=size=1280x960 [bg];
[0:v] setpts=PTS-STARTPTS [v0];
[1:v] setpts=PTS-STARTPTS [v1];
[2:v] setpts=PTS-STARTPTS [v2];
[3:v] setpts=PTS-STARTPTS [v3];
[4:v] setpts=PTS-STARTPTS [v4];
[5:v] setpts=PTS-STARTPTS [v5];
[6:v] setpts=PTS-STARTPTS [v6];
[7:v] setpts=PTS-STARTPTS [v7];
[8:v] setpts=PTS-STARTPTS [v8];
[9:v] setpts=PTS-STARTPTS [v9];
[10:v] setpts=PTS-STARTPTS [v10];
[11:v] setpts=PTS-STARTPTS [v11];
[12:v] setpts=PTS-STARTPTS [v12];
[13:v] setpts=PTS-STARTPTS [v13];
[14:v] setpts=PTS-STARTPTS [v14];
[15:v] setpts=PTS-STARTPTS [v15];
[bg][v0] overlay=shortest=1 [bg];
[bg][v1] overlay=shortest=1:x=320 [bg];
[bg][v2] overlay=shortest=1:x=640 [bg];
[bg][v3] overlay=shortest=1:x=960 [bg];
[bg][v4] overlay=shortest=1:y=240 [bg];
[bg][v5] overlay=shortest=1:x=320:y=240 [bg];
[bg][v6] overlay=shortest=1:x=640:y=240 [bg];
[bg][v7] overlay=shortest=1:x=960:y=240 [bg];
[bg][v8] overlay=shortest=1:y=480 [bg];[bg]
[v9] overlay=shortest=1:x=320:y=480 [bg];
[bg][v10] overlay=shortest=1:x=640:y=480 [bg];
[bg][v11] overlay=shortest=1:x=960:y=480 [bg];
[bg][v12] overlay=shortest=1:y=720 [bg];
[bg][v13] overlay=shortest=1:x=320:y=720 [bg];
[bg][v14] overlay=shortest=1:x=640:y=720 [bg];
[bg][v15] overlay=shortest=1:x=960:y=720" http://localhost:8090/all_webm.ffm
o problema ocorre quando o link é para o ffserver - nem o processo do ffmpeg nem o processo do ffserver travam, mas o fluxo é inacessível (enquanto o .webm de canal único funciona bem). Eu tentei a mesma configuração que o .webm menor com a resolução alterada junto com isso:
<Feed all_webm.ffm>
File /tmp/all_webm.ffm
FileMaxSize 20M
ACL allow localhost
</Feed>
<Stream all.webm>
Feed all_webm.ffm
Format webm
NoAudio
VideoCodec libvpx
VideoSize 1280x960
VideoFrameRate 24
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin [1|10]
AVOptionVideo qmax [31|42]
AVOptionVideo quality good
PreRoll 0
StartSendOnKey
VideoBitRate [512|700|800|1024|3M|3686400]
</Stream>
Com cada combinação dos parâmetros mostrados com colchetes ao redor deles e alguns que não consigo lembrar. Alguém tem uma configuração de trabalho para transmitir arquivos webm grandes com ffserver?
Editar: adicionados os feeds que estou usando (sem alteração real, o fluxo all.webm ainda está quebrado de alguma maneira não especificada). Também eu deveria ter incluído isso inicialmente, mas a saída do ffplay é a seguinte (ele apenas trava indefinidamente):
ffplay http://10.1.1.15:8090/all.webm
ffplay version git-2013-03-17-ef3c888 Copyright (c) 2003-2013 the FFmpeg developers
built on Mar 17 2013 19:21:22 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configuration: --enable-gpl --enable-libass --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libspeex --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3
libavutil 52. 19.101 / 52. 19.101
libavcodec 55. 1.100 / 55. 1.100
libavformat 55. 0.100 / 55. 0.100
libavdevice 55. 0.100 / 55. 0.100
libavfilter 3. 47.102 / 3. 47.102
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
nan A-V: 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Outra edição:
Testado com o seguinte:
ffmpeg -r 29.97 -f lavfi -i testsrc -s 1280x960 -r 29.97 http://localhost:8090/all_webm.ffm
O que funciona para transmitir o fluxo de teste (embora devagar, ele tenha que parar a cada dois segundos para recuperar o atraso no chrome, falhar após o mesmo período no firefox) - só recebe 13 FPS. Então, tentei dividir as partes de teste e conversão de webm da seguinte forma:
ffmpeg -f lavfi -i testsrc -s 1280x960 -r 29.97 http://localhost:8090/all.ffm
ffmpeg -r 29.97 -f mpegvideo -i http://localhost:8090/all.mpg -r 29.97 -vcodec libvpx http://localhost:8090/all_webm.ffm
O primeiro comando recebe 29.97+ FPS, o segundo vem em 13 FPS.
Eu não estou tão preocupado com o FPS (13 FPS seria bom para a grade 4x4), no entanto, isso me leva a acreditar que o problema pode existir entre o comando ffmpeg longo (com a opção -format_complex) e a importação para ffserver, apesar do fato de que ele registra um arquivo .webm perfeitamente válido quando enviado para um arquivo local em vez de ffserver - ainda precisa de ajuda.
Outra edição:
Adicionando o final da grande saída ffmpeg sendo enviada para http: // localhost: 8090 / all_webm.ffm abaixo, eu vi uma saída similar no mpeg menor - > webm convertendo processos ffmpeg que funcionam, mas a taxa na qual ele difere, então eu não achei que importava (gravando para um arquivo .webm local e contando a duração sendo gravada enquanto saía na frente de uma das câmeras e de volta até o momento em que parei o processo, os tempos foram sincronizados e a reprodução mostrou um movimento suave de 25 FPS), mas não sei o suficiente sobre o processo para descartá-lo completamente (o que segue é o final da saída do console após pressionar "q" "para parar o ffmpeg):
[Parsed_overlay_26 @ 0x37464e0] Buffer queue overflow, dropping.
Last message repeated 19 times
Buffer queue overflow, dropping. size= 4kB time=00:36:21.64 bitrate= 0.0kbits/s
[Parsed_overlay_25 @ 0x374db20] Buffer queue overflow, dropping.
Last message repeated 28 times
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
Last message repeated 11 times
[Parsed_overlay_20 @ 0x374e3c0] Buffer queue overflow, dropping.
Last message repeated 30 times
[Parsed_overlay_19 @ 0x374e4a0] Buffer queue overflow, dropping.
Last message repeated 28 times
[Parsed_overlay_32 @ 0x3749b20] Buffer queue overflow, dropping.
Last message repeated 17 times
[Parsed_overlay_24 @ 0x3745fc0] Buffer queue overflow, dropping.
Last message repeated 2 times
[Parsed_overlay_23 @ 0x3751060] Buffer queue overflow, dropping.
Buffer queue overflow, dropping. size= 4kB time=00:36:22.28 bitrate= 0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
Last message repeated 6 times
Buffer queue overflow, dropping. size= 4kB time=00:36:23.04 bitrate= 0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
Last message repeated 22 times
Buffer queue overflow, dropping. size= 4kB time=00:36:23.68 bitrate= 0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
Last message repeated 10 times
Buffer queue overflow, dropping. size= 4kB time=00:36:24.12 bitrate= 0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
Last message repeated 9 times
Buffer queue overflow, dropping. size= 4kB time=00:36:24.84 bitrate= 0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
Last message repeated 1 times
Buffer queue overflow, dropping. size= 4kB time=00:36:25.32 bitrate= 0.0kbits/s
frame=54637 fps= 25 q=24.8 Lq=0.0 size= 48kB time=00:36:25.44 bitrate= 0.2kbits/s
video:172039kB audio:0kB subtitle:0 global headers:0kB muxing overhead -99.972099%