2016-04-26 15 views
10

Così ho cercato una soluzione ora quando MPMoviePlayerController è diventato deprecato. il mio codice attuale funziona bene:MPMoviePlayerController deprecato, e ora?

moviePlayer = MPMoviePlayerController(contentURL: receivedURL) 
    moviePlayer!.movieSourceType = MPMovieSourceType.Unknown 
    moviePlayer!.view.frame = view.bounds 
    moviePlayer!.scalingMode = MPMovieScalingMode.AspectFill 
    moviePlayer!.controlStyle = MPMovieControlStyle.None 
    moviePlayer!.shouldAutoplay = true 

    view.addSubview((moviePlayer?.view)!) 
    moviePlayer?.setFullscreen(true, animated: true) 
    moviePlayer!.play() 

ho registrare un video, e una volta che ho finito la registrazione, verrà riprodotto con il codice di cui sopra in una nuova visualizzazione. Ma come ho capito MPMoviePlayerController è deprecato in iOS9 e non riesco a trovare alcuna soluzione che funzioni come il codice sopra. Capisco che ho bisogno di utilizzare AVPlayer e AVPlayerViewController.

Ho provato this e molte altre soluzioni simili. Ma semplicemente non funzionerà come voglio nel codice qui sopra.

Voglio solo registrare un video e farlo riprodurre in una nuova vista, esattamente come lo snapchat.

Please help me

aggiunte informazioni COMPLEMENTARI:

Così, quando provo a risolvere il problema con this (la risposta accettata) o this solution (AVPlayer), la vista è vuota. non viene mostrato nulla

var player:AVPlayer! 
    let avPlayerLayer:AVPlayerLayer = AVPlayerLayer(player: player) 
    avPlayerLayer.frame = CGRectMake(50,50,100,100) 
    self.view.layer.addSublayer(avPlayerLayer) 
    player = AVPlayer(URL: receivedURL) 
    player.play() 

E se provo con la AVPlayerViewController che ho dovuto modificare:

let player = AVPlayer(URL: receivedURL) 
    let playerViewController = AVPlayerViewController() 
    playerViewController.player = player 
    dispatch_async(dispatch_get_main_queue(), { 
     self.presentViewController(playerViewController, animated: true) { 
      playerViewController.player?.play() 
     } 
    }) 

questo accade, dove nulla viene mostrato. enter image description here

+1

La risposta collegata sembra la soluzione. Espandi su "Ma semplicemente non funzionerà come voglio nel codice sopra." Qual è esattamente il problema? – Curmudgeonlybumbly

+0

Quali problemi si stanno verificando quando si sta tentando di utilizzare 'AVPlayerViewController'? La tua domanda non ha senso. Cosa "non funziona?" – JAL

+0

Ok modifico la domanda e aggiungo un'immagine :) ma con la risposta che ho collegato, ci sono due problemi il primo è che non viene riprodotto nulla, la vista è completamente vuota l'altro problema è che un video player è mostrato ma è grigio. Prenderò le schermate di stampa e le aggiungerò con il codice –

risposta

6
var player:AVPlayer! 
let avPlayerLayer:AVPlayerLayer = AVPlayerLayer(player: player) 
avPlayerLayer.frame = CGRect(x:50,y:50,width:100,height:100) 
self.view.layer.addSublayer(avPlayerLayer) 
player = AVPlayer(url: receivedURL) 
player.play() 

qui si inizializza il lettore dopo averlo aggiunto a AVPlayerLayer. provare in questo modo:

let player = AVPlayer(url: receivedURL) 
let avPlayerLayer:AVPlayerLayer = AVPlayerLayer(player: player) 
avPlayerLayer.frame = CGRect(x:50,y:50,width:100,height:100) 
self.view.layer.addSublayer(avPlayerLayer) 
player.play() 
+0

ancora solo una vista vuota:/ –

+0

potrebbe essersi verificato un errore nell'url del video. Ho provato questo - http://clips.vorwaerts-gmbh.de/VfE_html5.mp4 - e tutto funziona come previsto. ricorda che se l'URL del tuo video non è https: //, devi configurare i criteri di sicurezza del trasporto dell'app. –

+0

una domanda stupida, dovrei farlo nel mio viewdidload? come: Override func viewDidLoad() { super.viewDidLoad() lasciare URLPath: String = "http://clips.vorwaerts-gmbh.de/VfE_html5.mp4" lasciare url: NSURL = NSURL (stringa: URLPath)! giocatore let = AVPlayer (URL: url) lasciare avPlayerLayer: AVPlayerLayer = AVPlayerLayer (giocatore: giocatore) avPlayerLayer.frame = CGRectMake (50,50,100,100) self.view.layer.addSublayer (avPlayerLayer) player.play () } –