ffmpeg在从Axis Camera到FLV RTMP的900秒后停止流式传输


0

音频和视频工作900秒然后, ffmpeg 停止:

video:1889kB audio:1825kB global headers:0kB muxing overhead 2.162866%

我从AXIS IP摄像机流过 ffmpeg 在nginx。

ffmpeg -v verbose -i rtsp://root:pass@192.168.0.106/axis-media/media.amp -itsoffset 00:00:05 -acodec copy -ac 1 -ab 64k -ar 16000 -f flv -r 5 -qscale 1 -b 128kB rtmp://192.168.0.107/myapp/test

我测试了很多命令,但是这个命令给了我最好的结果。

控制台输出:

    ffmpeg -v verbose -i rtsp://root:pass@192.168.0.106/axis-media/media.amp -itsoffset 00:00:05 -acodec copy -ac 1 -ab 64k -ar 16000 -f flv -r 5 -qscale 1 -b 128kB rtmp://192.168.0.107/myapp/test 
ffmpeg version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
  built on Mar 30 2013 22:20:06 with gcc 4.7.2
  configuration: --arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.8.6-1ubuntu2' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-gnutls --enable-libgsm --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-swscale --enable-libcdio --enable-x11grab --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
  libavutil    51. 22. 1 / 51. 22. 1
  libavcodec   53. 35. 0 / 53. 35. 0
  libavformat  53. 21. 1 / 53. 21. 1
  libavdevice  53.  2. 0 / 53.  2. 0
  libavfilter   2. 15. 0 /  2. 15. 0
  libswscale    2.  1. 0 /  2.  1. 0
  libpostproc  52.  0. 0 / 52.  0. 0
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[rtsp @ 0x63fb20] SDP:
v=0
o=- 1376246125522976 1376246125522976 IN IP4 192.168.0.106
s=Media Presentation
e=NONE
b=AS:50064
t=0 0
a=control:*
a=range:npt=0.000000-
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:50000
a=framerate:5.0
a=transform:-1,0,0;0,-1,0;0,0,1
a=control:trackID=1
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; profile-level-id=4D0029; sprop-parameter-sets=Z00AKeKQKD9gLcBAQGkHiRFQ,aO48gA==
m=audio 0 RTP/AVP 97
c=IN IP4 0.0.0.0
b=AS:64
a=control:trackID=2
a=rtpmap:97 mpeg4-generic/16000/1
a=fmtp:97 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1408; sizeLength=13; indexLength=3; indexDeltaLength=3; profile=1; bitrate=64000;

[rtsp @ 0x63fb20] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 90000.00 (180000/2)
Input #0, rtsp, from 'rtsp://root:pass@192.168.0.106/axis-media/media.amp':
  Metadata:
    title           : Media Presentation
  Duration: N/A, start: 0.062063, bitrate: N/A
    Stream #0.0: Video: h264 (Main), yuvj420p, 320x240 [PAR 1:1 DAR 4:3], 90k tbr, 90k tbn, 180k tbc
    Stream #0.1: Audio: aac, 16000 Hz, mono, s16
Incompatible pixel format 'yuvj420p' for codec 'flv', auto-selecting format 'yuv420p'
[buffer @ 0x641aa0] w:320 h:240 pixfmt:yuvj420p
[avsink @ 0x6512a0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x645540] w:320 h:240 fmt:yuvj420p -> w:320 h:240 fmt:yuv420p flags:0x4
Output #0, flv, to 'rtmp://192.168.0.107/myapp/test':
  Metadata:
    title           : Media Presentation
    encoder         : Lavf53.21.1
    Stream #0.0: Video: flv, yuv420p, 320x240 [PAR 1:1 DAR 4:3], q=2-31, 1024 kb/s, 1k tbn, 5 tbc
    Stream #0.1: Audio: aac, 16000 Hz, mono
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
frame= 1185 fps=  5 q=1.0 Lsize=    3794kB time=236.80 bitrate= 131.2kbits/s    
video:1889kB audio:1825kB global headers:0kB muxing overhead 2.162866%

对不起,我觉得我不明白你的问题或具体问题是什么。
slhck

我的问题是使用ffmpeg流的多路复用开销。流式传输的工作时间为900秒,而ffmpeg会因多路复用开销错误而停止工作。
AcsChristoph

复用开销是正常的,可以预期;你有什么问题吗?如果您有非常严格的带宽要求,则必须补偿开销,否则不必担心。
slhck

我在ffmpeg中使用严格的带宽设置进行测试,结果是一样的
AcsChristoph

提示:你的 ffmpeg 版本已过时,包含大量错误。请不要使用 ffmpeg 在Ubuntu的软件包中提供,但通过转到下载更新的版本 ffmpeg.org/download.html - 或者从源代码编译它。
slhck

Answers:


1

如果 ffmpeg 停止编码,然后没有更多的输入要解析,或者流已经结束。这是流本身的问题,或者可能是您的错误 ffmpeg 版。

你正在使用的是 旧的和(已知)破碎的版本 由Ubuntu软件包提供。考虑 更新到最近 ffmpeg 再试一次。


至于多路复用开销:

无论何时拍摄视频,音频或字幕流并将它们放入容器格式(例如FLV),容器都需要一些额外的数据来复用(复用)这些流。

它基本上是围绕实际数据的元数据,和 你无法摆脱这种开销 。每个容器都会引入一个多路复用开销,但它通常不到实际数据的几个百分点。

如果你有 非常 因此,对可用带宽的严格要求,您应该考虑编码视频和音频流时可能产生的开销。例如,如果您有1500 kBit / s视频和128 kBit / s音频,则所需的整个带宽大于1628 kBit / s(例如1660 kBit / s)。


感谢您的重播...我已经减少了开销faktors,我使用128 kBit / s用于视频(h264)和64 kBit / s用于音频(aac)
AcsChristoph

ffmpeg新版本新编译 - >工作伟大=)thx
AcsChristoph
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.