2013-05-12 29 views
5

Tôi đang cố gắng phát một video usingso Tôi nhận được một số mã từ hướng dẫn nhưng nó sẽ không hoạt động.IOS AVPlayer sẽ không phát video

Dưới đây là đoạn code tôi sử dụng:

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

} 

Tôi không biết có chuyện gì nó không đưa ra lỗi ny nó chỉ mang đến cho màn hình màu đen. Cảm ơn.

Trả lời

35

Hey guys nhờ s1mon và mờ giúp đỡ của bạn

Dưới đây là các mã mới nó có thể giúp ai đó:

- (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 chàng trai: D

+0

Cảm ơn bạn đã chia sẻ .. ** Nó hoạt động hoàn hảo ** – swiftBoy

+0

Tôi đã thử triển khai cùng một mã trong ứng dụng của mình, tôi đang sử dụng Tableview để hiển thị tất cả các video đến từ máy chủ, tôi có url cho video, khi tôi chuyển nó tế bào, hơn là không chơi nó, xin vui lòng giúp đỡ ... – ravinder521986

+0

Thú vị như thế nào tôi đặt màu nền sang màu đỏ giống như bạn đã làm trong mã nhận xét của bạn để đảm bảo rằng lớp có thể nhìn thấy trên màn hình. – ninjaneer

3

Tôi nghĩ rằng bạn quên để tạo ra một thể hiện của AVPlayerItem trong dòng này:

avPlayerItem =[avPlayerItem initWithAsset:avAsset]; 

này chỉ gửi initWithAsset:-avPlayerItem (mà có lẽ con số không khi phương pháp này được gọi là). Hãy thử thay đổi nó để nhanh chóng một mới AVPlayerItem mà sau đó bạn có thể gán cho avPlayerItem, như thế này:

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

Đây cũng là một vấn đề: D Thanks: D –

12

Điều này có thể không phải là vấn đề thực tế, nhưng mã này chắc chắn là sai:

[NSURL URLWithString:filePath] 

Trước tất cả, cố gắng không để bắt đầu với một đường dẫn tập tin; bắt đầu bằng URL của tệp. Bằng cách đó, không cần chuyển đổi. Nhưng nếu bạn phải thực hiện chuyển đổi từ đường dẫn tệp đến URL, hãy sử dụng fileURLWithPath:isDirectory:. URL của tệp là một loại động vật đặc biệt và bạn phải yêu cầu một loại cụ thể khi bạn đang chuyển đổi từ một đường dẫn.

+0

Rõ ràng đó là vấn đề: D Thankssssssssss: D –

+0

Đây là lố bịch. Cả 'URLWithString' và' fileURLWithPath: 'tạo một cá thể' NSURL' hợp lệ. Tại sao trước đây không làm việc với 'AVPlayer' không có ý nghĩa với tôi. – Legoless

1

Đối với những người tìm kiếm một swift 2.0 version, đây là những gì làm việc cho tôi. Chúc mừng.

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

    } 

}