0

我正在玩 ffmpeg 并且能够将实时流保存到文件中。这样做的命令是:

ffmpeg -re -i "rtmp://<ip addr>/livestream live=1" -f h264 test.flv

但是,我已经对此进行了两次测试,并且两次 ffmpeg 在获取 3:28 的实时视频后都会停止。

整个输出在这里:

bash-4.2$ ffmpeg -re -i "rtmp://<ip addr>/livestream live=1" -vcodec libx264 -f h264 test.flv
WARNING: gnome-keyring:: couldn't connect to: /home/me/.cache/keyring-bpajcJ/pkcs11: No such file or directory
ffmpeg version 0.10.4 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jul 20 2012 22:01:52 with gcc 4.7.0 20120507 (Red Hat 4.7.0-5)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib --mandir=/usr/share/man --arch=i686 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables' --enable-bzlib --disable-crystalhd --enable-gnutls --enable-libass --enable-libcdio --enable-libcelt --enable-libdc1394 --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib --cpu=i686 --enable-runtime-cpudetect
  libavutil      51. 35.100 / 51. 35.100
  libavcodec     53. 61.100 / 53. 61.100
  libavformat    53. 32.100 / 53. 32.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 61.100 /  2. 61.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
  libpostproc    52.  0.100 / 52.  0.100
WARNING: gnome-keyring:: couldn't connect to: /home/me/.cache/keyring-bpajcJ/pkcs11: No such file or directory
Metadata:
  videocodecid          avc1
  width                 320.00
  height                240.00
  frameWidth            320.00
  frameHeight           240.00
  displayWidth          320.00
  displayHeight         240.00
  framerate             29.97
trackinfo:
  timescale             90000.00
  language              eng
sampledescription:
  sampletype            H264
  type                  video
  profile-level-id      42e00c
  sprop-parameter-sets  Z0LgDNoFB+wEQAAC7sAAr8gh,aM4zyA==
  description           {H264CodecConfigInfo: profile: "Baseline", level: 1.2, frameSize: 320x240, displaySize: 320x240, PAR: 1:1, frameRate: 29.97}
rtpsessioninfo:
  name                  H264 Stream 1
  origin                - 1486490083 118668671 IN IP4 10.93.183.3
  timing                0 0
  protocolversion       0
attributes:
  range                 npt=now-
[flv @ 0x9578ee0] Estimating duration from bitrate, this may be inaccurate
Input #0, flv, from 'rtmp://<ip addr>/livestream live=1':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: h264 (Constrained Baseline), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 14.99 tbr, 1k tbn, 59.94 tbc
[buffer @ 0x99ee900] w:320 h:240 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
[libx264 @ 0x9584540] using SAR=1/1
[libx264 @ 0x9584540] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
[libx264 @ 0x9584540] profile High, level 1.2
Output #0, h264, to 'test.flv':
  Metadata:
    encoder         : Lavf53.32.100
    Stream #0:0: Video: h264, yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=-1--1, 90k tbn, 14.99 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
Press [q] to stop, [?] for help
RTMP_ReadPacket, failed to read RTMP packet body. len: 16582bitrate= 212.1kbits/s    
frame= 3111 fps= 15 q=-2.0 Lsize=    5385kB time=00:03:27.47 bitrate= 212.6kbits/s    
video:5385kB audio:0kB global headers:0kB muxing overhead 0.000000%
[libx264 @ 0x9584540] frame I:13    Avg QP:18.70  size: 31866
[libx264 @ 0x9584540] frame P:1908  Avg QP:22.29  size:  2392
[libx264 @ 0x9584540] frame B:1190  Avg QP:29.24  size:   451
[libx264 @ 0x9584540] consecutive B-frames: 39.5% 24.0% 13.0% 23.4%
[libx264 @ 0x9584540] mb I  I16..4:  0.2%  1.2% 98.6%
[libx264 @ 0x9584540] mb P  I16..4:  0.0%  0.0%  0.7%  P16..4: 22.0%  3.5%  2.6%  0.0%  0.0%    skip:71.2%
[libx264 @ 0x9584540] mb B  I16..4:  0.0%  0.0%  0.2%  B16..8: 15.6%  2.8%  1.1%  direct: 1.3%  skip:78.9%  L0:47.0% L1:42.2% BI:10.8%
[libx264 @ 0x9584540] 8x8 transform intra:2.2% inter:8.5%
[libx264 @ 0x9584540] coded y,uvDC,uvAC intra: 98.0% 94.9% 73.9% inter: 14.5% 16.0% 11.3%
[libx264 @ 0x9584540] i16 v,h,dc,p:  0% 50% 17% 33%
[libx264 @ 0x9584540] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  7% 21% 11%  3% 13%  6% 21%  4% 14%
[libx264 @ 0x9584540] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11% 21% 14%  5% 11%  7% 14%  5% 12%
[libx264 @ 0x9584540] i8c dc,h,v,p: 65% 15% 10% 10%
[libx264 @ 0x9584540] Weighted P-Frames: Y:0.5% UV:0.1%
[libx264 @ 0x9584540] ref P L0: 80.8% 10.4%  7.6%  1.2%  0.0%
[libx264 @ 0x9584540] ref B L0: 94.9%  4.8%  0.2%
[libx264 @ 0x9584540] ref B L1: 96.4%  3.6%
[libx264 @ 0x9584540] kb/s:212.48

虽然我没有看到任何错误。看起来ffmpeg认为流已经结束了?但这是不可能的,因为它是直播。

4

1 回答 1

0

这很可能与在服务器端执行的 swf 验证有关(参见“swfVfy”标志)。您可以尝试以下方法,看看流是否更进一步。

ffmpeg -i "rtmp:///livestream live=1 swfVfy=1 swfUrl=url_to_the flash_player_here" -y test.flv

不幸的是,在我的情况下,我无法让 ffmpeg 的 swfVfy 工作,并且让相同流的示例与 rtmpdump 一起正常工作。

于 2013-01-20T17:02:09.987 回答