You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在解析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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:15:57