如何使用loadSource()与字符串而不是m3u8播放列表?

时间:2017-12-13 10:57:39

标签: hls.js

在galeksandrp的演示中: https://github.com/galeksandrp/hls.js/tree/hlstorrent他使用webtorrent和hls.js来创建P2P流。 该演示对我来说非常合适,但我需要使用字符串变量而不是使用hls.loadSource加载外部播放列表(' 193039199_mp4_h264_aac_ld_7.m3u8')。

有没有人做过类似的事情?只需尝试加载字符串即可: "尝试解析基本网址时出错#34;这是可以理解的,因为URLToolkit试图从loadSource括号内的任何东西构建一个绝对URL,因此它不会有一个它可以解析的URL。

strings变量与' 193039199_mp4_h264_aac_ld_7.m3u8'

具有相同的内容
strings = ['#EXTM3U',
         '#EXT-X-VERSION:3',
         '#EXT-X-PLAYLIST-TYPE:VOD',
         '#EXT-X-TARGETDURATION:10',
         '#EXTINF:10.000,',
         'magnet:?xt=urn:btih:5493683624141c381fa19c9ed3bf00be2e0d96af',
         '#EXTINF:10.000,',
         'magnet:?xt=urn:btih:1ec3227aabe562cf2b244a41b93fa0a1aa423f4d',
         '#EXTINF:10.000,',
         'magnet:?xt=urn:btih:3cbd1622487f202f11aea838b0984a1478054456',
         '#EXTINF:10.000,',
         'magnet:?xt=urn:btih:9cf20cfe4fd1745ea4f72067192681b30b52a8c5',
         '#EXTINF:10.000,',
         'magnet:?xt=urn:btih:0c96911da7c860a9ae2a26ed8a96c10590508407',
         '#EXT-X-ENDLIST'];

1 个答案:

答案 0 :(得分:4)

var enc = new TextEncoder("utf-8");
hls.loadSource(URL.createObjectURL(new Blob([enc.encode(strings.join('\n'))])));

说明:您只需将播放列表文字转换为网址,无需编写custom playlist loader

示例:

var hls = new Hls({fLoader: customLoader, pLoader: customLoaderP});

解释:你也可以写custom playlist loader因为默认是硬编码使用XHR,因此:

  • 不支持播放列表作为文字
  • 不支持播放列表作为ArrayBuffer和衍生物(Blob,FileReader)。
  • 仅支持常用和blob:网址

该自定义播放列表加载器的示例是customLoaderP函数,您在其中以字符串数组的形式发现了播放列表。

请注意,我的示例针对Live P2P进行了优化,因此为每个 10秒块创建了新的torrent,如果您分发VOD / DVR,则可能不需要。通过常规视频,您可以通过单个种子传递所有块。