MP4文件可以转换为流媒体格式进行播放。一种常见的方法是将MP4文件转换为HLS(HTTP Live Streaming)格式
分为以下几个步骤:
- 使用工具(如FFmpeg)将MP4文件拆分为多个小的、持续时间较短的视频片段
- 创建一个M3U8播放列表文件
- 将视频片段和M3U8文件一起上传到支持HLS协议的服务器上
其实还有其他在线分割视频的网站 split-video.com/zh/
将视频每10s分割, 生成的文件名以%03d
自动递增
ffmpeg -i origin.mp4 -c:v copy -c:a copy -segment_time 10 -f segment split%03d.mp4
将分割好的文件split001.mp4
转换为中间的MPEG-TS
格式文件split001.ts
ffmpeg -i split001.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts split001.ts
( 如果报错提示
Codec 'mp3' (86017) is not supported by the bitstream filter 'aac_adtstoasc'. Supported codecs are: aac (86018)
, 那是因为mp3音频转换成aac格式音频,格式不支持. 所以不管原来视频中音频是什么编码,视频不动,音频转aac格式,将转好的文件再次转一次呗 )
ffmpeg -i split001.ts -vcodec copy -acodec aac split_001.ts
然后使用concat协议
将这些中间文件串联起来生成splitAll.mp4
ffmpeg -i "concat:split_001.ts|split_002.ts" -c copy -bsf:a aac_adtstoasc splitAll.mp4
最后使用segment选项将splitAll.mp4
分割成10秒一段的小段TS文件,并生成对应的M3U8播放列表文件playlist.m3u8
ffmpeg -i splitAll.mp4 -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts
上传生成的TS(Transport Stream)例如:output001.ts
, 和playlist.m3u8
的播放列表文件上传到服务就可以了
如果本地要测试流媒体可以html中引入HLS.js
库
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<video id="video" controls></video>
javascript
document.addEventListener('DOMContentLoaded', function() {
var video = document.getElementById('video');
var hls = new Hls();
if (Hls.isSupported()) {
//加载播放列表文件
hls.loadSource('path/to/your/playlist.m3u8');
//将 `video` 元素与Hls实例关联起来
hls.attachMedia(video);
//当播放列表解析完毕后执行回调函数
hls.on(Hls.Events.MANIFEST_PARSED, function() {
video.play();
});
}
});