使用ip camera时ffmpeg启动太慢(与使用OpenCV相同)

时间:2015-03-15 08:13:31

标签: c++ opencv ffmpeg

这是我的代码:

ffmpeg -i http://192.168.0.101:8889/video?dummy=param.mjpeg out.mjpg

当我运行此命令时,它将立即打印在下面:

ffmpeg version N-70223-g7296716 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.9.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
  libavutil      54. 19.100 / 54. 19.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 23.105 / 56. 23.105
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.101 /  5. 11.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100

然而,显示下一行需要将近20秒,并打印此警告

[mjpeg @ 0000000002c4fec0] Format mjpeg detected only with low score of 25, misdetection possible!

然后打印出来:

Input #0, mjpeg, from 'http://192.168.0.101:8889/video?dummy=param.mjpeg':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 640x480 [SAR 1:1 DAR 4:3], 25 tbr, 1200k tbn, 25 tbc
Output #0, mjpeg, to 'a.mjpg':
  Metadata:
    encoder         : Lavf56.23.105
    Stream #0:0: Video: mjpeg, yuvj420p(pc), 640x480 [SAR 1:1 DAR 4:3], q=2-31,
200 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.26.100 mjpeg
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> mjpeg (native))
Press [q] to stop, [?] for help
frame=  195 fps=0.0 q=24.8 size=    1022kB time=00:00:07.80 bitrate=1073.6kbits/
frame=  199 fps=185 q=24.8 size=    1043kB time=00:00:07.96 bitrate=1073.6kbits/
frame=  203 fps=125 q=24.8 size=    1064kB time=00:00:08.12 bitrate=1073.6kbits/

更糟糕的是,当我使用OpenCV时,open的{​​{1}}也需要相同的时间!

VideoCapture
打印“开始”后20秒,打印“结束”。

我在从here下载的win7 64位上使用#include "opencv2/opencv.hpp" #include <iostream> using namespace std; using namespace cv; int main(){ cout<<"Start"<<endl; VideoCapture cap("http://192.168.0.101:8889/video?dummy=param.mjpg"); cout<<"End"<<endl; return 0; }

任何想法都将受到赞赏!

1 个答案:

答案 0 :(得分:2)

尝试:

ffmpeg -f mjpeg -i http://192.168.0.101:8889/video?dummy=param.mjpeg out.mjpg

其他选项如果不起作用:

  

可能需要很长时间,因为MJPEG流不包含时间戳,   默认情况下,它们是由ffmpeg生成的,就像25 FPS一样。

     

尝试ffmpeg -use_wallclock_as_timestamps 1 -i http:// ...

     

尝试ffmpeg -f mjpeg -use_wallclock_as_timestamps 1 -i http:// ...

     

尝试ffmpeg -f mjpeg -i http:// ...

     

还尝试-probesize 32 -analyzeduration 0

     

或类似的东西,以减少探测期。

来源:http://trac.ffmpeg.org/ticket/2343