在調(diào)試視頻時(shí)出現(xiàn)黑屏的情況,然后發(fā)現(xiàn)是 AVPlayerItemStatusFailed 的,通過(guò)打印 item.error 得到 Error Domain=AVFoundationErrorDomain Code=-11850 "操作停止" 的錯(cuò)誤提示。
基本上網(wǎng)絡(luò)上給出的都是 Domain=AVFoundationErrorDomain Code=-11850操作停止如何解決 的解答,通過(guò)聯(lián)系服務(wù)商進(jìn)行了解決,如果自己處理視頻的請(qǐng)自行聯(lián)系服務(wù)端人員解決。
然而我這邊不一樣,我發(fā)現(xiàn)是 是 AVPlayerItem 初始化用法不同
[AVPlayerItem playerItemWithAsset:asset];
[[AVPlayerItem alloc] initWithURL:localVideoUrl];
用了前者,發(fā)現(xiàn)就是有這個(gè)問(wèn)題,后者沒(méi)有。
進(jìn)一步發(fā)現(xiàn)是我們項(xiàng)目中,用了AVURLAssetPreferPreciseDurationAndTimingKey這個(gè) key . 這個(gè)key對(duì)應(yīng)的value是一個(gè)布爾值, 用來(lái)表明資源是否需要為時(shí)長(zhǎng)的精確展示,以及隨機(jī)時(shí)間內(nèi)容的讀取進(jìn)行提前準(zhǔn)備.
然而實(shí)際告訴以上不同,都不是。
+ (NSURL *)fileURLWithPath:(NSString *)path;
+ (nullable instancetype)URLWithString:(NSString *)URLString
前者會(huì)自動(dòng)帶上 file:// 的前綴的,所以一般我們作如下區(qū)別
- 訪問(wèn)的是本地資源,而且不包含協(xié)議頭,使用fileURLWithPath創(chuàng)建URL
- 使用fileURLWithPath創(chuàng)建URL時(shí),不用擔(dān)心URL中混有中文的問(wèn)題,系統(tǒng)會(huì)自動(dòng)實(shí)現(xiàn)轉(zhuǎn)換
我這邊是引用本地的鏈接,所以應(yīng)該是自己用 fileURLWithPath, 問(wèn)題到此才找到答案的。