首页 > 解决方案 > 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 的讨论,能够将任何源转换为通用可播放流的最佳线路是什么?

标签: ffmpegvideo-streaminghttp-live-streamingmpeg-dashmp4box

解决方案


嗨找到一个经过测试和工作的代码,它可以适应

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

笔记2 ; (未经测试)但似乎 FFMPEG 也可以收听 IP camffmpeg -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 内:因为在本地测试不工作

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

这个 .m3u8 是一个现场 akamai 播放列表...


推荐阅读