2013-05-12 10 views
5

Ich versuche ein Video zu spielen usingso habe ich etwas Code von einem Tutorial, aber es wird nicht funktionieren.IOS AVPlayer wird kein Video abspielen

Hier ist der Code, den ich verwenden:

- (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]; 

} 

Ich weiß nicht, was falsch ist es nicht ny Fehler nicht geben es gibt nur schwarzen Bildschirm. Danke.

Antwort

35

Hey Jungs dank s1mon und matt für Ihre Hilfe

Hier ist der neue Code es jemand helfen könnten:

- (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]; 

} 

THXXXXXXXX Jungs: D

+0

Danke für den Austausch .. ** Es funktioniert perfekt ** – swiftBoy

+0

Ich habe versucht, den gleichen Code in meiner App zu implementieren, verwende ich Tableview, um alle Videos aus dem Server zu sehen, habe ich URL für Video, wenn ich dies weitergibt Zelle, als es nicht spielen, bitte helfe ... – ravinder521986

+0

Interessant, wie ich die Hintergrundfarbe auf rot genau wie Sie in Ihrem kommentierten Code eingestellt, um sicherzustellen, dass die Ebene auf dem Bildschirm sichtbar ist. – ninjaneer

3

Ich glaube, Sie vergessen haben, eine Instanz von AVPlayerItem in dieser Linie zu erstellen:

avPlayerItem =[avPlayerItem initWithAsset:avAsset]; 

Dieser sendet nur initWithAsset:-avPlayerItem (was wahrscheinlich gleich Null ist, wenn diese Methode aufgerufen wird). Versuchen Sie, es eine neue AVPlayerItem instanziiert, die Sie dann zu avPlayerItem zuweisen können, wie folgt aus:

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

Dies war auch ein Problem: D Dank: D –

12

Dies ist nicht das eigentliche Problem sein könnte, aber dieser Code ist sicher falsch:

[NSURL URLWithString:filePath] 

Zunächst alle, versuchen Sie nicht, mit einem Dateipfad zu beginnen; Beginnen Sie mit einer Datei-URL. Auf diese Weise ist keine Konvertierung erforderlich. Wenn Sie jedoch eine Konvertierung von einem Dateipfad zu einer URL durchführen müssen, verwenden Sie fileURLWithPath:isDirectory:. Eine Datei-URL ist eine spezielle Art von Tier und Sie müssen speziell nach einem Tier fragen, wenn Sie von einem Pfad konvertieren.

+0

dass Offenbar war das Problem: D Thankssssssssss: D –

+0

Das ist lächerlich. Sowohl "URLWithString" als auch "fileURLWithPath:" erstellen eine gültige 'NSURL'-Instanz. Warum das erste nicht mit AVPlayer funktioniert, ergibt für mich keinen Sinn. – Legoless

1

Für die Suche nach einem swift 2.0 version suchen, hier ist was für mich funktioniert hat. Prost.

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

    } 

}