HLS播放列表中列出的细分位于何处?

时间:2018-11-06 08:33:07

标签: c# naudio hls internet-radio naudio-framework

我有下一个HLS播放列表:https://digitacdn.akamaized.net/hls/live/629243/radiosuomipop/master-128000.m3u8。 它包含AAC音频文件段链接。 文件内容为:

#EXTM3U
#EXT-X-VERSION:3
## Created with Z/IPStream R/2 v1.03.23
#EXT-X-MEDIA-SEQUENCE:2984548
#EXT-X-TARGETDURATION:6
#EXT-X-PROGRAM-DATE-TIME:2018-10-23T11:44:44Z
#EXTINF:5.99, no desc
01493/seg128000-02984548.aac
#EXTINF:5.99, no desc
01493/seg128000-02984549.aac
#EXTINF:5.99, no desc
01493/seg128000-02984550.aac
#EXTINF:5.99, no desc
01493/seg128000-02984551.aac
#EXTINF:5.99, no desc
01493/seg128000-02984552.aac
#EXTINF:5.99, no desc
01493/seg128000-02984553.aac

我无法理解这些细分的位置。有人可以向我解释吗?如何使用NAudio MediaFoundationReader来播放每个单独的片段?

1 个答案:

答案 0 :(得分:2)

由于缺少前导/,因此资源与源文档的位置相对存在,其方式与HTML页面中的链接完全相同。因此:例如在01593/seg128000-03184874.aac的文档中找到的https://digitacdn.akamaized.net/hls/live/629243/radiosuomipop/master-128000.m3u8https://digitacdn.akamaized.net/hls/live/629243/radiosuomipop/01593/seg128000-03184874.aac处。

一种安全的解决方法是在Uri类上使用现有的重载:

var m3u8Url = 
  "https://digitacdn.akamaized.net/hls/live/629243/radiosuomipop/master-128000.m3u8"
var baseUri = new Uri(m3u8Url);
var resourceUri = new Uri(baseUri, "01493/seg128000-02984548.aac");
Console.WriteLine(resourceUri.AbsoluteUri);

通过这种方式,将使用与浏览器相同的逻辑来组装生成的Urls,正确处理相对(32724/foo),本地绝对(/32724/foo)和完全限定的URL({{ 1}})。