2013-05-12 15 views
5

Sto provando a riprodurre un video usingso Ho ottenuto del codice da un tutorial ma non funzionerà.IOS AVPlayer non riproduce video

Ecco il codice che uso:

- (void) viewDidAppear:(BOOL)animated 
{ 
    avAsset = [AVAsset assetWithURL:[NSURL URLWithString:filePath]]; 
    avPlayerItem =[avPlayerItem initWithAsset:avAsset]; 
    avPlayer = [AVPlayer playerWithPlayerItem:avPlayerItem]; 
    avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer]; 
    [avPlayerLayer setFrame:self.view.frame]; 
    [self.view.layer addSublayer:avPlayerLayer]; 
    [avPlayer seekToTime:kCMTimeZero]; 
    [avPlayer play]; 

} 

Non so che cosa c'è che non va non dà ny errori si dà solo schermo nero. Grazie.

risposta

35

Hey ragazzi, grazie s1mon e opaca per il vostro aiuto

Ecco il nuovo codice che potrebbe aiutare qualcuno:

- (void) viewDidAppear:(BOOL)animated 
{ 
    avAsset = [AVAsset assetWithURL:[NSURL fileURLWithPath:filePath]]; 
    avPlayerItem =[[AVPlayerItem alloc]initWithAsset:avAsset]; 
    avPlayer = [[AVPlayer alloc]initWithPlayerItem:avPlayerItem]; 
    avPlayerLayer =[AVPlayerLayer playerLayerWithPlayer:avPlayer]; 
    [avPlayerLayer setFrame:self.view.frame]; 
    [self.view.layer addSublayer:avPlayerLayer]; 
    //[avPlayerLayer setBackgroundColor:[[UIColor redColor]CGColor]]; 
    [avPlayer seekToTime:kCMTimeZero]; 
    [avPlayer play]; 

} 

ragazzi THXXXXXXXX: D

+0

Grazie per la condivisione .. ** Funziona perfettamente ** – swiftBoy

+0

Ho provato a implementare lo stesso codice nella mia app, sto usando Tableview per mostrare tutti i video provenienti dal server, ho url per il video, quando sto passando questo su cella, che non riprodurla, per favore aiuto ... – ravinder521986

+0

Interessante come ho impostato il colore di sfondo su rosso proprio come hai fatto nel tuo codice commentato per assicurarti che il livello sia visibile sullo schermo. – ninjaneer

3

penso che ti sei dimenticato di creare un'istanza di AVPlayerItem in questa linea:

avPlayerItem =[avPlayerItem initWithAsset:avAsset]; 

questo invia solo initWithAsset:-avPlayerItem (che è probabilmente pari a zero quando questo metodo viene chiamato). Provare a cambiare è creare un'istanza di un nuovo AVPlayerItem che è quindi possibile assegnare al avPlayerItem, in questo modo:

avPlayerItem = [[AVPlayerItem alloc] initWithAsset:avAsset]; 
+0

Anche questo è stato un problema: D Thanks: D –

12

questo potrebbe non essere il problema reale, ma questo codice è certamente sbagliato:

[NSURL URLWithString:filePath] 

Prima di tutto, prova a non iniziare con un percorso di file; inizia con un URL del file. In questo modo, non è necessaria alcuna conversione. Ma se lo deve eseguire una conversione da un percorso file a un URL, utilizzare fileURLWithPath:isDirectory:. Un URL di file è un tipo speciale di animale e devi chiederne uno specifico quando stai convertendo da un percorso.

+0

A quanto pare questo era il problema: D Thankssssssssss: D –

+0

Questo è ridicolo. Sia 'URLWithString' che' fileURLWithPath:' creano un'istanza 'NSURL' valida. Perché il primo non funzioni con "AVPlayer" non ha senso per me. – Legoless

1

Per chi cerca un swift 2.0 version, ecco cosa ha funzionato per me Saluti.

import Foundation 
import UIKit 
import AVKit 

class VideoViewController: AVPlayerViewController { 

    override func viewDidAppear(animated: Bool) { 
     self.setupVideoPlayerView() 
    } 
    private func setupVideoPlayerView() 
    { 
     let path = "HTTP_VIDEO_URL_HERE" 
     let nsURL = NSURL(string: path) 
     let avAsset = AVAsset(URL: nsURL!) 
     let avPlayerItem = AVPlayerItem(asset: avAsset) 

     let avPlayer = AVPlayer(playerItem: avPlayerItem) 
     let avPlayerLayer = AVPlayerLayer(layer: avPlayer) 

     avPlayerLayer.frame = self.view.frame 
     self.view.layer.addSublayer(avPlayerLayer) 

     self.player = avPlayer 

     self.player!.seekToTime(kCMTimeZero) 
     self.player!.play() 

    } 

}