AVPlayer Video Blank but Hear Sound
我正在从MPMoviePlayerController切换到AVPlayer,因为我需要对视频交换进行更精细的控制。我正在使用MPMoviePlayerController播放的.mov文件运行良好,但是切换到AVPlayer后,我听到了视频中的音频,但是视频只是显示了我添加了AVPlayerLayer的视图背景。这是初始化AVPlayer。
的方法
1 2 3 4 5
| self.player = [[AVPlayer alloc] initWithURL:video];
AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
playerLayer.frame = self.playerContainer.bounds;
[self.playerContainer.layer addSublayer:playerLayer]; |
然后稍后我只发布一个。
在播放视频时,我听到了音频,但看不到视频。我也尝试将zPosition设置为不走运。
1
| playerLayer.zPosition = 1; |
发现这是使用AutoLayout的结果。在viewDidLoad中,self.playerContainer.bounds是CGRectZero。
我必须在viewDidAppear中分配playerLayer框架以匹配playerContainer。
- 我不使用自动版式,但存在相同的问题。 stackoverflow.com/questions/16872193/…您如何解决?
-
对我来说,视频是CGRectZero,不可见。实际上是在0.0x0.0屏幕上播放。
-
@Gary我有一个完全相同的问题,但是在MacOS项目中-我听到声音但没有视频,只是黑色的窗口-这是我的总代码:let fileURL = URL(string:"http://commondatastorage.googleapis.com/gtv-videos-bucket/s??ample/BigBuckBunny.m??p4") let avAsset = AVURLAsset(url: fileURL!, options: nil) let playerItem = AVPlayerItem(asset: avAsset) videoPlayer = AVPlayer(playerItem: playerItem) let playerView = self.playerView playerView?.player = videoPlayer videoPlayer.play()我需要添加一些内容才能显示视频吗?
由于我们使用AVPlayerLayer(CALayer的子类),因此需要设置框架
1 2 3 4 5
| - (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.avPlayerLayer.frame = self.movieContainerView.bounds;
} |
确保您播放视频的声明:
这样从主调度队列中调用
(Swift 3):
1 2 3
| DispatchQueue.main.async {
self.player.play()
} |