Nea*_*vis 2 xcode avplayer swift
我正在尝试使用Swift 4.0开发非常简单的Xcode OS X程序-该程序可以构建并运行,但是访问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();
}
Run Code Online (Sandbox Code Playgroud)
另外,我还使用以下内容修改了info.plist文件:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
<key>NSExceptionDomains</key>
<dict/>
</dict>
Run Code Online (Sandbox Code Playgroud)
我在尝试访问以上两个网址之一时遇到以下运行时错误,为什么?
UserInfo = {NSDebugDescription =与名为com.apple.rtcreportingdd的服务的连接} 2017-11-05 10:12:21.925221-0800 AVPlayer [54381:5617654]应用传输安全性已阻止自明文HTTP(http://)资源加载这是不安全的。可以通过应用程序的Info.plist文件配置临时异常。
在您对我之前回答的问题发表评论后,我找到了您的问题,所以让我们在这里继续:)
通过将我对该问题的原始答案与上面@callam提供的答案结合起来,我可以使您的代码正常工作,以便...将正确答案归功于他:)
总而言之,您需要:
AVPlayerView到您的Storyboard并将其连接到ViewControllerViewController更详细地
AVPlayerView到您的Storyboard,然后将其连接到ViewController将一个AVKit Player View拖到情节提要中的视图中
在您的ViewController课程中,outlet为视图创建一个:
@IBOutlet weak var playerView: AVPlayerView!
Run Code Online (Sandbox Code Playgroud)
并连接它。
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()
}
}
Run Code Online (Sandbox Code Playgroud)
似乎不熟悉:)
注意,我在videoPlayer这里创建了权限,无需我使用let playerView = self.playerView您在评论中提及的内容。
如果仅执行这两个步骤,最终将获得无法在控制台中播放视频和错误的播放器视图。因此,您需要将最后一块添加到拼图中,由@callam提供。
首先,如果无法使用HTTPS连接,则必须允许文件中的HTTP连接info.plist。
这是我.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>
Run Code Online (Sandbox Code Playgroud)
重要的部分是NSAppTransportSecurity一部分
然后终于,您必须启用Outgoing Connections (Client)在Capabilities您的项目
如果这样做,我将得到以下结果:
但是请注意,我仍然在控制台中看到错误。
希望您能够按照以下步骤获得相同的结果:)
| 归档时间: |
|
| 查看次数: |
2533 次 |
| 最近记录: |