如何在解析M3U文件时区分IPTV直播频道与VOD内容?
区分M3U播放列表中的直播频道与VOD内容
核心判断规则
M3U协议里,直播和VOD的核心区分点是duration字段:
- 直播频道的
duration值固定为-1(部分非标准列表可能用0),因为直播是无固定时长的持续流 - VOD(视频点播)内容的
duration是正数,代表视频的实际时长(单位:秒)
辅助验证维度
如果遇到非标准列表,可以结合其他字段交叉验证:
- groupTitle:多数IPTV列表会把直播频道归到
"Live TV"、"直播频道"这类分组,VOD则会在"Movies"、"电视剧"、"综艺"等分组下 - title/tvgName:直播标题多是电视台名称(如
"CCTV-5 体育"),VOD标题是具体影视内容名(如"狂飙 第10集") - tvgId:直播频道的
tvgId通常对应EPG的官方频道ID,VOD一般无有效tvgId值
NestJS中代码实现示例
假设你已通过m3u8-file-parser得到解析后的播放列表数组playlistItems,可以直接过滤分类:
// 分类处理函数 const splitLiveAndVod = (playlistItems: any[]) => { const liveChannels = playlistItems.filter(item => item.duration === -1 || item.duration === 0 ); const vodContents = playlistItems.filter(item => item.duration > 0 ); return { liveChannels, vodContents }; }; // 调用示例 const parsedPlaylist = await yourM3uParser.parse(/* 你的M3U文件内容 */); const { liveChannels, vodContents } = splitLiveAndVod(parsedPlaylist);
极端场景处理
如果遇到完全不遵循规范的M3U列表,还可以尝试解析播放地址(若能获取到):
- 直播流地址通常包含
live、stream、rtmp://、hls://live等关键词 - VOD地址多带有
.mp4、.mkv、.ts等视频文件后缀
内容的提问来源于stack exchange,提问作者Fares Tayari
相关产品推荐
相关产品推荐

