我尝试从网址字符串播放视频。但是我的问题标题出现了一些错误。
我在下面尝试此代码。 videoPath是网址字符串。
let videoURL = URL(string: videoPath)
let player = AVPlayer(url: videoURL!)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player!.play()
}
以下是错误日志:
加载失败,错误为Error Domain = NSURLErrorDomain Code = -999 “已取消” UserInfo = {NSErrorFailingURLStringKey = http://b...a.mp4, NSErrorFailingURLKey = http://b...a.mp4, _NSURLErrorRelatedURLSessionTaskErrorKey =( “ LocalDataTask <841B2FFA-479B-4E5A-9BD3-D9207EAA0D32>。<2>”),_ NSURLErrorFailingURLSessionTaskErrorKey = LocalDataTask <841B2FFA-479B-4E5A-9BD3-D9207EAA0D32>。<2>, NSLocalizedDescription = cancelled} [-999]
我设置了info.plist-
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>www.example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
注意:问题出现在10分钟以上的视频上。这是正常现象吗?
答案 0 :(得分:0)
您是否要在AVPlayerViewController
中显示viewDidLoad
?如果是这样,您可以在将视图控制器的视图添加到窗口层次结构后尝试呈现它-例如viewDidAppear
。请记住,当您导航回控制器时,将调用viewDidAppear
,并且模态表示将再次被触发。
答案 1 :(得分:0)
URL是否需要设置cookie?我也遇到缺少Cookie的问题。 您可以尝试通过在隐身窗口中打开网址来进行检查。如果仍然可以正常播放,则可以通过-
进行调试使用URL创建AVURLAsset
对象,例如-
AVURLAsset(url: <URL>, options:[])
并将resourceLoader
委托设置为self。
像urlAsset?.resourceLoader.setDelegate(self, queue: .main)
并实现功能
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
return true
}
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForRenewalOfRequestedResource renewalRequest: AVAssetResourceRenewalRequest) -> Bool {
return true
}
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, didCancel loadingRequest: AVAssetResourceLoadingRequest) {
}
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForResponseTo authenticationChallenge: URLAuthenticationChallenge) -> Bool {
return true
}
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, didCancel authenticationChallenge: URLAuthenticationChallenge) {
}
但是,如果确实需要Cookie,则将其设置在AVURLAsset
对象中,例如
let asset = AVURLAsset(url: videoURL, options: ["AVURLAssetHTTPHeaderFieldsKey": ["Cookie": "<YOUR TOKEN>"]])
答案 2 :(得分:0)
原因可能是视频中的元数据错误。看一下我回答的这个线程:AVPlayer HLS live stream IOS
已转码的视频必须具有profile baseline
才能在AVPlayer中播放。查看ffmpeg转码命令以了解详细信息:
https://gist.github.com/chung-nguyen/d88e73e3cc8788878f5ffb8c232b4729
答案 3 :(得分:0)
NSErrorFailingURLKey = 无论您使用哪种ATS,带有“ http”前缀的url总是失败。 请访问我的答案http://b...a.mp4