AVPlayerViewController 拒绝加载/播放视频文件/流

Posted

技术标签:

【中文标题】AVPlayerViewController 拒绝加载/播放视频文件/流【英文标题】:AVPlayerViewController refuses to load/play video files/streams 【发布时间】:2015-11-08 17:50:19 【问题描述】:

我正在尝试在我的应用中加载 HLS 流,但我什至无法让它们正确显示。我有一个 AVPlayerViewController 设置为我的应用程序的初始视图控制器和以下代码:

import UIKit
import AVKit
import AVFoundation

private var playerContext = 0

class PlayerViewController: AVPlayerViewController     
    override func awakeFromNib() 
        print("awake!")

        let URL = NSURL(string: "http://live-lh.daserste.de/i/daserste_de@91204/index_2692_av-b.m3u8")!
        let player = AVPlayer(URL: URL)
//      player.addObserver(self, forKeyPath: "status", options: [.Old, .New], context: &playerContext) // commented out for testing purposes, doesn't make any difference

        self.player = player
        self.showsPlaybackControls = true
    

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) 
        if context == &playerContext 
            print("\(keyPath!): \(change!)")
         else 
            super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
        
    

    // viewDidLoad() and didReceiveMemoryWarning()

在桌面 Safari 中打开该 URL 效果很好(尽管您可能必须在德国才能看到它),所以我不知道为什么它在 ios 上不起作用。我的应用程序显示的不是流,而是:

Screenshot of the running app

我的代码有什么问题?

更新:无论我使用什么 URL,都会发生完全相同的事情,即使是无效的。我不知道这里发生了什么。

【问题讨论】:

【参考方案1】:

原来没有加载流是因为我忘记禁用 ATS。难怪所有那些仅 HTTP 的流都没有加载。 derp

(我知道禁用 ATS 很少是一个好的解决方案,但在这种情况下,我可以完全控制加载的 URL,所以在那里。)

【讨论】:

以上是关于AVPlayerViewController 拒绝加载/播放视频文件/流的主要内容,如果未能解决你的问题,请参考以下文章

检测 AVPlayerViewController 完成按钮点击?

AVPlayerViewController 不按 url 播放视频

iOS - 在 AVPlayerViewController 之上添加控件

在 AVPlayerViewController 中禁用手势识别器

在 AVPlayerViewController 中点击播放按钮时执行操作

Swift AVPlayerViewController 添加 AirPlay