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

如何基于Cloudflare Stream生成统一的m3u8播放列表?

用Cloudflare Stream生成多视频统一M3U8播放列表

可以实现,Cloudflare Stream本身不直接提供多视频合并的M3U8,但你可以通过两种方式生成统一播放列表:

1. 手动/脚本生成静态合并M3U8

先收集每个上传视频的HLS播放列表URL(Cloudflare Stream返回的hls字段),然后按照HLS标准格式拼接成一个主M3U8文件,播放器会自动按顺序播放所有视频。

示例合并后的M3U8内容:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:10

# 第一个视频的HLS地址
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
https://customer-xxxxxxx.cloudflarestream.com/[视频ID1]/manifest/video.m3u8

# 第二个视频的HLS地址
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
https://customer-xxxxxxx.cloudflarestream.com/[视频ID2]/manifest/video.m3u8

如果需要循环播放,可以在播放器端设置循环逻辑,或者在M3U8中重复添加视频条目。

2. 用Cloudflare Worker动态生成播放列表

如果你的视频列表需要动态更新,推荐用Cloudflare Worker编写一个服务,动态拉取视频列表并生成合并后的M3U8返回给播放器。

示例Worker代码:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  // 可从Cloudflare KV/数据库获取动态视频ID列表
  const videoIds = ['video-id-1', 'video-id-2', 'video-id-3']
  const accountId = '你的Cloudflare账号ID'
  
  let m3u8 = '#EXTM3U\n#EXT-X-VERSION:3\n#EXT-X-PLAYLIST-TYPE:VOD\n'
  
  for (const id of videoIds) {
    const hlsUrl = `https://customer-${accountId}.cloudflarestream.com/${id}/manifest/video.m3u8`
    m3u8 += `#EXT-X-STREAM-INF:BANDWIDTH=1000000\n${hlsUrl}\n`
  }
  
  return new Response(m3u8, {
    headers: {
      'Content-Type': 'application/vnd.apple.mpegurl',
      'Cache-Control': 'no-cache'
    }
  })
}

注意事项

  • 尽量保证所有视频的编码参数(分辨率、码率、帧率)一致,避免播放器切换时出现卡顿或加载延迟
  • 若要实现24/7不间断循环,可以在Worker生成M3U8时重复添加视频条目,或者在播放器端设置循环播放逻辑
  • 这种方式替代前端JS切换逻辑,播放器会自动按顺序播放所有视频,稳定性更高

内容的提问来源于stack exchange,提问作者OcB974

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:32:08