Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Cocoa OS X AVPlayer中播放HLS(m3u8)-Swift_Swift_Macos_Cocoa_Avplayer_Http Live Streaming - Fatal编程技术网

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

在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

基本上,我正在尝试使用Cocoa Swift中的AVPlayer播放m3u8(HLS直播流)。我对这门语言还比较陌生,所以基本上抓取了一些用于播放本地视频文件的内容,并尝试对其进行修改以播放实时流。。。但是,请记住:

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


非常感谢任何关于如何使此代码工作的帮助,或将我引向正确方向的帮助

我试图将您的代码粘贴到一个新的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
得到了一个零对象异常,我不明白为什么?