1

我有下一个 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 访问每个单独的片段来播放它?

4

1 回答 1

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);

通过这种方式,生成的 URL 将使用与浏览器相同的逻辑进行组装,正确处理相对 ( 32724/foo)、本地绝对 ( /32724/foo) 和完全限定 URL ( http://somehost/32724/foo)。

于 2018-11-06T09:47:30.830 回答