FFMPEG-流媒体在几秒后停止

11

大家好,这是我最近几天在处理的问题。经过在ffmpeg社区的彻底搜索,我无法找到解决方案。我无法将本地flv流式传输到Facebook的rtmp服务器。

我正在运行以下命令,将本地flv视频流式传输到Facebook的rtmp服务器,以便直播本地文件。

```ffmpeg -re -i SampleM.flv -acodec libmp3lame  -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 6000k -vb 400k -maxrate 1500k -deinterlace -vcodec libx264 -preset veryfast -g 30 -r 30 -f flv "rtmp://live-api.facebook.com:80/rtmp/my_key"```

即使阅读了ffmpeg文档,我仍然无法找到导致以下情况的问题,这是个不幸的情况。

我仍然缺少需要了解的某些内容。

以下是执行上述命令的日志记录。

```ffmpeg version N-91024-g293a6e8332 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
  libavutil      56. 18.100 / 56. 18.100
  libavcodec     58. 19.101 / 58. 19.101
  libavformat    58. 13.102 / 58. 13.102
  libavdevice    58.  4.100 / 58.  4.100
  libavfilter     7. 21.100 /  7. 21.100
  libswscale      5.  2.100 /  5.  2.100
  libswresample   3.  2.100 /  3.  2.100
  libpostproc    55.  2.100 / 55.  2.100
Input #0, flv, from '.\video.flv':
  Metadata:
    audiodelay      : 0
    canSeekToEnd    : 1
    creationdate    : Fri Feb 03 11:52:46 2006
                    :
  Duration: 00:00:16.92, start: 0.000000, bitrate: 316 kb/s
    Stream #0:0: Audio: mp3, 22050 Hz, stereo, fltp, 40 kb/s
    Stream #0:1: Video: vp6f, 1 reference frame, yuv420p, 360x288 (368x288), 266 kb/s, 25 fps, 25 tbr, 1k tbn
Stream mapping:
  Stream #0:1 -> #0:0 (vp6f (native) -> h264 (libx264))
  Stream #0:0 -> #0:1 (mp3 (mp3float) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
[graph_1_in_0_0 @ 0000020c0bcc4200] tb:1/22050 samplefmt:fltp samplerate:22050 chlayout:0x3
[format_out_0_1 @ 0000020c0bca2cc0] auto-inserting filter 'auto_resampler_0' between the filter 'Parsed_anull_0' and the filter 'format_out_0_1'
[auto_resampler_0 @ 0000020c0bca5140] ch:2 chl:stereo fmt:fltp r:22050Hz -> ch:2 chl:stereo fmt:fltp r:44100Hz
[graph 0 input from stream 0:1 @ 0000020c0c4f4600] w:360 h:288 pixfmt:yuv420p tb:1/1000 fr:25/1 sar:0/1 sws_param:flags=2
[scaler_out_0_0 @ 0000020c0c4f73c0] w:426 h:240 flags:'bicubic' interl:0
[scaler_out_0_0 @ 0000020c0c4f73c0] w:360 h:288 fmt:yuv420p sar:0/1 -> w:426 h:240 fmt:yuv420p sar:0/1 flags:0x4
[libx264 @ 0000020c0bc80600] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0000020c0bc80600] profile Constrained Baseline, level 3.0
[libx264 @ 0000020c0bc80600] 264 - core 155 r2901 7d0ff22 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=7 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=30 keyint_min=3 scenecut=40 intra_refresh=0 rc_lookahead=10 rc=abr mbtree=1 bitrate=400 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=1500 vbv_bufsize=6000 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'rtmp://live-api.facebook.com:80/rtmp/my key:
  Metadata:
    audiodelay      : 0
    canSeekToEnd    : 1
    creationdate    : Fri Feb 03 11:52:46 2006
                    :
    encoder         : Lavf58.13.102
    Stream #0:0: Video: h264 (libx264), 1 reference frame ([7][0][0][0] / 0x0007), yuv420p, 426x240, q=-1--1, 400 kb/s, 30 fps, 1k tbn, 30 tbc
    Metadata:
      encoder         : Lavc58.19.101 libx264
    Side data:
      cpb: bitrate max/min/avg: 1500000/0/400000 buffer size: 6000000 vbv_delay: -1
    Stream #0:1: Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002), 44100 Hz, stereo, fltp, delay 1105, 128 kb/s
    Metadata:
      encoder         : Lavc58.19.101 libmp3lame
No more output streams to write to, finishing.e=00:00:16.51 bitrate= 533.3kbits/s speed=0.992x
[flv @ 0000020c0bc97fc0] Failed to update header with correct duration.
[flv @ 0000020c0bc97fc0] Failed to update header with correct filesize.
frame=  424 fps= 25 q=-1.0 Lsize=    1153kB time=00:00:16.95 bitrate= 557.1kbits/s speed=0.997x
video:869kB audio:265kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.666647%
Input file #0 (.\video.flv):
  Input stream #0:0 (audio): 649 packets read (84767 bytes); 649 frames decoded (373824 samples);
  Input stream #0:1 (video): 424 packets read (566376 bytes); 424 frames decoded;
  Total: 1073 packets (651143 bytes) demuxed
Output file #0 (rtmp://live-api.facebook.com:80/rtmp/my key):
  Output stream #0:0 (video): 424 frames encoded; 424 packets muxed (889641 bytes);
  Output stream #0:1 (audio): 649 frames encoded (747648 samples); 650 packets muxed (271673 bytes);
  Total: 1074 packets (1161314 bytes) muxed
[libx264 @ 0000020c0bc80600] frame I:18    Avg QP:27.75  size:  7001
[libx264 @ 0000020c0bc80600] frame P:406   Avg QP:32.67  size:  1879
[libx264 @ 0000020c0bc80600] mb I  I16..4: 39.3%  0.0% 60.7%
[libx264 @ 0000020c0bc80600] mb P  I16..4:  8.3%  0.0%  2.3%  P16..4: 42.2% 16.2%  4.4%  0.0%  0.0%    skip:26.6%
[libx264 @ 0000020c0bc80600] final ratefactor: 28.61
[libx264 @ 0000020c0bc80600] coded y,uvDC,uvAC intra: 40.2% 33.7% 9.2% inter: 23.8% 7.5% 0.2%
[libx264 @ 0000020c0bc80600] i16 v,h,dc,p: 24% 50% 20%  6%
[libx264 @ 0000020c0bc80600] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 34% 18%  5%  5%  4%  8%  4%  8%
[libx264 @ 0000020c0bc80600] i8c dc,h,v,p: 67% 24%  7%  2%
[libx264 @ 0000020c0bc80600] kb/s:418.33```

这张图片显示在Facebook上该视频流只活了几秒钟

```[flv @ 0000020c0bc97fc0] Failed to update header with correct duration.
[flv @ 0000020c0bc97fc0] Failed to update header with correct filesize.```

请帮我解决这个问题,视频在几秒钟后停止流媒体传输似乎是日志中列出的错误的主要原因。我已经检查了延迟问题,但无论如何它们都没有帮助。

当我使用Google计算引擎而不是我的PC作为流媒体服务时,流媒体甚至更早地结束。


懒惰的建议是尝试使用 aac 而不是 libmp3lame。此外,输入仅为16秒。 - llogan
输出持续时间似乎与输入持续时间相匹配。 - Gyan
@LordNeckbeard,没戏伙计!我已经尝试了3分钟长的输入视频,但还是没有成功。 - Manjot Singh
@Gyan,我没有理解上下文! - Manjot Singh
根据输出时长,FFmpeg没有在视频中途停止流传输。 - Gyan
哦!明白了。那接下来呢?根据日志,更新持续时间和文件大小失败了。怎么解决? :/ @Gyan - Manjot Singh
1个回答

16
在mux完成一个flv文件后,FFmpeg会更新文件头(位于文件前端)的持续时间和文件大小。然而,在流式传输时,ffmpeg无法跳转到前端,因此会显示警告信息。
您可以通过添加标志(-flvflags no_duration_filesize)来禁用此功能,例如:
ffmpeg -re -i SampleM.flv -acodec libmp3lame -ar 44100 -b:a 128k \
  -pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 6000k \
  -vb 400k -maxrate 1500k -deinterlace -vcodec libx264           \
  -preset veryfast -g 30 -r 30 -f flv                            \
  -flvflags no_duration_filesize                                 \
  "rtmp://live-api.facebook.com:80/rtmp/my_key"

2
感谢您提供这个完美的答案!此命令在Windows的ffmpeg CLI中运行良好。不幸的是,我无法在Linux上运行此命令,因为会抛出“flvflags未被识别”的错误。 - Manjot Singh
1
你需要ffmpeg 3.3版本或更高版本。 - Gyan
谢谢!抱歉那个愚蠢的错误!感谢您!问题已完全解决! :) - Manjot Singh
1
@ManjotSinghKalsi 只是补充一下...那个消息没有任何意义,因为你没有将FLV输出到磁盘。它不会导致流失败。如果你遇到流问题,这并不会解决你的问题,只是让错误消息在你的情况下消失了。 - Brad
@Brad,很高兴听到这个消息。像 Gyan说的那样,在一个不可寻址流中更新头部信息是非常困难的。虽然忽略这些头部信息可以消除错误!我可能已经完全解决了我的问题!但我不知道未来是否会出现其他问题!如果您能解释一下在什么情况下这种做法行不通,那就更好了。谢谢! - Manjot Singh
1
@ManjotSinghKalsi,现在没有足够的信息告诉你最初的问题是什么。如果现在它正在工作,那么很可能是Facebook端的暂时性问题。 - Brad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接