Playing a video file from a server in Swift

70,681

Solution 1

UPDATE 2019, Swift 4:

MPMovieControlStyle' was deprecated in iOS 9.0: Use AVPlayerViewController in AVKit.

So, following the advice, let's change it. Original answer from 2016 is below.

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let url = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")!
        
        playVideo(url: url)
    }
    
    func playVideo(url: URL) {
        let player = AVPlayer(url: url)
        
        let vc = AVPlayerViewController()
        vc.player = player
        
        self.present(vc, animated: true) { vc.player?.play() }
    }
}

The original answer:

import UIKit
import MediaPlayer

class VideoViewController: UIViewController {

   var moviePlayer:MPMoviePlayerController!

   override func viewDidLoad() {
      super.viewDidLoad()

      let url:NSURL = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")

      moviePlayer = MPMoviePlayerController(contentURL: url)
      moviePlayer.view.frame = CGRect(x: 20, y: 100, width: 200, height: 150)

      self.view.addSubview(moviePlayer.view)
      moviePlayer.fullscreen = true

      moviePlayer.controlStyle = MPMovieControlStyle.Embedded

   }
}

Solution 2

import AVKit
import AVFoundation

class VideoController: UIViewController

override func viewDidLoad()

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


    }

Solution 3

Import the libraries:

import AVKit
import AVFoundation
import MediaPlayer
import AudioToolbox   

Set delegaete like this

AVPlayerViewControllerDelegate

Wrtie pretty code where you want to play like button action:

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

100% working and test

Solution 4

I just was having the same issues..

MPMoviePlayerController Stops Playing After 5 seconds - Swift

The issue is your var moviePlayer is going out of scope. By declaring it outside of viewDidLoad like @Victor-Sigler did above, you prevent the black screen issue from happening.

Share:
70,681
Mate Hegedus
Author by

Mate Hegedus

Updated on July 09, 2022

Comments

  • Mate Hegedus
    Mate Hegedus almost 2 years

    I'm trying to play a video from a server using Swift.

    I have imported MediaPlayer framework, here is my code:

    import UIKit
    import MediaPlayer
    
    class VideoViewController: UIViewController {
    
       override func viewDidLoad() {
            super.viewDidLoad()
    
            var url:NSURL = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")        
            var moviePlayer = MPMoviePlayerController(contentURL: url)
    
            moviePlayer.view.frame = CGRect(x: 20, y: 100, width: 200, height: 150)        
            self.view.addSubview(moviePlayer.view)
    
            moviePlayer.fullscreen = true        
            moviePlayer.controlStyle = MPMovieControlStyle.Embedded        
       }
    }
    

    I only get a black box when I run in the simulator but no video is playing no matter where I try to load a video from.

    UPDATE

    Here is the current code

    var url:NSURL = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")
    
    var moviePlayer = MPMoviePlayerController(contentURL: url)
    
    moviePlayer.view.frame = CGRect(x: 20, y: 100, width: 200, height: 150)        
    moviePlayer.movieSourceType = MPMovieSourceType.File
    
    self.view.addSubview(moviePlayer.view)        
    moviePlayer.prepareToPlay()
    moviePlayer.play()
    

    This code interestingly plays ~2 seconds of video before going black again!

  • Mohammad Razipour
    Mohammad Razipour over 7 years
    MPMovieControlStyle' was deprecated in iOS 9.0: No longer supported
  • Hieu Dinh
    Hieu Dinh over 7 years
    MPMoviePlayerController was deprecated in iOS 10