Где находятся сегменты, перечисленные в списке воспроизведения HLS? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть следующий список воспроизведения 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 голосов
/ 06 ноября 2018

Из-за отсутствия ведущего / ресурсы находятся в местоположении относительно исходного документа точно так же, как ссылки на страницах 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);

Сделано таким образом, полученные URL будут собраны с использованием той же логики, что и браузеры, правильно обрабатывая относительные (32724/foo), локальные абсолютные (/32724/foo) и полностью определенные URL (http://somehost/32724/foo).

...