首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVPlayer不让我访问网址

AVPlayer不让我访问网址
EN

Stack Overflow用户
提问于 2017-11-05 23:08:24
回答 2查看 4.8K关注 0票数 3

我尝试了一个非常简单的Xcode OS程序,这个程序构建并运行,但是我在访问URL视频文件时遇到了错误。可能与某个地方的特权或安全设置有关,但不知道在哪里。下面是我在ViewController类下的程序: NSViewController:

代码语言:javascript
复制
@IBOutlet var playerView: AVPlayerView!
//var url: URL!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    // guard let url = URL(string: "https://devimages.apple.com.edgekey.net/samplecode/avfoundationMedia/AVF oundationQueuePlayer_HLS2/master.m3u8")
    //    else {
    //        return
    //    }

   let url1 = URL(string: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")


    let player = AVPlayer(url: url1!)
    // Create a new AVPlayer and associate it with the player view

    let playerView = self.playerView
    playerView?.player = player
    playerView?.player!.play();
}

此外,我还使用以下内容修改了info.plist文件:

代码语言:javascript
复制
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict/>
</dict>

我得到以下运行时错误,试图访问上面的任何一个URL,为什么?

2017-11-05 10:12:21.757333-0800 AVPlayer54381:5617593 startLogging:日志开始.11-05 10:12:21.758024-0800 AVPlayer54381:5617612 setMessageLoggingBlock:调用2017-11-05 10:12:21.758520-0800 AVPlayer54381:5617612 initWithSessionInfo: XPC连接中断2017-11-05 10:12:21.758842-0800 AVPlayer54381:5617612 startConfigurationWithCompletionHandler:未能获得远程对象代理: Domain=NSCocoaErrorDomain Code=4097“连接到名为com.apple.rtcreportingd}的服务”UserInfo={NSDebugDescription=connection to service命名为com.apple.rtcreportingd}11-05 10:12:21.759003-0800 AVPlayer54381:5617612Http://) startConfigurationWithCompletionHandler: startConfigurationWithCompletionHandler:未能获得远程对象代理: Error Domain=NSCocoaErrorDomain Code=4097“到名为com.apple.rtcreportingd的服务的连接”UserInfo={NSDebugDescription=connection to service命名为com.apple.rtcreportingd} 2017-11-05 10:12:21.925221-0800 AVPlayer54381:5617654 AVPlayer54381阻止了明文HTTP (因为它是不安全的)资源负载。临时异常可以通过应用程序的Info.plist文件进行配置。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-11 17:51:13

在您评论了我之前回答过的一个question之后,我发现了您的问题,所以让我们在这里继续:)

我可以通过将我对这个问题的原始答案与上面so...give的@callam提供的答案结合起来让您的代码工作,正确答案的功劳是:)

总之,你需要:

  1. 添加一个AVPlayerView到您的故事板,并连接到您的ViewController
  2. 设置您的ViewController
  3. 管理应用程序传输安全性和传出连接。

更详细

1.将AVPlayerView添加到童话板并将其连接到ViewController

AVKit Player View拖到情节提要中的视图中

ViewController类中,为视图创建一个outlet

代码语言:javascript
复制
 @IBOutlet weak var playerView: AVPlayerView!

把它连接起来。

2.设置ViewController

这是我的代码:

代码语言:javascript
复制
import Cocoa
import AVKit

class ViewController: NSViewController {

    @IBOutlet weak var playerView: AVPlayerView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let fileURL = URL(string: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
        let avAsset = AVURLAsset(url: fileURL!, options: nil)

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

似乎熟悉否:)

注意,我在这里创建了videoPlayer,无需使用您在评论中提到的let playerView = self.playerView

如果您只执行这两个步骤,您将得到一个无法在控制台中播放视频和错误的player视图。因此,您需要添加最后一块拼图,上面的@callam善意地提供了。

3.管理应用程序传输安全和传出连接。

首先,如果不能使用HTTPS连接,则必须在info.plist文件中允许HTTP连接。

这是我的整个.plist文件

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIconFile</key>
    <string></string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSMinimumSystemVersion</key>
    <string>$(MACOSX_DEPLOYMENT_TARGET)</string>
    <key>NSHumanReadableCopyright</key>
    <string>Copyright © 2017 :) </string>
    <key>NSMainStoryboardFile</key>
    <string>Main</string>
    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
</dict>
</plist>

重要的部分是NSAppTransportSecurity部分

最后,必须在项目的Outgoing Connections (Client)下启用Capabilities

如果我这么做,我就会有这样的结果:

但是请注意,我仍然在控制台中看到错误。

希望您能够按照以下步骤获得相同的结果:)

票数 9
EN

Stack Overflow用户

发布于 2017-11-05 23:22:14

即使启用任意加载,使用不安全的HTTP进行连接的尝试也会失败。

将URL中的协议更改为https://或将域添加到NSExceptionDomains

代码语言:javascript
复制
let url1 = URL(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")

ref/doc/uid/TP40009251-SW35

我相信通过在应用程序功能中选择Outgoing Connections可以修复XPC错误

https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47127618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档