AVPlayer won't let me access URL
I found your question after you commented on a question I had answered previously, so lets continue here :)
I can get your code working by combining my original answer to that question with the answer provided by @callam above so...give him the credit for the correct answer :)
To summarize, you need to:
- Add a
AVPlayerView
to your Storyboard and connect it to yourViewController
- Setup your
ViewController
- Manage App Transport Security and the outgoing connection.
In greater detail
1. Add a AVPlayerView
to your Storyboard and connect it to your ViewController
Drag a AVKit Player View
to your view in the storyboard
In your ViewController
class, create an outlet
for the view:
@IBOutlet weak var playerView: AVPlayerView!
And connect it.
2. Setup your ViewController
Here is my code:
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()
}
}
Seems familiar no :)
Notice I create the videoPlayer
right here, no need to for me to use the let playerView = self.playerView
you mention in your comments.
If you just do these two steps, you end up with a player view that cannot play video and errors in your console. So you need to add the final piece to the puzzle, kindly provided by @callam above.
3. Manage App Transport Security and the outgoing connection.
First, if you cannot use a HTTPS
connection you must allow HTTP
connections in your info.plist
file.
Here is my .plist
file in its entirety
<?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>
The important part being the NSAppTransportSecurity
part
And then finally, you must enable Outgoing Connections (Client)
under Capabilities
of your project
If I do that, I end up with this:
But notice though, that I still see errors in the console.
Hope you are able to get to the same result following these steps :)
How to reload data for AVPlayer, if URL failed swift
Solution:
private var player: AVPlayer? {
didSet{
if player?.currentItem?.status == .failed {
if indexOfURL >= 0 {
prepareForPronunciation(indexOfURL)
}
}
}
}
If URLs are over, set indexOfURL equals -1, otherwise increment it to use next URL in the next function call
Related Topics
Cleanly Handling /Usr/Local/ with Swift Package Manager and Libevent
Swift: Handling an Unexpected Nil Value, When Variable Is Not Optional
Swift Framework with Opencv Dynamic Framework, Library Not Loaded
Firebase Authentication: Linking Multiple Accounts in Swift
Can't Update Label from Other Class in Swift
Watchkit Extension Cannot Read from Icloud
Connecting Avaudiosourcenode to Avaudiosinknode Does Not Work
Find Index of Annotation Mapkit
Swift Full Text Search in Tableview
How to Read The Property Values of a JSON Error Object Using Combine in Swift
Arkit: How to Tell If User's Face Is Parallel to Camera
Swift: Method Overriding in Parameterized Class
Possible Bug? I Can Create Generic Instance Ignoring Constraint
Validatemenuitem or Menuwillopen Not Called for Nsmenu
How to Create Travelling Wave in Spritekit
Change The 2Nd and 3Rd Pickerview Acording to What Row from The 1St Picker Is Selected
Arkit: Plot a Node at a Specific Pixel at a Specific Z Distance from Camera