Streaming

RSS for tag

Deep dive into the technical specifications that influence seamless playback for streaming services, including bitrates, codecs, and caching mechanisms.

Streaming Documentation

Posts under Streaming subtopic

Post

Replies

Boosts

Views

Activity

What affect is 'Low Latency HLS' Capabilities in App ID Configuration Page?
Hi, I wanna test playing ll-hls in simulator, my devices and other tester's devices. the key 'com.apple.developer.coremedia.hls.low-latency', introduced at https://developer.apple.com/videos/play/wwdc2019/502, was disabled in XCode. Thus I can't add this key to my entitlement. But This capabilities table, (https://developer.apple.com/help/account/reference/supported-capabilities-ios/), said ADP only can add 'Low Latency HLS' to App ID Configuration. I've also checked I can add this capability in my ADP memberships and my App page. Is it possible to play ll-hls only for apps that have been checked 'Low Latency HLS' Capability and distributed to AppStore or TestFlights? If I run directly by xcode to my device, I can't play ll-hls? I couldn't find any documentations about 'Low Latency HLS' Capability and its affect.
0
0
1.2k
Jan ’23
How do I fix these issues for my segmented video files?
I'm using an .m3u8 file uploaded to Amazon Web Services for HLS streaming. When I create an HLS report for it, it shows that there are several must fix issues present. I'm fairly new to validating and segmenting videos and such so I need to go by what's available in terms of documentation online but there's very little help or resources online that explain how to resolve these issues. My current approach is using FFMpeg in order to encode videos and use mediafilesegmenter to divide them into .ts files and then use variantplaylistcreator to make a master playlist .m3u8 file. If someone could look at the attached image and tell me how I could possibly fix these problems with the tools I have then that would be very helpful.
2
0
1.1k
Jan ’23
AVURLAsset with custom request header
Hi, Can we use AVURLAssetHTTPHeaderFieldsKey as options on AVURLAsset init? It is mentioned that since this is private key, app might get rejected. Is there any Apple official way to have custom header key for each m3u8 file while creating AVURLAsset for LIVE stream? Ref: https://stackoverflow.com/questions/60116789/is-it-possible-to-configure-custom-headers-for-avplayeritem-urlrequest Thank you in advance!
0
0
1.6k
Jan ’23
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
App for FILMS AND TV
I need help with these question from apple. Does your app offer any paid service? Who are the users that will use the paid services in the app? Where can users purchase the services that can be accessed in the app? What specific types of previously purchased services can a user access in the app? What paid content, subscriptions, or features are unlocked within your app that do not use in-app purchase?
0
0
568
Feb ’23
Playing clear-key DRM protected video with AVFoundation
I’m wondering if there is any way to play a clear-key DRM-protected video stream. I have {"clear-key-id": "clear-key"} pair, but I don’t know how to do it in code. It is not FairPlay Streaming nor Widevine. I override resourceLoader(_:shouldWaitForLoadingOfRequestedResource:) and done something similar to this: let key = "{\"key\": \"452948404d635166546a576e5a723475\",\"keyId\": \"2f423f4528482b4d6251655468576d5a\"}" let keyData = Data(key.utf8) loadingRequest.contentInformationRequest?.contentType = AVStreamingKeyDeliveryPersistentContentKeyType loadingRequest.contentInformationRequest?.isByteRangeAccessSupported = true loadingRequest.contentInformationRequest?.contentLength = Int64(keyData.count) loadingRequest.dataRequest?.respond(with: keyData) loadingRequest.finishLoading() I do not think this is the correct way to do it, as I arbitrarily loaded the key as a raw string and compressed it to Data type. I think there should be some API or func to call for that clear-key-based DRM.
0
0
1.5k
Feb ’23
[iOS 16] AVAggregateAssetDownloadTask reports CoreMediaErrorDomain Code=-12640
I'm trying to download HLS assets using AVAggregateAssetDownloadTask. It's pretty stable on iOS < 16.0. But after updating to iOS 16 I'm getting randomly following error: Task <DB57343C-5D3A-4500-A886-A30FD16AD2C3>.<3> finished with error [-12640] Error Domain=CoreMediaErrorDomain Code=-12640 "(null)" UserInfo={_NSURLErrorRelatedURLSessionTaskErrorKey=(     "BackgroundAVAssetDownloadTask <DB57343C-5D3A-4500-A886-A30FD16AD2C3>.<3>" ), _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundAVAssetDownloadTask <DB57343C-5D3A-4500-A886-A30FD16AD2C3>.<3>} Few retry attempts usually solve the issue. I have compared requests made by the app using proxy server and .m3u8 playlist does not differ between successful and failed download attempts. This is the network traffic when download fails. It stops on ...Audio_Selector.m3u8 playlist. And this is the network traffic when download successfully continues: Thanks!
4
3
2.8k
Feb ’23
Rendition report is not used when switching resolution on avplayer (safari 16.3)
I'm developing a LL-HLS feature. When playing the LL-HLS that I developed in Safari, the EXT-X-RENDITION-REPORT tag does not seem to work when the resoution is changed by ABR. When changing the resolution, the following request is made. Request without _HLS_msn and _HLS_part query strings when calling chunklist.m3u8 of different resolutions. Request including _HLS_msn and _HLS_part query strings after requesting chunklist.m3u8 of 1). In a hls.js, when changing to a different resolution, it was confiremed that _HLS_msn and _HLS_part query strings were included immediately. Environment OS: macOS (Ventura 13.2.1) Browser: Safari 16.3 Chunklist.m3u8 EXT-X-SKIP tag is not used URL: http://10.60.83.51/cvpr0502/onair_llhls_test0001/chunklist_vfrag2500.stream.m3u8 This URL does not play as s sample. #EXTM3U #EXT-X-VERSION:7 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=3.000000 #EXT-X-PART-INF:PART-TARGET=1.000000 #EXT-X-TARGETDURATION:3 #EXT-X-MEDIA-SEQUENCE:4 #EXT-X-DISCONTINUITY-SEQUENCE:0 #EXT-X-DATERANGE:ID="nmss-daterange",START-DATE="2023-02-20T08:20:00.474Z" #EXT-X-MAP:URI="vfrag2500.stream_0_0_0.m4s?type=hls&filetype=.m4s" #EXT-X-PROGRAM-DATE-TIME:2023-02-20T08:20:13.474Z #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_1994603194_1676881213474_13_0_4_0.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_1994603194_1676881213474_13_0_4_1.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_1994603194_1676881213474_13_0_4_2.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXTINF:3.000000, vfrag2500.stream_1994603194_1676881213474_13_0_4.m4v?type=hls&bitrate=287035&filetype=.m4v #EXT-X-PROGRAM-DATE-TIME:2023-02-20T08:20:16.474Z #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3207465476_1676881216474_16_0_5_0.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3207465476_1676881216474_16_0_5_1.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3207465476_1676881216474_16_0_5_2.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXTINF:3.000000, vfrag2500.stream_3207465476_1676881216474_16_0_5.m4v?type=hls&bitrate=345122&filetype=.m4v #EXT-X-PROGRAM-DATE-TIME:2023-02-20T08:20:19.474Z #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3408866808_1676881219474_19_0_6_0.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3408866808_1676881219474_19_0_6_1.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3408866808_1676881219474_19_0_6_2.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXTINF:3.000000, vfrag2500.stream_3408866808_1676881219474_19_0_6.m4v?type=hls&bitrate=277635&filetype=.m4v #EXT-X-PROGRAM-DATE-TIME:2023-02-20T08:20:22.474Z #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_562750089_1676881222474_22_0_7_0.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_562750089_1676881222474_22_0_7_1.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PRELOAD-HINT:TYPE=PART,URI="vfrag2500.stream_562750089_1676881222474_22_0_7_2.m4v?type=hls&mode=cmaf&filetype=.m4v" #EXT-X-RENDITION-REPORT:URI="chunklist_vfrag1500.stream.m3u8",LAST-MSN=7,LAST-PART=1 #EXT-X-RENDITION-REPORT:URI="chunklist_vfrag400.stream.m3u8",LAST-MSN=7,LAST-PART=1 #EXT-X-RENDITION-REPORT:URI="chunklist_vfrag100.stream.m3u8",LAST-MSN=7,LAST-PART=1 Network in safari First chunklist.m3u8 request with different resoltuion _HLS_msn and _HLS_part query strings not found in URL Second chunklist.m3u8 request _HLS_msn=7&_HLS_part=1 query strings included in URL I tried putting paths in various patterns such as absolute paths and relative paths in the URL property of the EXT-X-RENDITION-REPORT tag, but is didn't work. Is this the behavior of the EXT-X-RENDITION-REPORT tag? If not, I would be grateful if you could let me know what part needs to be corrected.
0
0
967
Feb ’23
Video with different audio and video durations for HLS playback
I am trying to generate ABR manifest for a video that has a slightly longer video stream than audio stream. Running mediastreamvalidator tool on the manifest I get an error "Different content duration detected between discontinuities". I assume it is caused by my generated manifest having video segments extent past the last audio segments in seconds. Should I shorten the video playback to be the shorter between the two? Should I pad out the video with empty segments so that both streams have the same duration?
4
0
1.5k
Mar ’23
FairPlay on iOS 16.1 and onward: AVAssetResourceLoaderDelegate not called with offline DRMs anymore
Hello, We are experiencing a new regression with iOS 16.1/16.2 beta when trying to play a video with offline FairPlay DRMs. Everything was working fine with 16.0.3 and below. The delegate public func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool is never called when you start playing an offline video. It prevents the player to get the DRM and we end up with a timeout CoreMediaError -19512. We tried to preload the existing keys asset.resourceLoader.preloadsEligibleContentKeys = true to no avail. We also looked at the solutions provided in this thread iOS 16 FairPlay Changes which was very similar to our issue but nothing worked for us (we are already using keyRequest.processContentKeyResponse(response)). The DRMs are valid and can be loaded if we move the key to an older iOS device (iOS 16 and below). However, we can see in the logs the following error happening before the CoreMediaError -19512. <<< FigPKDKeyManager >>>> PKDKeyManagerSetKeyRequestError: keyManager: 0x606ce 210 KeyID: F017D7B0-390-45ED-803-01A748DFB7A1 errOr: Error Domain-CoreMediaErrorDomain Code=-19160 " (null)" err: 0 The player just seem not to trigger any delegate starting 16.1+. Is anybody else experiencing the same issue? How can we find out why the delegate aren't triggered? Bests
2
1
2.4k
Mar ’23
[tvOS] AVPlayerViewController displays time period label for Live stream
During Live Stream playback on tvOS using AVPlayerViewController we noticed strange time period label: 12:30 PM - 1:00 PM next to the live indicator. It seems that during the start of the playback, the value is set to a 30-minute time period. Questions: What does 12:30 PM - 1:00 PM mean? Can we hide this label or manipulate it using tags in HLS playlist? We do not understand where this value (12:30 PM - 1:00 PM) comes from. Here is an example of our playlist: #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:3 #EXT-X-MEDIA-SEQUENCE:9091 #EXT-X-PROGRAM-DATE-TIME:2023-02-21T12:39:06.640Z As you can see it's not a EXT-X-PROGRAM-DATE-TIME Thanks!
0
0
777
Mar ’23
FairPlay Content Packaging Using mediafilesegmenter tool
New to FairPlay implementation. Following Apple's "FairPlay Streaming Programming Guide", to transcoded & encrypted a MP4 file using command - mediafilesegmenter --stream-encrypt --streaming-key-delivery --encrypt-key-file=./key_iv.bin --encrypt-key-url="skd://example/key" ./input-content.mp4 key_iv.bin is the file which contains Encryption Key and Initialisation Vector. It is generating HLS's playlist, index and segment files. To test the encryption and the decryption precess, I am taking one segment file(which is generated by mediafilesegmenter, say fileSequence125.ts) and trying to decrypt(algorithm is "AES/CBC/NOPADDING") it using the same Encryption Key and Initialisation Vector, then I am getting bellow errors - Input length not multiple of 16 bytes So, does it means the length/size of each segment(.ts) file, which is generated by the mediafilesegmenter, should be a multiple of 16 bytes?
0
0
821
Apr ’23
How to set color of WebVTT subtitle?
The WebVTT specification, https://w3c.github.io/webvtt/, mentions that color (and any other formatting) of cue text can be set using the "::cue" CSS extension.I tried the simple vtt file:WEBVTT::cue(#first_cue) { color: blue }X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:0first_cue00:00:00.000 --&gt; 00:00:10.000Allo world!without any success.What is the simplest implementation that would allow coloring/formatting of cue text?
2
0
4.5k
Apr ’23
AVAssetResourceLoaderDelegate and TS files error: Error Domain=CoreMediaErrorDomain Code=-12881 "custom url not redirect"
Hello,I've used AVAssetResourceLoaderDelegate and sucessfully implemented ways to store mp3 and mp4 files.The problem starts when I try to implement the same thing for HLS. The master playlists (m3u8) are working perfectly fine but when I try the same for .ts files (video segments) I get this error: Error Domain=CoreMediaErrorDomain Code=-12881 "custom url not redirect"I've tried everything and even using the redirect approach to a filepath URL fails.The only possible solution is to have an internal HTTP server but that doesn't make sense to me. If I'm implementing AVAssetResourceLoaderDelegate then I should be apple to feed AVFoundation the data needed to play a video, right?Thanks in advance.Help for this would be much appreciated.
21
0
11k
Apr ’23
What affect is 'Low Latency HLS' Capabilities in App ID Configuration Page?
Hi, I wanna test playing ll-hls in simulator, my devices and other tester's devices. the key 'com.apple.developer.coremedia.hls.low-latency', introduced at https://developer.apple.com/videos/play/wwdc2019/502, was disabled in XCode. Thus I can't add this key to my entitlement. But This capabilities table, (https://developer.apple.com/help/account/reference/supported-capabilities-ios/), said ADP only can add 'Low Latency HLS' to App ID Configuration. I've also checked I can add this capability in my ADP memberships and my App page. Is it possible to play ll-hls only for apps that have been checked 'Low Latency HLS' Capability and distributed to AppStore or TestFlights? If I run directly by xcode to my device, I can't play ll-hls? I couldn't find any documentations about 'Low Latency HLS' Capability and its affect.
Replies
0
Boosts
0
Views
1.2k
Activity
Jan ’23
How do I fix these issues for my segmented video files?
I'm using an .m3u8 file uploaded to Amazon Web Services for HLS streaming. When I create an HLS report for it, it shows that there are several must fix issues present. I'm fairly new to validating and segmenting videos and such so I need to go by what's available in terms of documentation online but there's very little help or resources online that explain how to resolve these issues. My current approach is using FFMpeg in order to encode videos and use mediafilesegmenter to divide them into .ts files and then use variantplaylistcreator to make a master playlist .m3u8 file. If someone could look at the attached image and tell me how I could possibly fix these problems with the tools I have then that would be very helpful.
Replies
2
Boosts
0
Views
1.1k
Activity
Jan ’23
AVURLAsset with custom request header
Hi, Can we use AVURLAssetHTTPHeaderFieldsKey as options on AVURLAsset init? It is mentioned that since this is private key, app might get rejected. Is there any Apple official way to have custom header key for each m3u8 file while creating AVURLAsset for LIVE stream? Ref: https://stackoverflow.com/questions/60116789/is-it-possible-to-configure-custom-headers-for-avplayeritem-urlrequest Thank you in advance!
Replies
0
Boosts
0
Views
1.6k
Activity
Jan ’23
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
App for FILMS AND TV
I need help with these question from apple. Does your app offer any paid service? Who are the users that will use the paid services in the app? Where can users purchase the services that can be accessed in the app? What specific types of previously purchased services can a user access in the app? What paid content, subscriptions, or features are unlocked within your app that do not use in-app purchase?
Replies
0
Boosts
0
Views
568
Activity
Feb ’23
Playing clear-key DRM protected video with AVFoundation
I’m wondering if there is any way to play a clear-key DRM-protected video stream. I have {"clear-key-id": "clear-key"} pair, but I don’t know how to do it in code. It is not FairPlay Streaming nor Widevine. I override resourceLoader(_:shouldWaitForLoadingOfRequestedResource:) and done something similar to this: let key = "{\"key\": \"452948404d635166546a576e5a723475\",\"keyId\": \"2f423f4528482b4d6251655468576d5a\"}" let keyData = Data(key.utf8) loadingRequest.contentInformationRequest?.contentType = AVStreamingKeyDeliveryPersistentContentKeyType loadingRequest.contentInformationRequest?.isByteRangeAccessSupported = true loadingRequest.contentInformationRequest?.contentLength = Int64(keyData.count) loadingRequest.dataRequest?.respond(with: keyData) loadingRequest.finishLoading() I do not think this is the correct way to do it, as I arbitrarily loaded the key as a raw string and compressed it to Data type. I think there should be some API or func to call for that clear-key-based DRM.
Replies
0
Boosts
0
Views
1.5k
Activity
Feb ’23
[iOS 16] AVAggregateAssetDownloadTask reports CoreMediaErrorDomain Code=-12640
I'm trying to download HLS assets using AVAggregateAssetDownloadTask. It's pretty stable on iOS < 16.0. But after updating to iOS 16 I'm getting randomly following error: Task <DB57343C-5D3A-4500-A886-A30FD16AD2C3>.<3> finished with error [-12640] Error Domain=CoreMediaErrorDomain Code=-12640 "(null)" UserInfo={_NSURLErrorRelatedURLSessionTaskErrorKey=(     "BackgroundAVAssetDownloadTask <DB57343C-5D3A-4500-A886-A30FD16AD2C3>.<3>" ), _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundAVAssetDownloadTask <DB57343C-5D3A-4500-A886-A30FD16AD2C3>.<3>} Few retry attempts usually solve the issue. I have compared requests made by the app using proxy server and .m3u8 playlist does not differ between successful and failed download attempts. This is the network traffic when download fails. It stops on ...Audio_Selector.m3u8 playlist. And this is the network traffic when download successfully continues: Thanks!
Replies
4
Boosts
3
Views
2.8k
Activity
Feb ’23
Rendition report is not used when switching resolution on avplayer (safari 16.3)
I'm developing a LL-HLS feature. When playing the LL-HLS that I developed in Safari, the EXT-X-RENDITION-REPORT tag does not seem to work when the resoution is changed by ABR. When changing the resolution, the following request is made. Request without _HLS_msn and _HLS_part query strings when calling chunklist.m3u8 of different resolutions. Request including _HLS_msn and _HLS_part query strings after requesting chunklist.m3u8 of 1). In a hls.js, when changing to a different resolution, it was confiremed that _HLS_msn and _HLS_part query strings were included immediately. Environment OS: macOS (Ventura 13.2.1) Browser: Safari 16.3 Chunklist.m3u8 EXT-X-SKIP tag is not used URL: http://10.60.83.51/cvpr0502/onair_llhls_test0001/chunklist_vfrag2500.stream.m3u8 This URL does not play as s sample. #EXTM3U #EXT-X-VERSION:7 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=3.000000 #EXT-X-PART-INF:PART-TARGET=1.000000 #EXT-X-TARGETDURATION:3 #EXT-X-MEDIA-SEQUENCE:4 #EXT-X-DISCONTINUITY-SEQUENCE:0 #EXT-X-DATERANGE:ID="nmss-daterange",START-DATE="2023-02-20T08:20:00.474Z" #EXT-X-MAP:URI="vfrag2500.stream_0_0_0.m4s?type=hls&filetype=.m4s" #EXT-X-PROGRAM-DATE-TIME:2023-02-20T08:20:13.474Z #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_1994603194_1676881213474_13_0_4_0.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_1994603194_1676881213474_13_0_4_1.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_1994603194_1676881213474_13_0_4_2.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXTINF:3.000000, vfrag2500.stream_1994603194_1676881213474_13_0_4.m4v?type=hls&bitrate=287035&filetype=.m4v #EXT-X-PROGRAM-DATE-TIME:2023-02-20T08:20:16.474Z #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3207465476_1676881216474_16_0_5_0.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3207465476_1676881216474_16_0_5_1.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3207465476_1676881216474_16_0_5_2.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXTINF:3.000000, vfrag2500.stream_3207465476_1676881216474_16_0_5.m4v?type=hls&bitrate=345122&filetype=.m4v #EXT-X-PROGRAM-DATE-TIME:2023-02-20T08:20:19.474Z #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3408866808_1676881219474_19_0_6_0.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3408866808_1676881219474_19_0_6_1.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_3408866808_1676881219474_19_0_6_2.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXTINF:3.000000, vfrag2500.stream_3408866808_1676881219474_19_0_6.m4v?type=hls&bitrate=277635&filetype=.m4v #EXT-X-PROGRAM-DATE-TIME:2023-02-20T08:20:22.474Z #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_562750089_1676881222474_22_0_7_0.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PART:DURATION=1.000000,URI="vfrag2500.stream_562750089_1676881222474_22_0_7_1.m4v?type=hls&mode=cmaf&filetype=.m4v",INDEPENDENT=YES #EXT-X-PRELOAD-HINT:TYPE=PART,URI="vfrag2500.stream_562750089_1676881222474_22_0_7_2.m4v?type=hls&mode=cmaf&filetype=.m4v" #EXT-X-RENDITION-REPORT:URI="chunklist_vfrag1500.stream.m3u8",LAST-MSN=7,LAST-PART=1 #EXT-X-RENDITION-REPORT:URI="chunklist_vfrag400.stream.m3u8",LAST-MSN=7,LAST-PART=1 #EXT-X-RENDITION-REPORT:URI="chunklist_vfrag100.stream.m3u8",LAST-MSN=7,LAST-PART=1 Network in safari First chunklist.m3u8 request with different resoltuion _HLS_msn and _HLS_part query strings not found in URL Second chunklist.m3u8 request _HLS_msn=7&_HLS_part=1 query strings included in URL I tried putting paths in various patterns such as absolute paths and relative paths in the URL property of the EXT-X-RENDITION-REPORT tag, but is didn't work. Is this the behavior of the EXT-X-RENDITION-REPORT tag? If not, I would be grateful if you could let me know what part needs to be corrected.
Replies
0
Boosts
0
Views
967
Activity
Feb ’23
When is contentKeySession(_:shouldRetry:reason:) called?
This is a question about AVContentKeySessionDelegate. I want contentKeySession(_:didProvide:) to be called only once. I thought I could control this with contentKeySession(_:shouldRetry:reason:), but this method is not called. How can contentKeySession(_:shouldRetry:reason:) be called? I would be happy to share your knowledge with you.
Replies
0
Boosts
0
Views
632
Activity
Mar ’23
New FairPlay Streaming (FPS) credentials
Hi, I have a question about FairPlay Streaming (FPS) credentials. When a new set of FPS credentials is requested, will existing FPS Credentials on a live app continue to function until it is swapped for the new ones?  Or will the existing FPS credentials immediately cease to function upon issuing new FPS credentials?
Replies
0
Boosts
0
Views
720
Activity
Mar ’23
Video with different audio and video durations for HLS playback
I am trying to generate ABR manifest for a video that has a slightly longer video stream than audio stream. Running mediastreamvalidator tool on the manifest I get an error "Different content duration detected between discontinuities". I assume it is caused by my generated manifest having video segments extent past the last audio segments in seconds. Should I shorten the video playback to be the shorter between the two? Should I pad out the video with empty segments so that both streams have the same duration?
Replies
4
Boosts
0
Views
1.5k
Activity
Mar ’23
FairPlay on iOS 16.1 and onward: AVAssetResourceLoaderDelegate not called with offline DRMs anymore
Hello, We are experiencing a new regression with iOS 16.1/16.2 beta when trying to play a video with offline FairPlay DRMs. Everything was working fine with 16.0.3 and below. The delegate public func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool is never called when you start playing an offline video. It prevents the player to get the DRM and we end up with a timeout CoreMediaError -19512. We tried to preload the existing keys asset.resourceLoader.preloadsEligibleContentKeys = true to no avail. We also looked at the solutions provided in this thread iOS 16 FairPlay Changes which was very similar to our issue but nothing worked for us (we are already using keyRequest.processContentKeyResponse(response)). The DRMs are valid and can be loaded if we move the key to an older iOS device (iOS 16 and below). However, we can see in the logs the following error happening before the CoreMediaError -19512. <<< FigPKDKeyManager >>>> PKDKeyManagerSetKeyRequestError: keyManager: 0x606ce 210 KeyID: F017D7B0-390-45ED-803-01A748DFB7A1 errOr: Error Domain-CoreMediaErrorDomain Code=-19160 " (null)" err: 0 The player just seem not to trigger any delegate starting 16.1+. Is anybody else experiencing the same issue? How can we find out why the delegate aren't triggered? Bests
Replies
2
Boosts
1
Views
2.4k
Activity
Mar ’23
How do I access a FairPlay protected stream's frame in avplayer?
when i played a fairplay streaming by avplayer,calling copyPixelBufferForItemTime on AVPlayerItemVideoOutput the pixelbuffer returns NULL.is there any way to get the pixel buffer from a stream that is protected using FairPlay on iOS or apple's APIs in order to display FairPlay stream on an OpenGL texture in 3D space?
Replies
1
Boosts
0
Views
721
Activity
Mar ’23
[tvOS] AVPlayerViewController displays time period label for Live stream
During Live Stream playback on tvOS using AVPlayerViewController we noticed strange time period label: 12:30 PM - 1:00 PM next to the live indicator. It seems that during the start of the playback, the value is set to a 30-minute time period. Questions: What does 12:30 PM - 1:00 PM mean? Can we hide this label or manipulate it using tags in HLS playlist? We do not understand where this value (12:30 PM - 1:00 PM) comes from. Here is an example of our playlist: #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:3 #EXT-X-MEDIA-SEQUENCE:9091 #EXT-X-PROGRAM-DATE-TIME:2023-02-21T12:39:06.640Z As you can see it's not a EXT-X-PROGRAM-DATE-TIME Thanks!
Replies
0
Boosts
0
Views
777
Activity
Mar ’23
FairPlay Content Packaging Using mediafilesegmenter tool
New to FairPlay implementation. Following Apple's "FairPlay Streaming Programming Guide", to transcoded & encrypted a MP4 file using command - mediafilesegmenter --stream-encrypt --streaming-key-delivery --encrypt-key-file=./key_iv.bin --encrypt-key-url="skd://example/key" ./input-content.mp4 key_iv.bin is the file which contains Encryption Key and Initialisation Vector. It is generating HLS's playlist, index and segment files. To test the encryption and the decryption precess, I am taking one segment file(which is generated by mediafilesegmenter, say fileSequence125.ts) and trying to decrypt(algorithm is "AES/CBC/NOPADDING") it using the same Encryption Key and Initialisation Vector, then I am getting bellow errors - Input length not multiple of 16 bytes So, does it means the length/size of each segment(.ts) file, which is generated by the mediafilesegmenter, should be a multiple of 16 bytes?
Replies
0
Boosts
0
Views
821
Activity
Apr ’23
Do FairPlay and AVPlayer support Clear Lead?
In DRM-protected files, usually there's a Clear Lead -- the first few seconds are clear. It allows playback to start without having to wait for license response, improving video start time (and user experience).The question is, therefore: if a stream has clear lead, will AVPlayer start playing without waiting for response from the DRM server?
Replies
12
Boosts
0
Views
6.5k
Activity
Apr ’23
How to set color of WebVTT subtitle?
The WebVTT specification, https://w3c.github.io/webvtt/, mentions that color (and any other formatting) of cue text can be set using the "::cue" CSS extension.I tried the simple vtt file:WEBVTT::cue(#first_cue) { color: blue }X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:0first_cue00:00:00.000 --&gt; 00:00:10.000Allo world!without any success.What is the simplest implementation that would allow coloring/formatting of cue text?
Replies
2
Boosts
0
Views
4.5k
Activity
Apr ’23
AVAssetResourceLoaderDelegate and TS files error: Error Domain=CoreMediaErrorDomain Code=-12881 "custom url not redirect"
Hello,I've used AVAssetResourceLoaderDelegate and sucessfully implemented ways to store mp3 and mp4 files.The problem starts when I try to implement the same thing for HLS. The master playlists (m3u8) are working perfectly fine but when I try the same for .ts files (video segments) I get this error: Error Domain=CoreMediaErrorDomain Code=-12881 "custom url not redirect"I've tried everything and even using the redirect approach to a filepath URL fails.The only possible solution is to have an internal HTTP server but that doesn't make sense to me. If I'm implementing AVAssetResourceLoaderDelegate then I should be apple to feed AVFoundation the data needed to play a video, right?Thanks in advance.Help for this would be much appreciated.
Replies
21
Boosts
0
Views
11k
Activity
Apr ’23