将 FFMPEG 编码为 MPEG-DASH – 或使用关键帧簇的 WebM – 用于 MediaSource API

2023-12-31

我目前正在将视频流发送到 Chrome,以通过 MediaSource API 进行播放。

据我了解,MediaSource 仅支持使用 MPEG-DASH 编码的 MP4 文件,或具有以关键帧开头的簇的 WebM 文件(否则会引发错误:媒体段不以关键帧开头)。

有没有办法使用 FFMPEG 实时编码 MPEG-DASH 或关键帧 WebM 格式?

Edit:

我刚刚尝试过ffmpeg ... -f webm -vcodec vp8 -g 1这样每一帧都是关键帧。这不是理想的解决方案。不过现在它确实可以与 MediaStream 一起使用。有什么方法可以将片段与 WebM 中的关键帧同步,这样就不需要每个帧都是关键帧?


关于 WebM / MP4 和 MediaSource 的参考问题:

媒体源 Api 不适用于自定义 webm 文件(Chrome 版本 23.0.1271.97 m) https://stackoverflow.com/questions/14037112/media-source-api-not-working-for-a-custom-webm-file-chrome-version-23-0-1271-97/14048349#14048349

MediaSource API 和 mp4 https://stackoverflow.com/questions/9316859/mediasource-api-and-mp4/10287861#11583712


目前 FFMPEG 不支持 DASH 编码。您可以使用 FFMPEG 进行分段(https://www.ffmpeg.org/ffmpeg-formats.html#segment_002c-stream_005fsegment_002c-ssegment https://www.ffmpeg.org/ffmpeg-formats.html#segment_002c-stream_005fsegment_002c-ssegment),但我建议结合使用 FFMPEG 和 MP4Box。使用 FFMPEG 转码您的实时视频,然后使用 MP4Box 分段并创建 .mpd 索引。

MP4Box 是 GPAC 的一部分(http://gpac.wp.mines-telecom.fr/ http://gpac.wp.mines-telecom.fr/).

这是使用 h264 的示例:

ffmpeg -threads 4 -f v4l2 -i  /dev/video0 -acodec libfaac -ar 44100 -ab 128k -ac 2 -vcodec libx264 -r 30 -s 1280x720  -f mp4 -y "$movie" > temp1.mp4 && MP4Box -dash 10000 -frag 1000 -rap "$movie"

如果您需要 VP8 (WebM),请使用:-vcodec libvpx and -f webm or -f ts.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 FFMPEG 编码为 MPEG-DASH – 或使用关键帧簇的 WebM – 用于 MediaSource API 的相关文章