我有下一个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来播放每个单独的片段?
答案 0 :(得分:2)
由于缺少前导/
,因此资源与源文档的位置相对存在,其方式与HTML页面中的链接完全相同。因此:例如在01593/seg128000-03184874.aac
的文档中找到的https://digitacdn.akamaized.net/hls/live/629243/radiosuomipop/master-128000.m3u8
在https://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}})。