web-dev-qa-db-fra.com

Lecture d'un fichier vidéo à partir d'un serveur en Swift

J'essaie de lire une vidéo à partir d'un serveur à l'aide de Swift.

J'ai importé MediaPlayer framework, voici mon 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        
   }
}

Je ne reçois une boîte noire que lorsque je lance dans le simulateur, mais aucune vidéo n'est lue, peu importe où j'essaie de charger une vidéo.

MISE À JOUR

Voici le code actuel

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()

Ce code joue de manière intéressante ~ 2 secondes de vidéo avant de redevenir noir!

33
Mate Hegedus

MISE À JOUR 2019, Swift 4:

MPMovieControlStyle 'était obsolète dans iOS 9.0: utilisez AVPlayerViewController dans AVKit.

Donc, en suivant les conseils, changeons-le. La réponse originale de 2016 est ci-dessous.

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() }
    }
}

Résolu:

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

   }
}
56
Mate Hegedus
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()
        }


    }
15
shaiju mathew

Importez les bibliothèques:

import AVKit
import AVFoundation
import MediaPlayer
import AudioToolbox   

Définissez delegaete comme ceci

AVPlayerViewControllerDelegate

Wrtie joli code où vous voulez jouer comme une action de bouton:

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% de travail et de test

6
Mr.Javed Multani

J'avais juste les mêmes problèmes ..

MPMoviePlayerController arrête de jouer après 5 secondes - Swift

Le problème est que votre var moviePlayer est hors de portée. En le déclarant en dehors de viewDidLoad comme @ Victor-Sigler l'a fait ci-dessus, vous empêchez le problème d'écran noir de se produire.

2
Jace Sparks