我目前正在将视频流发送到 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(使用前将#替换为@)