2013-05-28 18 views
14

Tôi đang chuyển đổi từ MPMoviePlayerController sang AVPlayer khi tôi cần kiểm soát chi tiết hơn về trao đổi video. Các tập tin .mov tôi đã chơi với MPMoviePlayerController chơi tốt, nhưng sau khi chuyển sang AVPlayer Tôi nghe thấy âm thanh từ video, nhưng video chỉ hiển thị nền xem mà tôi đã thêm AVPlayerLayer vào. Đây là cách tôi đang khởi tạo AVPlayer.Video AVPlayer Trống nhưng Nghe Âm thanh

self.player = [[AVPlayer alloc] initWithURL:video]; 

AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player]; 
playerLayer.frame = self.playerContainer.bounds; 
[self.playerContainer.layer addSublayer:playerLayer]; 

Sau đó, tôi mới phát hành a.

[self.player play]; 

Khi phát video tôi nghe thấy âm thanh, nhưng không thấy video. Tôi cũng đã thử đặt zPosition thành không may mắn.

playerLayer.zPosition = 1; 

Trả lời

7

Phát hiện ra nó là kết quả của việc sử dụng AutoLayout. Trong số viewDidLoad, self.playerContainer.boundsCGRectZero.

Tôi phải gán khung playerLayer trong viewDidAppear để khớp với playerContainer.

+1

Tôi không sử dụng tự động trả lời nhưng có cùng vấn đề. http://stackoverflow.com/questions/16872193/avqueueplayer-shows-black-screen-when-called-from-app-delegate Bạn có thể giải quyết nó như thế nào? – Burak

+0

Đối với tôi, video là CGRectZero và không hiển thị. Nó đã thực sự chơi, chỉ trong một màn hình 0.0x0.0. –

+0

@Gary Tôi có cùng một vấn đề nhưng với dự án MacOS - tôi nghe thấy âm thanh nhưng không có video chỉ là cửa sổ đen - đây là tổng số mã của tôi: 'let fileURL = URL (string:" http://commondatastorage.googleapis.com/gtv -videos-bucket/sample/BigBuckBunny.mp4 ") để avAsset = AVURLAsset (url: fileURL !, options: nil) cho phép playerItem = AVPlayerItem (nội dung: avAsset) videoPlayer = AVPlayer (playerItem: playerItem) cho phép playerView = self.playerView playerView? .player = videoPlayer videoPlayer.play() 'Bất kỳ ý tưởng nào tôi cần thêm vào điều này để hiển thị Video? –

1

Kể từ khi chúng tôi sử dụng AVPlayerLayer (một lớp con của CALayer), chúng ta cần phải thiết lập các khung

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 

    self.avPlayerLayer.frame = self.movieContainerView.bounds; 
} 
0

Hãy chắc chắn rằng bạn tuyên bố rằng phát video:

[self.player play] 

được gọi từ công văn chính hàng đợi như thế này (Swift 3):

DispatchQueue.main.async { 
    self.player.play() 
} 
+0

Xin lỗi, nó không giúp tôi. –