Deliver reliable streams with HLS Content Steering

RSS for tag

Discuss the WWDC22 Session Deliver reliable streams with HLS Content Steering

Posts under wwdc2022-10144 tag

5 Posts

Post

Replies

Boosts

Views

Activity

AVFoundation to persist playlist , downloads two different video tracks.
Hi, I'm trying to download hls playlist video track by parsing specific bitrate / resolution. Downloads work perfectly fine. But we need to download specific video track variant from the manifest. So I parse bitrate & resolution via AVAssetDownloadTaskMinimumRequiredMediaBitrateKey & AVAssetDownloadTaskMinimumRequiredPresentationSizeKey. But AVAggregateAssetDownloadTask always downloads the specific ( parsed ) bitrate variant of the video track segments along with the lower resolution video track segments. This makes the download size to go higher than expected. Is this the expected behaviour or am I doing something wrong ? I tried the sample source from https://developer.apple.com/documentation/avfoundation/offline_playback_and_storage/using_avfoundation_to_play_and_persist_http_live_streams & it has the same behaviour. This is how my manifest file looks like. #EXT-X-VERSION:7 ## Created with Unified Streaming Platform (version=1.11.3-24483) #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,URI="skd://xxxxxxx",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1" # AUDIO groups #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-aacl-96",LANGUAGE="en",NAME="eng",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2",URI="vod-idx-audio_eng=96000.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-aacl-160",LANGUAGE="en",NAME="eng",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2",URI="vod-idx-audio_eng=160000.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-ec-3-192",LANGUAGE="en",NAME="eng",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="6",URI="vod-idx-audio_eng_1=192000.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-aacl-320",LANGUAGE="en",NAME="eng",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="6",URI="vod-idx-audio_eng_2=320000.m3u8" # SUBTITLES groups #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="textstream",LANGUAGE="da",NAME="Dansk",DEFAULT=YES,AUTOSELECT=YES,URI="vod-idx-textstream_dan=1000.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="textstream",LANGUAGE="fi",NAME="Suomi",AUTOSELECT=YES,URI="vod-idx-textstream_fin=1000.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="textstream",LANGUAGE="no",NAME="Norsk",AUTOSELECT=YES,URI="vod-idx-textstream_nor=1000.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="textstream",LANGUAGE="sv",NAME="Svenska",AUTOSELECT=YES,URI="vod-idx-textstream_swe=1000.m3u8" # variants #EXT-X-STREAM-INF:BANDWIDTH=416000,CODECS="mp4a.40.2,avc1.4D4015",RESOLUTION=480x270,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-96",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=300000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=799000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=640x360,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-160",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=600000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1385000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=768x432,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-320",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=1000000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2021000,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=960x540,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-320",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=1600000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=3505000,CODECS="mp4a.40.2,avc1.64001F",RESOLUTION=1280x720,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-320",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=3000000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=5837000,CODECS="mp4a.40.2,avc1.640032",RESOLUTION=1920x1080,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-320",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=5200000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=513000,CODECS="ec-3,avc1.4D4015",RESOLUTION=480x270,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=300000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=831000,CODECS="ec-3,avc1.4D401E",RESOLUTION=640x360,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=600000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1255000,CODECS="ec-3,avc1.4D401E",RESOLUTION=768x432,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=1000000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1891000,CODECS="ec-3,avc1.4D401F",RESOLUTION=960x540,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=1600000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=3375000,CODECS="ec-3,avc1.64001F",RESOLUTION=1280x720,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=3000000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=5707000,CODECS="ec-3,avc1.640032",RESOLUTION=1920x1080,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=5200000.m3u8 # variants #EXT-X-STREAM-INF:BANDWIDTH=98000,CODECS="mp4a.40.2",AUDIO="audio-aacl-96",SUBTITLES="textstream" vod-idx-audio_eng=96000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=163000,CODECS="mp4a.40.2",AUDIO="audio-aacl-160",SUBTITLES="textstream" vod-idx-audio_eng=160000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=325000,CODECS="mp4a.40.2",AUDIO="audio-aacl-320",SUBTITLES="textstream" vod-idx-audio_eng_2=320000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=195000,CODECS="ec-3",AUDIO="audio-ec-3-192",SUBTITLES="textstream" vod-idx-audio_eng_1=192000.m3u8 # keyframes #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=40000,CODECS="avc1.4D4015",RESOLUTION=480x270,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=300000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=80000,CODECS="avc1.4D401E",RESOLUTION=640x360,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=600000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=133000,CODECS="avc1.4D401E",RESOLUTION=768x432,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=1000000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=212000,CODECS="avc1.4D401F",RESOLUTION=960x540,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=1600000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=398000,CODECS="avc1.64001F",RESOLUTION=1280x720,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=3000000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=689000,CODECS="avc1.640032",RESOLUTION=1920x1080,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=5200000.m3u8" And this is how I create the download task let preferredMediaSelection = asset.urlAsset.preferredMediaSelection if #available(iOS 14.0, *) {       guard let task =           assetDownloadURLSession.aggregateAssetDownloadTask(with: asset.urlAsset,                                     mediaSelections: [preferredMediaSelection],                                     assetTitle: asset.stream.name,                                     assetArtworkData: nil,                                     options:                                     [AVAssetDownloadTaskMinimumRequiredMediaBitrateKey:5200000, AVAssetDownloadTaskMinimumRequiredPresentationSizeKey: CGSize(width: 1920, height: 1080)])       else { return }       task.taskDescription = asset.stream.name       task.resume()     } Any help will be appreciated. thanks
1
0
1.4k
Feb ’23
Content Steering Error in Handling Steering Manifest
I would like to perform pathway cloning as described in the video Deliver reliable streams with HLS Content Steering and the document draft-pantos-hls-rfc8216bis-12. Unfortunately, I keep getting an error: CoreMediaErrorDomain (Code: -15881): Content Steering: error in handling Steering Manifest, ignoring and continue playback. The client device is an iPhone (iOS 16.2). There is a video accessible from an "azure" CDN and a video accessible from an "edge" CDN. I want the player, which is playing the video from the azure CDN, to switch to the edge CDN. This is the manifest received by the player: #EXTM3U #EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/content-steering?pathwaycloning=true",PATHWAY-ID="azure" #EXT-X-STREAM-INF:BANDWIDTH=5605600,RESOLUTION=416x240,CODECS="avc1.64001e,mp4a.40.2",PATHWAY-ID="azure" https://azure.com/contentsteering/stream_0/stream.m3u8 This is the steering manifest received by the player (every 10s, as specified by TTL): {     "VERSION": 1,     "TTL": 10,     "RELOAD-URI": "https://example.com/content-steering?pathwaycloning=true",     "PATHWAY-PRIORITY": [         "edge",         "azure",         "aws"     ],     "PATHWAY-CLONES": [         {             "BASE-ID": "azure",             "ID": "edge",             "URI-REPLACEMENT": {                 "HOST": "edge.com"             }         }     ] } I would expect the player to request the media files (stream.m3u8, data00.ts, data01.ts...) at https://edge.com/contentsteering/stream_0/. It doesn't, however, and instead I get the error specified in bold above. Any idea what is wrong with my steering manifest?
2
0
1k
Dec ’22
How to pause HLS live using AV-Player
Used the PreferredForwardBufferDuration, this also after 2 - 3 minutes unable to pause the video, its catching live if pause duration more than 2 -3 minutes. Example:  [self.player.currentItem setPreferredForwardBufferDuration:60];   self.player.automaticallyWaitsToMinimizeStalling = YES;  self.player.currentItem.canUseNetworkResourcesForLiveStreamingWhilePaused = NO; How to stop buffering the AV-Player during pause state How to clear the AV-Player buffer during pause. SeekToTime is not working properly for live channel, I want to seek just one/two sec back. With SeekToTime if av-player unable to seek to previous time line its catching the future position. Manifest providing to av-player, #EXT-X-VERSION:4 #EXT-X-TARGETDURATION:1 #EXT-X-MEDIA-SEQUENCE:1 #EXT-X-KEY:METHOD=AES- http://ServerAddress/f1655359642.ts #EXT-X-KEY:METHOD=AES- http://ServerAddress/f1655359643.ts #EXT-X-KEY:METHOD=AES- #EXTINF:0.984, http://ServerAddress/f1655359644.ts
0
0
1.2k
Jun ’22
AVFoundation to persist playlist , downloads two different video tracks.
Hi, I'm trying to download hls playlist video track by parsing specific bitrate / resolution. Downloads work perfectly fine. But we need to download specific video track variant from the manifest. So I parse bitrate & resolution via AVAssetDownloadTaskMinimumRequiredMediaBitrateKey & AVAssetDownloadTaskMinimumRequiredPresentationSizeKey. But AVAggregateAssetDownloadTask always downloads the specific ( parsed ) bitrate variant of the video track segments along with the lower resolution video track segments. This makes the download size to go higher than expected. Is this the expected behaviour or am I doing something wrong ? I tried the sample source from https://developer.apple.com/documentation/avfoundation/offline_playback_and_storage/using_avfoundation_to_play_and_persist_http_live_streams & it has the same behaviour. This is how my manifest file looks like. #EXT-X-VERSION:7 ## Created with Unified Streaming Platform (version=1.11.3-24483) #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,URI="skd://xxxxxxx",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1" # AUDIO groups #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-aacl-96",LANGUAGE="en",NAME="eng",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2",URI="vod-idx-audio_eng=96000.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-aacl-160",LANGUAGE="en",NAME="eng",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2",URI="vod-idx-audio_eng=160000.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-ec-3-192",LANGUAGE="en",NAME="eng",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="6",URI="vod-idx-audio_eng_1=192000.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-aacl-320",LANGUAGE="en",NAME="eng",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="6",URI="vod-idx-audio_eng_2=320000.m3u8" # SUBTITLES groups #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="textstream",LANGUAGE="da",NAME="Dansk",DEFAULT=YES,AUTOSELECT=YES,URI="vod-idx-textstream_dan=1000.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="textstream",LANGUAGE="fi",NAME="Suomi",AUTOSELECT=YES,URI="vod-idx-textstream_fin=1000.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="textstream",LANGUAGE="no",NAME="Norsk",AUTOSELECT=YES,URI="vod-idx-textstream_nor=1000.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="textstream",LANGUAGE="sv",NAME="Svenska",AUTOSELECT=YES,URI="vod-idx-textstream_swe=1000.m3u8" # variants #EXT-X-STREAM-INF:BANDWIDTH=416000,CODECS="mp4a.40.2,avc1.4D4015",RESOLUTION=480x270,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-96",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=300000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=799000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=640x360,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-160",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=600000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1385000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=768x432,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-320",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=1000000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2021000,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=960x540,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-320",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=1600000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=3505000,CODECS="mp4a.40.2,avc1.64001F",RESOLUTION=1280x720,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-320",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=3000000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=5837000,CODECS="mp4a.40.2,avc1.640032",RESOLUTION=1920x1080,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-aacl-320",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=5200000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=513000,CODECS="ec-3,avc1.4D4015",RESOLUTION=480x270,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=300000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=831000,CODECS="ec-3,avc1.4D401E",RESOLUTION=640x360,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=600000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1255000,CODECS="ec-3,avc1.4D401E",RESOLUTION=768x432,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=1000000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1891000,CODECS="ec-3,avc1.4D401F",RESOLUTION=960x540,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=1600000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=3375000,CODECS="ec-3,avc1.64001F",RESOLUTION=1280x720,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=3000000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=5707000,CODECS="ec-3,avc1.640032",RESOLUTION=1920x1080,FRAME-RATE=25,VIDEO-RANGE=SDR,AUDIO="audio-ec-3-192",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE vod-idx-video=5200000.m3u8 # variants #EXT-X-STREAM-INF:BANDWIDTH=98000,CODECS="mp4a.40.2",AUDIO="audio-aacl-96",SUBTITLES="textstream" vod-idx-audio_eng=96000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=163000,CODECS="mp4a.40.2",AUDIO="audio-aacl-160",SUBTITLES="textstream" vod-idx-audio_eng=160000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=325000,CODECS="mp4a.40.2",AUDIO="audio-aacl-320",SUBTITLES="textstream" vod-idx-audio_eng_2=320000.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=195000,CODECS="ec-3",AUDIO="audio-ec-3-192",SUBTITLES="textstream" vod-idx-audio_eng_1=192000.m3u8 # keyframes #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=40000,CODECS="avc1.4D4015",RESOLUTION=480x270,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=300000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=80000,CODECS="avc1.4D401E",RESOLUTION=640x360,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=600000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=133000,CODECS="avc1.4D401E",RESOLUTION=768x432,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=1000000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=212000,CODECS="avc1.4D401F",RESOLUTION=960x540,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=1600000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=398000,CODECS="avc1.64001F",RESOLUTION=1280x720,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=3000000.m3u8" #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=689000,CODECS="avc1.640032",RESOLUTION=1920x1080,VIDEO-RANGE=SDR,URI="keyframes/vod-idx-video=5200000.m3u8" And this is how I create the download task let preferredMediaSelection = asset.urlAsset.preferredMediaSelection if #available(iOS 14.0, *) {       guard let task =           assetDownloadURLSession.aggregateAssetDownloadTask(with: asset.urlAsset,                                     mediaSelections: [preferredMediaSelection],                                     assetTitle: asset.stream.name,                                     assetArtworkData: nil,                                     options:                                     [AVAssetDownloadTaskMinimumRequiredMediaBitrateKey:5200000, AVAssetDownloadTaskMinimumRequiredPresentationSizeKey: CGSize(width: 1920, height: 1080)])       else { return }       task.taskDescription = asset.stream.name       task.resume()     } Any help will be appreciated. thanks
Replies
1
Boosts
0
Views
1.4k
Activity
Feb ’23
Content Steering Error in Handling Steering Manifest
I would like to perform pathway cloning as described in the video Deliver reliable streams with HLS Content Steering and the document draft-pantos-hls-rfc8216bis-12. Unfortunately, I keep getting an error: CoreMediaErrorDomain (Code: -15881): Content Steering: error in handling Steering Manifest, ignoring and continue playback. The client device is an iPhone (iOS 16.2). There is a video accessible from an "azure" CDN and a video accessible from an "edge" CDN. I want the player, which is playing the video from the azure CDN, to switch to the edge CDN. This is the manifest received by the player: #EXTM3U #EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/content-steering?pathwaycloning=true",PATHWAY-ID="azure" #EXT-X-STREAM-INF:BANDWIDTH=5605600,RESOLUTION=416x240,CODECS="avc1.64001e,mp4a.40.2",PATHWAY-ID="azure" https://azure.com/contentsteering/stream_0/stream.m3u8 This is the steering manifest received by the player (every 10s, as specified by TTL): {     "VERSION": 1,     "TTL": 10,     "RELOAD-URI": "https://example.com/content-steering?pathwaycloning=true",     "PATHWAY-PRIORITY": [         "edge",         "azure",         "aws"     ],     "PATHWAY-CLONES": [         {             "BASE-ID": "azure",             "ID": "edge",             "URI-REPLACEMENT": {                 "HOST": "edge.com"             }         }     ] } I would expect the player to request the media files (stream.m3u8, data00.ts, data01.ts...) at https://edge.com/contentsteering/stream_0/. It doesn't, however, and instead I get the error specified in bold above. Any idea what is wrong with my steering manifest?
Replies
2
Boosts
0
Views
1k
Activity
Dec ’22
HLS Pathway Cloning Support
What is the first version of iOS to support pathway cloning as part of content steering? Is it supported in safari browsers via the html video tag? I can switch between pathways defined in the manifest file, but when I try to clone a pathway and introduce a new pathway id my stream stops.
Replies
2
Boosts
0
Views
915
Activity
Dec ’22
BipBop Source
Hello Apple Streaming engineers, Would it be possible to share the BipBop Source (with audio tracks and subtitles tracks) as it is some nice material for debugging Thanks Sylvain
Replies
0
Boosts
0
Views
821
Activity
Jun ’22
How to pause HLS live using AV-Player
Used the PreferredForwardBufferDuration, this also after 2 - 3 minutes unable to pause the video, its catching live if pause duration more than 2 -3 minutes. Example:  [self.player.currentItem setPreferredForwardBufferDuration:60];   self.player.automaticallyWaitsToMinimizeStalling = YES;  self.player.currentItem.canUseNetworkResourcesForLiveStreamingWhilePaused = NO; How to stop buffering the AV-Player during pause state How to clear the AV-Player buffer during pause. SeekToTime is not working properly for live channel, I want to seek just one/two sec back. With SeekToTime if av-player unable to seek to previous time line its catching the future position. Manifest providing to av-player, #EXT-X-VERSION:4 #EXT-X-TARGETDURATION:1 #EXT-X-MEDIA-SEQUENCE:1 #EXT-X-KEY:METHOD=AES- http://ServerAddress/f1655359642.ts #EXT-X-KEY:METHOD=AES- http://ServerAddress/f1655359643.ts #EXT-X-KEY:METHOD=AES- #EXTINF:0.984, http://ServerAddress/f1655359644.ts
Replies
0
Boosts
0
Views
1.2k
Activity
Jun ’22