在Cocoa OS X AVPlayer中播放HLS(m3u8) - Swift

时间:2016-06-21 06:30:30

标签: swift macos cocoa avplayer hls

基本上我正在尝试使用Cocoa Swift中的AVPlayer播放m3u8(HLS Live Stream)。我对这种语言比较陌生,所以基本上抓了一些example code来播放本地视频文件并尝试修改它来播放直播...但是请改为:

http://i.stack.imgur.com/bU9GM.png

这是我到目前为止所做的(注释行是播放本地文件,它确实有效):

import Cocoa
import AVKit
import Foundation
import AVFoundation

class ViewController: NSViewController {

    @IBOutlet weak var playerView: AVPlayerView!

    var videoPlayer:AVPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        //let path = NSBundle.mainBundle().pathForResource("sample", ofType: "mov")
        //var fileURL = NSURL(fileURLWithPath: path!)
        let fileURL = NSURL(string: "http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8")
        let avAsset = AVURLAsset(URL: fileURL!, options: nil)

        let playerItem = AVPlayerItem(asset: avAsset)
        videoPlayer = AVPlayer(playerItem: playerItem)
        playerView.player = videoPlayer
        videoPlayer.play()
    }

    override var representedObject: AnyObject? {
        didSet {
            // Update the view, if already loaded.
        }
    }
}

非常感谢有关如何使此代码正常工作或引导我朝着正确方向前进的任何帮助!

1 个答案:

答案 0 :(得分:3)

我尝试将您的代码粘贴到新的OS X项目(或macOS,因为我们现在必须开始调用它)。)

当我启动项目时,我在控制台中收到此错误:

2016-06-21 09:09:27.860 Videoplayer[2494:169209] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

我不知道您是否启用了控制台,只要您启用了调试区域,它就是屏幕的底部。

如果您还没有启用调试区域,那么您可以在Xcode顶部启用它

enable debug area

然后你需要确保你也显示控制台,这在Xcode的底部完成:

enable console

好的,现在你可以看到错误,然后如何解决它:)

此消息基本上告诉您Apple已阻止对HTTP的访问权限。这是在OS X 10.11和iOS 9中引入的,但可以禁用。

正如它在控制台中所说:

  

可以通过应用的Info.plist文件配置临时例外。

这意味着您应该在info.plist文件中添加新密钥。

您可以将其添加为" raw" plist数据,如下所示:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

或者你可以在plist编辑器中添加它,它看起来像这样:

editing plist

This question而且很棒的答案可以更好地描述这个过程

如果我这样做,我可以让你的代码运行并可以观看直播,所以我希望这对你也有帮助。