我尝试了一个非常简单的Xcode OS程序,这个程序构建并运行,但是我在访问URL视频文件时遇到了错误。可能与某个地方的特权或安全设置有关,但不知道在哪里。下面是我在ViewController类下的程序: NSViewController:
@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文件:
<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文件进行配置。
发布于 2017-11-11 17:51:13
在您评论了我之前回答过的一个question之后,我发现了您的问题,所以让我们在这里继续:)
我可以通过将我对这个问题的原始答案与上面so...give的@callam提供的答案结合起来让您的代码工作,正确答案的功劳是:)
总之,你需要:
AVPlayerView到您的故事板,并连接到您的ViewControllerViewController更详细
1.将AVPlayerView添加到童话板并将其连接到ViewController
将AVKit Player View拖到情节提要中的视图中

在ViewController类中,为视图创建一个outlet:
@IBOutlet weak var playerView: AVPlayerView!把它连接起来。
2.设置ViewController
这是我的代码:
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文件
<?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。

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

但是请注意,我仍然在控制台中看到错误。
希望您能够按照以下步骤获得相同的结果:)
发布于 2017-11-05 23:22:14
即使启用任意加载,使用不安全的HTTP进行连接的尝试也会失败。
将URL中的协议更改为https://或将域添加到NSExceptionDomains。
let url1 = URL(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")我相信通过在应用程序功能中选择Outgoing Connections可以修复XPC错误

https://stackoverflow.com/questions/47127618
复制相似问题