0

When I try to play the video through the AVPlayer, the video loads for some time(the loading symbol appears at the top of the player) then suddenly it stops and the play icon with a crossover is shown. Don't know what is wrong? I can get the video informations but I can't make the video to play. I will show what I have done. Could anyone answer my question, help is much appreciated.

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {

var playerVC : AVPlayerViewController!
var playerItem : AVPlayerItem!
var player : AVPlayer!
var playerLayer: AVPlayerLayer!


@IBOutlet weak var videoURL: UITextField!
@IBOutlet weak var videoTitle: UILabel!
@IBAction func playVideo(sender: AnyObject) {

    YTVimeoExtractor.sharedExtractor().fetchVideoWithVimeoURL(self.videoURL.text!, withReferer: nil, completionHandler: {(video, error) -> Void in

        if video != nil {


            // https://vimeo.com/165891648
            self.videoTitle.text = video?.title

            print("hello: \(self.videoTitle.text)")

            let url = NSURL(string: self.videoURL.text!)


//                let url = NSURL.init(fileURLWithPath: self.videoURL.text!)

            self.playerItem = AVPlayerItem.init(URL: url!)
            self.player = AVPlayer.init(playerItem: self.playerItem)
            self.playerVC = AVPlayerViewController.init();
            self.playerVC.player = self.player;
            self.player.currentItem!.playbackLikelyToKeepUp

            self.presentViewController(self.playerVC, animated: true) { () -> Void in
                self.playerVC.player?.play()
            }

        }else {

            let alert = UIAlertController(title: error!.localizedDescription, message:  error!.localizedFailureReason, preferredStyle: UIAlertControllerStyle.Alert)
            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
            self.presentViewController(alert, animated: true, completion: nil)

        }

    })



}
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


}

override func viewDidAppear(animated: Bool) {

        }

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
   }    
}

This is the one I get on the simulator.

enter image description here

I used this https://github.com/lilfaf/YTVimeoExtractor one to do this sample project. You can try it out and let me know.

Praveen Kumar
  • 298
  • 2
  • 15

1 Answers1

1

I had the same issue and fix using this way:

      @IBAction func btnDownload_touchUpInside(_ sender: UIButton) {

        YTVimeoExtractor.shared().fetchVideo(withVimeoURL: self.videoURL.text!, withReferer: nil, completionHandler: {(video, error) -> Void in

            if video != nil {

                self.videoTitle.text = video?.title


                if let streamUrls = video?.streamURLs
                {
                    var streamURL: String?

                    var streams : [String:String] = [:]
                    for (key,value) in streamUrls {
                        streams["\(key)"] = "\(value)"
                        print("\(key) || \(value)")
                    }
                    if let large = streams["720"]
                    {
                        streamURL = large
                    }
                    else if let high = streams["480"]
                    {
                        streamURL = high
                    }
                    else if let medium = streams["360"]
                    {
                        streamURL = medium
                    }
                    else if let low = streams["270"]
                    {
                        streamURL = low
                    }

                    if let url = streamURL
                    {
                        Alamofire.download(url, to: { (temporaryURL, response) -> (destinationURL: URL, options: DownloadRequest.DownloadOptions) in
                            if let directoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] as? NSURL {

                                let fileName = response.suggestedFilename!
                                let finalPath = directoryURL.appendingPathComponent(fileName)
                                self.downloadedVideoPath = finalPath?.absoluteString
                                return (finalPath!, DownloadRequest.DownloadOptions(rawValue: 2))

                            }
                        }).downloadProgress(closure: { (progress) in
                            print("Progress: \(progress.fractionCompleted)")
                        })

                    }
                }
            }
        })
    }

    @IBAction func btnPlayOffLine_touchUpInside(_ sender: UIButton) {
        YTVimeoExtractor.shared().fetchVideo(withVimeoURL: self.videoURL.text!, withReferer: nil, completionHandler: {(video, error) -> Void in

            if video != nil {

                let videoURL = NSURL(string: self.downloadedVideoPath!)
                let player = AVPlayer(url: videoURL! as URL)
                let playerViewController = AVPlayerViewController()
                playerViewController.player = player
                self.present(playerViewController, animated: true) {
                    playerViewController.player!.play()

                }
            }
        })
    }

    @IBAction func btnPlayOnLine_touchUpInside(_ sender: UIButton) {


        YTVimeoExtractor.shared().fetchVideo(withVimeoURL: self.videoURL.text!, withReferer: nil, completionHandler: {(video, error) -> Void in

            if video != nil {

                self.videoTitle.text = video?.title


                if let streamUrls = video?.streamURLs
                {
                    var streamURL: String?

                    var streams : [String:String] = [:]
                    for (key,value) in streamUrls {
                        streams["\(key)"] = "\(value)"
                        print("\(key) || \(value)")
                    }
                    if let large = streams["720"]
                    {
                        streamURL = large
                    }
                    else if let high = streams["480"]
                    {
                        streamURL = high
                    }
                    else if let medium = streams["360"]
                    {
                        streamURL = medium
                    }
                    else if let low = streams["270"]
                    {
                        streamURL = low
                    }

                    if let url = streamURL
                    {
                        let videoURL = NSURL(string: url)
                        let player = AVPlayer(url: videoURL! as URL)
                        let playerViewController = AVPlayerViewController()
                        playerViewController.player = player
                        self.present(playerViewController, animated: true) {
                            playerViewController.player!.play()
                        }
                    }
                }
            }
        })
    }
}
AstroCB
  • 12,337
  • 20
  • 57
  • 73