ffmpeg 或 MP4box 如何将视频转换为通用的可播放 Mpeg-DASH 或 HLS

问题描述

将(从 webm、rtmp 等任何格式)编码为普遍可播放的 hls 或破折号格式的“好”方法是什么???

我看到很多关于 HLS 和 MPEG-DASH 的讨论,视频标签看起来像这样

<video width="90%" height="669" controls > <source src="index.m3u8" type="application/x-mpegURL" > </video>

但是 FFMPEG 中的好命令是什么?

当我这样做

ffmpeg -i file.webm  -acodec aac -vcodec libx264 -movflags faststart -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8

它只能在 chrome 中播放 :(

但我需要它可以在 safari、firefox、opera 等中播放

我最近观看了有关 MP4Box 的讨论,能够将任何源转换为通用可播放流的最佳线路是什么?

解决方法

嗨,找到了一个经过测试且可以调整的工作代码

注意 1 ;输入可以是 https://www.....file.webm ;) webm 可以在 1 个服务器中生成,ffmpeg 可以在另一个服务器中 ;)

注意 2 ; (未经测试)但似乎 FFMPEG 也可以收听 IP cam ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp

FFMPEG:

ffmpeg -re -v verbose -i "file.webm" -c:v libx264 -c:a aac -ac 1 -strict -2 -crf 18 -profile:v baseline -maxrate 1000k -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 'index.m3u8'

HLS 普遍可播放的 HTML ;) 感谢 hls.js https://github.com/video-dev/hls.js/

<html>
<head></head>
<body>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<center><video width="90%" height="600" id="video" controls="" src="https://moctobpltc-i.akamaihd.net/hls/live/571329/eight/playlist.m3u" playsinline="true" ></video></center>
<script>
  var video = document.getElementById("video");
  var videoSrc = "https://moctobpltc-i.akamaihd.net/hls/live/571329/eight/playlist.m3u8";
  if (video.canPlayType("application/vnd.apple.mpegurl")) {
    video.src = videoSrc;
  } else if (Hls.isSupported()) {
    var hls = new Hls();
    hls.loadSource(videoSrc);
    hls.attachMedia(video);
  }
</script>
</body>
</html>

*********** 它必须在 http 或最好是 https 内:因为本地测试不起作用

**** 另一个注意事项:视频标签中的 playsinline="true" 用于 IOS 和 WKWebview 以避免被迫只能全屏观看

这个 .m3u8 是一个实时的 akamai 播放列表...