如何通过FFmpeg判断M3U8链接为直播流还是完整文件?
判断M3U8链接是完整文件还是直播流的FFmpeg实用方法
1. 依托M3U8规范标签判断
M3U8的原生标签是最直接的判断依据:
- 完整点播文件:通常包含
#EXT-X-PLAYLIST-TYPE:VOD标签,明确标识为固定内容的视频点播;同时播放列表结尾一般带有#EXT-X-ENDLIST,表示没有更多分片会被添加。 - 直播流:不会出现
#EXT-X-PLAYLIST-TYPE:VOD标签,若为事件型直播(直播结束后保留内容)可能带有#EXT-X-PLAYLIST-TYPE:EVENT,但直播过程中不会有#EXT-X-ENDLIST,且分片会持续新增。
2. 用FFmpeg/ffprobe命令直接探测
提取播放列表类型
执行命令直接获取M3U8的播放属性:
ffmpeg -i <你的M3U8链接> -v trace 2>&1 | grep "playlist_type"
- 返回
playlist_type=vod:确定是完整点播文件 - 返回
playlist_type=event或无匹配结果:大概率是直播流(EVENT流在直播过程中仍会新增分片)
检测媒体时长
用ffprobe获取媒体时长,直播流通常无法返回固定时长:
ffprobe -v error -show_entries format=duration <你的M3U8链接>
- 返回具体数值(如
duration=3600.000000):是完整点播文件 - 返回
duration=N/A或数值持续增长:为直播流
对比分片列表变化
间隔一段时间两次执行以下命令,统计分片数量:
ffmpeg -i <你的M3U8链接> -f dump 2>&1 | grep "#EXTINF" | wc -l
- 两次结果一致:是固定分片的点播文件
- 第二次结果大于第一次:说明分片在持续新增,是直播流
3. 特殊情况处理
部分站点的M3U8可能未严格遵循规范,比如点播内容未添加EXT-X-PLAYLIST-TYPE标签,此时可以结合固定时长+EXT-X-ENDLIST标签共同判断,提升准确率。
内容的提问来源于stack exchange,提问作者karurosagu
相关产品推荐
相关产品推荐

