在 Cocoa OS X AVPlayer - Swift 中播放 HLS (m3u8)
Playing HLS (m3u8) in Cocoa OS X AVPlayer - Swift
基本上,我正在尝试在 Cocoa Swift 中使用 AVPlayer 播放 m3u8(HLS 直播流)。我对这门语言比较陌生,所以基本上抓取了一些 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.
}
}
}
非常感谢任何有关如何使此代码正常工作或引导我朝着正确方向前进的帮助!
我试图将您的代码粘贴到一个新的 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
的顶部启用它
然后您需要确保也显示控制台,这是在 Xcode 的底部完成的:
好的,现在你可以看到错误,那么如何修复它:)
此消息基本上告诉您 Apple 已阻止访问 HTTP
。这是在 OS X 10.11 和 iOS 9 中引入的,但可以禁用。
正如控制台中所说:
Temporary exceptions can be configured via your app's Info.plist file.
这意味着您应该向 info.plist
文件添加一个新密钥。
您可以将其添加为 "raw" plist 数据,如下所示:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
或者您可以在 plist 编辑器中添加它,它看起来像这样:
很好的答案描述了我能做的更好的过程
如果我这样做,我就可以获得您的代码 运行 并且可以观看直播,所以我希望这对您也有帮助。
基本上,我正在尝试在 Cocoa Swift 中使用 AVPlayer 播放 m3u8(HLS 直播流)。我对这门语言比较陌生,所以基本上抓取了一些 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.
}
}
}
非常感谢任何有关如何使此代码正常工作或引导我朝着正确方向前进的帮助!
我试图将您的代码粘贴到一个新的 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
的顶部启用它然后您需要确保也显示控制台,这是在 Xcode 的底部完成的:
好的,现在你可以看到错误,那么如何修复它:)
此消息基本上告诉您 Apple 已阻止访问 HTTP
。这是在 OS X 10.11 和 iOS 9 中引入的,但可以禁用。
正如控制台中所说:
Temporary exceptions can be configured via your app's Info.plist file.
这意味着您应该向 info.plist
文件添加一个新密钥。
您可以将其添加为 "raw" plist 数据,如下所示:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
或者您可以在 plist 编辑器中添加它,它看起来像这样:
如果我这样做,我就可以获得您的代码 运行 并且可以观看直播,所以我希望这对您也有帮助。