Search code examples
iosswiftmpmovieplayercontroller

MPMoviePlayerController Stops Playing After 5 seconds - Swift


I have a video I'm trying to play using MPMoviePlayerController and it loads fine, but cuts out after 5 seconds. I found this post, but it isn't really applicable for swift.

MPMoviePlayerController stops playing the video after 5s

Here is my code.

import MediaPlayer




class ViewController: UIViewController  {


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



    var moviePlayer: MPMoviePlayerController?



let url = NSURL(string: "http://path/to/video.m3u8")

    moviePlayer = MPMoviePlayerController(contentURL: url)

    if let player = moviePlayer {

        player.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)
        player.view.sizeToFit()
        player.scalingMode = MPMovieScalingMode.None


        player.movieSourceType = MPMovieSourceType.Streaming
        //player.repeatMode = MPMovieRepeatMode.One


        player.play()

        self.view.addSubview(player.view)

        NSNotificationCenter.defaultCenter().addObserver(
            self,
            selector: "metadataUpdated",
            name: MPMoviePlayerTimedMetadataUpdatedNotification,
            object: nil)

    }

}

Solution

  • Could your moviePlayer be going out of scope? Have you tried making it a member variable?

    moviePlayer is a local variable of viewDidLoad, so once that function finishes, I don't see any reason why your player would not be deallocated.

    If you instead make it a variable of the class, its lifetime will be extended to match your class's lifetime.

    something like

    class ViewController: UIViewController {
    
    var player: MPMoviePlayerController?
    
        override func viewDidLoad() {
            // ...
            self.player = MPMoviePlayerController(contentURL: url) // won't go out of scope at end of viewDidLoad()
            // ...
        }