Playing a video file from a server in Swift
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.
Mate Hegedus
Updated on July 09, 2022Comments
-
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 over 7 yearsMPMovieControlStyle' was deprecated in iOS 9.0: No longer supported
-
Hieu Dinh over 7 yearsMPMoviePlayerController was deprecated in iOS 10