FFMPEG- 流媒体在几秒钟后停止

Posted

技术标签:

【中文标题】FFMPEG- 流媒体在几秒钟后停止【英文标题】:FFMPEG- Streaming Stops after few seconds 【发布时间】:2018-10-22 07:47:54 【问题描述】:

亲爱的社区你好

从最近几天开始,这就是我正在处理的事情。在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```

This Image shows that The stream was alive few Few Seconds on Facebook

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

请纠正我,日志中列出的上述错误似乎是视频在几秒钟后停止流式传输的主要原因。我已经检查了延迟问题,但无论如何它们都无济于事。

请帮我解决这个问题。我会非常感谢。 :')

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

【问题讨论】:

懒惰的建议是尝试aac 而不是libmp3lame。此外,输入只有 16 秒长。 输出持续时间似乎与输入持续时间相匹配。 @LordNeckbeard ,运气不好的朋友!我试过 3 分钟长的输入视频,也没有运气。 @Gyan,我没听懂上下文! ffmpeg 没有在视频中间停止流式传输,基于输出持续时间。 【参考方案1】:

在混合 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"

【讨论】:

感谢您的完美回答!此命令一直在 Windows 的 ffmpeg CLI 中运行。不幸的是,我无法在 linux 上运行它,因为抛出的错误是 flvflags unrecognised 您需要 ffmpeg 3.3 或更高版本。 赞!对不起那个愚蠢的错误!谢谢!问题完全解决! :) @ManjotSinghKalsi 只是补充一下...该消息没有任何意义,因为您没有将 FLV 输出到磁盘。它不会导致您的流失败。如果您遇到流问题,这不会解决您的问题,它只会让错误消息消失,在您的情况下。 @ManjotSinghKalsi 没有足够的信息来告诉您最初的实际问题是什么。如果它现在可以工作,那可能是 Facebook 端的一个暂时性问题。

以上是关于FFMPEG- 流媒体在几秒钟后停止的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg录制流媒体,正常方式停止录制

xamps 上的 MySQL 服务运行,然后在几秒钟后停止

声纳服务在几秒钟后停止

如何为媒体播放器组件启用自动播放?

媒体控件栏在 VideoView Android 中出现一秒钟后消失

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体server笔记