在Cocoa OS X AVPlayer中播放HLS(m3u8)-Swift
基本上,我正在尝试使用Cocoa Swift中的AVPlayer播放m3u8(HLS直播流)。我对这门语言还比较陌生,所以基本上抓取了一些用于播放本地视频文件的内容,并尝试对其进行修改以播放实时流。。。但是,请记住: 这是我到目前为止得到的(注释行用于播放本地文件,这确实有效):在Cocoa OS X AVPlayer中播放HLS(m3u8)-Swift,swift,macos,cocoa,avplayer,http-live-streaming,Swift,Macos,Cocoa,Avplayer,Http Live Streaming,基本上,我正在尝试使用Cocoa Swift中的AVPlayer播放m3u8(HLS直播流)。我对这门语言还比较陌生,所以基本上抓取了一些用于播放本地视频文件的内容,并尝试对其进行修改以播放实时流。。。但是,请记住: 这是我到目前为止得到的(注释行用于播放本地文件,这确实有效): 非常感谢任何关于如何使此代码工作的帮助,或将我引向正确方向的帮助 我试图将您的代码粘贴到一个新的OS X项目中(或者我们现在必须开始称之为macOS:) 启动项目时,我在控制台中遇到以下错误: 2016-06-21
非常感谢任何关于如何使此代码工作的帮助,或将我引向正确方向的帮助 我试图将您的代码粘贴到一个新的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的底部完成:
好的,现在您可以看到错误,然后如何修复它:)
这条消息基本上告诉你,苹果已经阻止了对HTTP
的访问。这是在OSX10.11和IOS9中引入的,但可以禁用
正如它在控制台中所说:
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.
可以通过应用程序的Info.plist文件配置临时异常
这意味着您应该向info.plist
文件添加一个新密钥
您可以将其添加为“原始”plist数据,如下所示:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
也可以将其添加到plist编辑器中,如下所示:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
伟大的答案更好地描述了这个过程
如果我这样做,我就可以运行您的代码并观看直播,因此我希望这也能帮助您。哇,非常感谢!应该意识到这就是problem@pbodsk-我在代码语句let avAsset=avurlaste(URL:my_URL!,options:nil)中遇到此错误-“NSURL”不能隐式转换为“URL”;您的意思是使用“as”来显式转换吗?关于为什么你们没有犯那个错误,有什么想法吗?但我犯了?@NealDavis你们可能会这样认为,因为这个答案和问题已经有一年半的历史了,并且是在2016年夏/秋Swift 3发生的“大Swift重写”之前写的。部分原因是
NSURL
被更改为URL
,作为用于URL的类型。当问到这个问题时,您必须将NSURL的一个匹配项传递给
avurlaste`init
方法,现在您传递了URL的一个匹配项
。所以我猜您正在创建一个NSURL
,并将其交给您的avurlaste
,它现在只需要一个URL
。因此,如果我将确切的代码放入项目中,请尝试将my_url
的类型更改为url
:let fileURL=url(字符串:http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8)let avAsset=avurlaste(url:fileURL!,选项:nil)let playerItem=AVPlayerItem(资产:avAsset)videoPlayer=AVPlayer(playerItem:playerItem)让playerView=self.playerView?playerView=videoPlayer.play()
我必须添加行:let playerView=self.playerView
或者我在playerView.player=videoPlayer
行上得到一个无对象异常?有什么想法吗?@pbodsk-我根据你的评论进行了更改,但看到了我在上面的最后一条评论-使用与上面完全相同的代码,我在playerView.player=videoPlayer
得到了一个零对象异常,我不明白为什么?