Comment lire la video avec AVPlayerViewController (AVKit) dans Swift

Comment lire une video avec AV Kit Player View Controller dans Swift?

override func viewDidLoad() { super.viewDidLoad() let videoURLWithPath = "http://****/5.m3u8" let videoURL = NSURL(ssortingng: videoURLWithPath) playerViewController = AVPlayerViewController() dispatch_async(dispatch_get_main_queue()) { self.playerViewController?.player = AVPlayer.playerWithURL(videoURL) as AVPlayer } } 

    Swift 3.x – 4.x

    Nécessaire: importer AVKit , importer AVFoundation

    Le framework AVFoundation est nécessaire même si vous utilisez AVPlayer

    Si vous voulez utiliser AVPlayerViewController :

     let videoURL = URL(ssortingng: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") let player = AVPlayer(url: videoURL!) let playerViewController = AVPlayerViewController() playerViewController.player = player self.present(playerViewController, animated: true) { playerViewController.player!.play() } 

    ou juste AVPlayer :

     let videoURL = URL(ssortingng: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") let player = AVPlayer(url: videoURL!) let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = self.view.bounds self.view.layer.addSublayer(playerLayer) player.play() 

    Il est préférable de mettre ce code dans la méthode: override func viewDidAppear (_ animated: Bool) ou quelque part après.


    Objectif c

    AVPlayerViewController :

     NSURL *videoURL = [NSURL URLWithSsortingng:@"https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"]; AVPlayer *player = [AVPlayer playerWithURL:videoURL]; AVPlayerViewController *playerViewController = [AVPlayerViewController new]; playerViewController.player = player; [self presentViewController:playerViewController animated:YES completion:nil]; 

    ou juste AVPlayer :

     NSURL *videoURL = [NSURL URLWithSsortingng:@"https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"]; AVPlayer *player = [AVPlayer playerWithURL:videoURL]; AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame = self.view.bounds; [self.view.layer addSublayer:playerLayer]; [player play]; 

    Essayez ceci, fonctionne définitivement pour Swift 2.0

      let player = AVPlayer(URL: url) let playerController = AVPlayerViewController() playerController.player = player self.addChildViewController(playerController) self.view.addSubview(playerController.view) playerController.view.frame = self.view.frame player.play() 

    Essaye ça

     var player:AVPlayer! var avPlayerLayer:AVPlayerLayer = AVPlayerLayer(player: player) avPlayerLayer.frame = CGRectMake(your frame) self.view.layer .addSublayer(avPlayerLayer) var steamingURL:NSURL = NSURL(ssortingng:playerURL) player = AVPlayer(URL: steamingURL) player.play() 

    Objectif c

    Cela ne fonctionne que dans Xcode 7

    Accédez au file .h et importez AVKit/AVKit.h et AVFoundation/AVFoundation.h . Ensuite, allez .m file .m et ajoutez ce code:

     NSURL *url=[[NSBundle mainBundle]URLForResource:@"arreg" withExtension:@"mp4"]; AVPlayer *video=[AVPlayer playerWithURL:url]; AVPlayerViewController *controller=[[AVPlayerViewController alloc]init]; controller.player=video; [self.view addSubview:controller.view]; controller.view.frame=self.view.frame; [self addChildViewController:controller]; [video play]; 

    Swift 3.0 Code source complet:

     import UIKit import AVKit import AVFoundation class ViewController: UIViewController,AVPlayerViewControllerDelegate { var playerController = AVPlayerViewController() @IBAction func Play(_ sender: Any) { let path = Bundle.main.path(forResource: "video", ofType: "mp4") let url = NSURL(fileURLWithPath: path!) let player = AVPlayer(url:url as URL) playerController = AVPlayerViewController() NotificationCenter.default.addObserver(self, selector: #selector(ViewController.didfinishplaying(note:)),name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem) playerController.player = player playerController.allowsPictureInPicturePlayback = true playerController.delegate = self playerController.player?.play() self.present(playerController,animated:true,completion:nil) } func didfinishplaying(note : NSNotification) { playerController.dismiss(animated: true,completion: nil) let alertview = UIAlertController(title:"finished",message:"video finished",preferredStyle: .alert) alertview.addAction(UIAlertAction(title:"Ok",style: .default, handler: nil)) self.present(alertview,animated:true,completion: nil) } func playerViewController(_ playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void) { let currentviewController = navigationController?.visibleViewController if currentviewController != playerViewController { currentviewController?.present(playerViewController,animated: true,completion:nil) } } } 

    Utilisation de MPMoviePlayerController:

      import UIKit import MediaPlayer class ViewController: UIViewController { var streamPlayer : MPMoviePlayerController = MPMoviePlayerController(contentURL: NSURL(ssortingng:"video url here")) override func viewDidLoad() { super.viewDidLoad() streamPlayer.view.frame = self.view.bounds self.view.addSubview(streamPlayer.view) streamPlayer.fullscreen = true // Play the movie! streamPlayer.play() } } 

    Utiliser AVPlayer:

     import AVFoundation var playerItem:AVPlayerItem? var player:AVPlayer? override func viewDidLoad() { super.viewDidLoad() let url = NSURL(ssortingng: "url of the audio or video") playerItem = AVPlayerItem(URL: url!) player=AVPlayer(playerItem: playerItem!) let playerLayer=AVPlayerLayer(player: player!) playerLayer.frame=CGRectMake(0, 0, 300, 50) self.view.layer.addSublayer(playerLayer) } 

    J'ai un button de lecture pour gérer le robinet.

     playButton.addTarget(self, action: "playButtonTapped:", forControlEvents: .TouchUpInside) func playButtonTapped(sender: AnyObject) { if player?.rate == 0 { player!.play() playButton.setImage(UIImage(named: "player_control_pause_50px.png"), forState: UIControlState.Normal) } else { player!.pause() playButton.setImage(UIImage(named: "player_control_play_50px.png"), forState: UIControlState.Normal) } } 

    J'ai ajouté un observateur à l'écoute de AVPlayerItemDidPlayToEndTimeNotification.

     override func viewWillAppear(animated: Bool) { NSNotificationCenter.defaultCenter().addObserver(self, selector: "finishedPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem) } override func viewWillDisappear(animated: Bool) { NSNotificationCenter.defaultCenter().removeObserver(self) } 

    Lorsque la lecture video / audio est terminée, réinitialisez l'image et la notification du button

      func finishedPlaying(myNotification:NSNotification) { playButton.setImage(UIImage(named: "player_control_play_50px.png"), forState: UIControlState.Normal) let stopedPlayerItem: AVPlayerItem = myNotification.object as! AVPlayerItem stopedPlayerItem.seekToTime(kCMTimeZero) } 

    un bug (?!) dans iOS10 / Swift3 / Xcode 8?

     if let url = URL(ssortingng: "http://devstreaming.apple.com/videos/wwdc/2016/102w0bsn0ge83qfv7za/102/hls_vod_mvp.m3u8"){ let playerItem = AVPlayerItem(url: url) let player = AVPlayer(playerItem: playerItem) let playerLayer = AVPlayerLayer(player: player) playerLayer.frame=CGRect(x: 10, y: 10, width: 300, height: 300) self.view.layer.addSublayer(playerLayer) } 

    ne fonctionne pas (rect vide …)

    cela marche:

     if let url = URL(ssortingng: "http://devstreaming.apple.com/videos/wwdc/2016/102w0bsn0ge83qfv7za/102/hls_vod_mvp.m3u8"){ let player = AVPlayer(url: url) let controller=AVPlayerViewController() controller.player=player controller.view.frame = self.view.frame self.view.addSubview(controller.view) self.addChildViewController(controller) player.play() } 

    Même URL …

    Swift 3:

     import UIKit import AVKit import AVFoundation class ViewController: UIViewController { @IBOutlet weak var viewPlay: UIView! var player : AVPlayer? override func viewDidLoad() { super.viewDidLoad() let url : URL = URL(ssortingng: "http://static.videokart.ir/clip/100/480.mp4")! player = AVPlayer(url: url) let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = self.viewPlay.bounds self.viewPlay.layer.addSublayer(playerLayer) } @IBAction func play(_ sender: Any) { player?.play() } @IBAction func stop(_ sender: Any) { player?.pause() } }