是否可以使用 MPEG-DASH 流式传输多帧率视频?

Posted

技术标签:

【中文标题】是否可以使用 MPEG-DASH 流式传输多帧率视频?【英文标题】:Is it possible to stream multi framerate videos using MPEG-DASH? 【发布时间】:2016-06-13 22:21:16 【问题描述】:

我将一个 mp4 视频转码为 5FPS、10FPS .. 30FPS 等多种帧率,并使用 MP4Box 将它们分段以在 DASH IF 播放器中播放。

FFMPEG 命令生成相同分辨率的多帧率视频:

ffmpeg -i fball.mp4 -f mp4 -vcodec libx264 -profile:v high -vf scale=1280:-1 -b:v 2000k -minrate 2000k -maxrate 2000k -bufsize 2000k -nal-hrd cbr -g 120 -keyint_min 120 -r 60.0 -flags +cgop -sc_threshold 0 -pix_fmt yuv420p -threads 0 -x264opts keyint=120:min-keyint=120:sps-id=1 -an -y fball_720p_60fps.mp4

ffmpeg -i fball.mp4 -f mp4 -vcodec libx264 -profile:v high -vf scale=1280:-1 -b:v 1000k -minrate 1000k -maxrate 1000k -bufsize 1000k -nal-hrd cbr -g 60 -keyint_min 60 -r 30.0 -flags +cgop -sc_threshold 0 -pix_fmt yuv420p -threads 0 -x264opts keyint=60:min-keyint=60:sps-id=1 -an -y fball_720p_30fps.mp4

提取音频的FFMPEG命令:

ffmpeg -i fball.mp4 -acodec aac -b:a 128k -vn -strict -2 -y fball_audio.mp4

用于分割的MP4Box命令:

MP4Box -frag 2000 -dash 2000 -rap -base-url ./segments/ -profile main -segment-name /segments/%s_ -out dash/fball_dash.mpd fball_720p_24fps.mp4 fball_720p_30fps.mp4 fball_720p_60fps。 mp4 fball_audio.mp4

    段持续时间:2 秒

    GOP 长度:片段持续时间 x 视频的 FPS

    分辨率:所有视频均为 720p

结果是视频解码错误或在切换帧率时停止。

我在转码时是否犯了任何错误? 是否可以使用 MPEG DASH 流式传输多帧率视频?

【问题讨论】:

【参考方案1】:

MP4Box 命令中添加-profile:dashavc264:onDemand 解决了视频解码错误问题。

MP4Box -dash 2000 -rap -profile dashavc264:onDemand -out dash/fball_dash.mpd fball_30fps.mp4 fball_60fps.mp4 fball_15fps.mp4 fball_5fps.mp4 fball_audio.mp4

【讨论】:

【参考方案2】:

在 MPEG-DASH 中,可以使用具有不同帧速率的表示。我认为这不是解码错误的原因。 DASH.js 和其他基于 html5/JS 的播放器正在使用底层浏览器的MSE 进行解码。因此,您的编码段很可能不符合浏览器解码引擎的要求或已损坏。

可以在here 找到如何使用 MP4Box 和 x264 生成 MPEG-DASH 内容的示例。在这种情况下,还有一些在线服务可用,例如 Bitmovin 或 Wowza。

【讨论】:

谢谢先生。我已经添加了我用来使用 MP4Box 分割多帧率视频的命令,你能给我提供避免 VIDEO DECODE 错误的命令吗

以上是关于是否可以使用 MPEG-DASH 流式传输多帧率视频?的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用自己的 Web 服务器作为 Widevine 许可授权来流式传输 mpeg-dash 视频吗?

如何使 MPEG-DASH 流式传输基于时间片的不同质量

通过 HTTP (MPEG-DASH) 进行流式传输有啥意义?

MPEG-DASH如何实现授权?

如何使用 MPEG DASH 流式传输和捕获 MP4 文件?

在任意段开始 MPEG-DASH 流