我正在使用ffmpeg并能够将实时流保存到文件中。执行此操作的命令是:
ffmpeg -re -i "rtmp://<ip addr>/livestream live=1" -f h264 test.flv
然而,我已经测试了两次,并且在抓住3:28的实时视频后两次ffmpeg都停止了。
整个输出在这里:
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认为流已经结束了?但这不可能,因为它是直播。
答案 0 :(得分:0)
这很可能与在服务器端执行的swf验证有关(请参阅'swfVfy'标志)。您可以尝试以下内容,看看流是否进一步。
ffmpeg -i“rtmp:/// livestream live = 1 swfVfy = 1 swfUrl = url_to_the flash_player_here”-y test.flv
不幸的是,在我的情况下,我无法让ffmpeg的swfVfy工作,并且使用rtmpdump可以正常运行相同的流。