Ocorreu um problema ao executar ffmpeg
para uma ffserver
em uma instalação nova do Xubuntu 12.10.
Acabei de instalar o Xubuntu 12.10 a partir do zero e, em seguida, instalei o ffmpeg. Eu liguei minha webcam (lembre-se que eu usei essa webcam em outro sistema Ubuntu 12.04 e 11.04 sem problemas usando o mesmo comando ffserver
e mesmo) e executei o comando ffmpeg:
ffmpeg -f video4linux2 -i /dev/video0 http://IP:8090/cam1.ffm
Agora, em teoria, isso deve funcionar, mas o que eu recebo é:
fmpeg version 0.8.4-6:0.8.4-0ubuntu0.12.10.1, Copyright (c) 2000-2012 the Libav developers
built on Nov 6 2012 16:49:20 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
ffmpeg: /build/buildd/libav-0.8.4/libavutil/mathematics.c:79: av_rescale_rnd: Assertion 'c > 0' failed.
Aborted (core dumped)
Eu pesquisei esse erro e não o encontrei em lugar algum. Então eu tentei o mplayer para ver se a webcam estava funcionando e se video0
estava funcionando:
mplayer tv:// -tv device=/dev/video0:driver=v4l2:width=352:height=288
Isso funciona perfeitamente e mostra minha tela da webcam.
Agora eu pensei, ok, talvez essa coisa estúpida de depreciação tenha algo a ver com isso, então eu tentei exatamente o mesmo comando para o ffmpeg usando o avconv e recebi o mesmo erro.
lsusb
me dá:
Bus 001 Device 003: ID 04fc:1528 Sunplus Technology Co., Ltd SPCA1527A/SPCA1528 SD card camera (webcam mode)
Como eu disse, tenho exatamente a mesma webcam trabalhando em dois outros PCs com duas instalações diferentes do Ubuntu.
EDITAR:
Eu recompilei ffmpeg
usando estas instruções:
link
Funciona, se eu usar apenas o mesmo comando acima, a CPU é executada a 100% como se estivesse convertendo. Mas nenhuma saída em ffmpeg
, apenas fica aqui indefinidamente até eu ctrl-c
:
ffmpeg version git-2013-01-01-fde1305 Copyright (c) 2000-2013 the FFmpeg developers
built on Jan 1 2013 11:42:21 with gcc 4.7 (Ubuntu/Linaro 4.7.2-2ubuntu1)
configuration: --enable-gpl --enable-libass --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3
libavutil 52. 13.100 / 52. 13.100
libavcodec 54. 85.100 / 54. 85.100
libavformat 54. 58.102 / 54. 58.102
libavdevice 54. 3.102 / 54. 3.102
libavfilter 3. 30.102 / 3. 30.102
libswscale 2. 1.103 / 2. 1.103
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
[video4linux2,v4l2 @ 0x97c8200] DTS discontinuity in stream 0: packet 3 with DTS 21527529506, packet 4 with DTS 21527577460
Então, uma vez eu ctrl-c
duas vezes eu recebo isso:
^CEstimating duration from bitrate, this may be inaccurate
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 21527.513483, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p, 320x240, -2147483 kb/s, 18.08 tbr, 1000k tbn, 1000k tbc
http://IP:8090/cam1.ffm: Input/output error
Received signal 2: terminating.
Ok, deixe-me ver se eu especificar o framerate o que acontece:
ffmpeg -r 2 -f video4linux2 -i /dev/video0 http://IP:8090/cam1.ffm
ffmpeg version git-2013-01-01-fde1305 Copyright (c) 2000-2013 the FFmpeg developers
built on Jan 1 2013 11:42:21 with gcc 4.7 (Ubuntu/Linaro 4.7.2-2ubuntu1)
configuration: --enable-gpl --enable-libass --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3
libavutil 52. 13.100 / 52. 13.100
libavcodec 54. 85.100 / 54. 85.100
libavformat 54. 58.102 / 54. 58.102
libavdevice 54. 3.102 / 54. 3.102
libavfilter 3. 30.102 / 3. 30.102
libswscale 2. 1.103 / 2. 1.103
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
[video4linux2,v4l2 @ 0xa5fa2a0] DTS discontinuity in stream 0: packet 3 with DTS 21627329870, packet 4 with DTS 21627409821
[video4linux2,v4l2 @ 0xa5fa2a0] max_analyze_duration 5000000 reached at 5000000
[video4linux2,v4l2 @ 0xa5fa2a0] Estimating duration from bitrate, this may be inaccurate
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 21627.313851, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p, 320x240, 0 kb/s, 2 fps, 0.25 tbr, 1000k tbn, 2 tbc
Incompatible pixel format '(null)' for codec 'flv', auto-selecting format '(null)'
Last message repeated 1 times
[flv @ 0xa6046c0] Specified pixel format yuvj420p is invalid or not supported
Output #0, ffm, to 'http://198.144.186.224:8090/cam1.ffm':
Metadata:
creation_time : now
Stream #0:0: Video: flv1 ([0][0][0][5] / 0x5000000), yuvj420p, 320x2, q=255-255, 200 kb/s, 1000k tbn, 2 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg -> flv)
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Meu arquivo ffserver
conf tem esta aparência (embora, como eu disse, ele estivesse funcionando antes em outro computador):
Port 8090
BindAddress IP
MaxHTTPConnections 30
MaxClients 20
MaxBandwidth 2000
CustomLog -
<Feed cam1.ffm>
File /tmp/cam1.ffm
FileMaxSize 10000K
</Feed>
<Stream cam1.flv>
Feed cam1.ffm
Format flv
VideoCodec flv
VideoFrameRate 2
VideoBufferSize 20000
VideoBitRate 200
VideoQMin 5
VideoQMax 10
VideoSize qvga
PreRoll 0
Noaudio
AVOptionVideo flags +global_header
</Stream>
<Stream stat.html>
Format status
</Stream>
EDIT 2:
Acabei de confirmar que executá-lo na minha máquina Ubuntu 11.04 funciona bem, o comando é um pouco diferente, mas funciona:
ffmpeg -r 10 -s 320x240 -f video4linux2 -aspect 4:3 -i /dev/video0 http://IP:8090/cam1.ffm
Então eu copiei este comando para o outro sistema Xubuntu e recebi o problema missing yuvj420p
de antes:
[video4linux2,v4l2 @ 0xb1c53e0] Estimating duration from bitrate, this may be inaccurate
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 27867.321194, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p, 320x240, -1 kb/s, 10 tbr, 1000k tbn, 10 tbc
Incompatible pixel format '(null)' for codec 'flv', auto-selecting format '(null)'
Last message repeated 1 times
[flv @ 0xb1ca6e0] Specified pixel format yuvj420p is invalid or not supported
Output #0, ffm, to 'http://198.144.186.224:8090/cam1.ffm':
Metadata:
creation_time : now
Stream #0:0: Video: flv1 ([0][0][0][5] / 0x5000000), yuvj420p, 320x10, q=255-255, 200 kb/s, 1000k tbn, 10 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg -> flv)
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Acima é postada a informação de configuração quando executo ffmpeg
na minha máquina Xubuntu, aqui está o que é exibido quando eu executo ffmpeg
na minha máquina Ubuntu 11:
FFmpeg version 0.6.6-4:0.6.6-0ubuntu0.11.04.1, Copyright (c) 2000-2010 the Libav developers
built on Jun 12 2012 16:28:21 with gcc 4.5.2
configuration: --extra-version=4:0.6.6-0ubuntu0.11.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
WARNING: library configuration mismatch
libavutil configuration: --extra-version=4:0.6.6-1ubuntu1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libdirac --enable-libgsm --enable-libopenjpeg --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libfaad --enable-libdirac --enable-libfaad --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libavcodec configuration: --extra-version=4:0.6.6-1ubuntu1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libdirac --enable-libgsm --enable-libopenjpeg --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libfaad --enable-libdirac --enable-libfaad --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libavformat configuration: --extra-version=4:0.6.6-0ubuntu0.11.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libavdevice configuration: --extra-version=4:0.6.6-0ubuntu0.11.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libavfilter configuration: --extra-version=4:0.6.6-0ubuntu0.11.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libswscale configuration: --extra-version=4:0.6.6-0ubuntu0.11.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libpostproc configuration: --extra-version=4:0.6.6-0ubuntu0.11.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / 52.72. 2
libavformat 52.64. 2 / 52.64. 2
libavdevice 52. 2. 0 / 52. 2. 0
libavfilter 1.19. 0 / 1.19. 0
libswscale 0.11. 0 / 0.11. 0
libpostproc 51. 2. 0 / 51. 2. 0
Então, é claro, ele é compilado com diferentes opções, mas qual opção é aquela que suporta yuvj420p
ou como obtenho o erro para que isso desapareça agora que eu sei qual é o problema "parece" ser?
EDIT 3:
Eu recompilou usando meus switches do meu sistema Ubuntu 11:
./configure --enable-gpl --enable-libass --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3 --enable-shared --enable-libv4l2 --enable-avfilter --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-pthreads --enable-zlib --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-libdc1394 --disable-static
O --enable-shared
é suposto ser yuvj
subconjuntos.
Então, isso é feito e todas as opções, agora eu corro e obtenho:
[video4linux2,v4l2 @ 0x9d1d0e0] Estimating duration from bitrate, this may be inaccurate
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 36365.493926, bitrate: 36863 kb/s
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480, 36863 kb/s, 10 tbr, 1000k tbn, 10 tbc
Incompatible pixel format '(null)' for codec 'flv', auto-selecting format '(null)'
Last message repeated 1 times
[flv @ 0x9d22440] Warning min_rate > 0 but min_rate != max_rate isn't recommended!
[flv @ 0x9d22440] bitrate below min bitrate
Output #0, ffm, to 'http://IP:8090/cam1.ffm':
Metadata:
creation_time : now
Stream #0:0: Video: flv1 ([0][0][0][5] / 0x5000000), yuv420p, 640x10, q=255-255, 200 kb/s, 1000k tbn, 10 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo -> flv)
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Portanto, agora ele é executado e encontra coisas, mas ainda não me permite, por causa de bitrate below min bitrate
. Eu tentei definir -b 200k
e -b 600k
, mas ainda a mesma coisa. Eu acho que é porque o arquivo FFM afirma 200, mas eu quero isso em 200.
Então, como eu desabilito a verificação da taxa de bits?
Eu acho que esse é o problema agora, para ser honesto, sou tentado a instalar o Ubuntu 11.04 neste sistema e arranhá-lo, cada nova versão do software torna as coisas cada vez mais difíceis.