2016-10-27 183 views
4

这里我有,增加了视频层,以我所建立的IB UIView的方法:上述方法被调用在viewDidAppeariOS的10 - AVPlayer显示黑屏播放视频时

-(void)loadPlayer{ 
     self.asset = [AVAsset assetWithURL:url]; 

     AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:self.asset]; 

     self.player = [AVPlayer playerWithPlayerItem:item]; 
     self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player]; 
     self.playerLayer.contentsGravity = AVLayerVideoGravityResizeAspect; 
     self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone; 

     item.videoComposition = [AVVideoComposition videoCompositionWithPropertiesOfAsset:self.asset]; 

     [self.player pause]; 
     [self.player addObserver:self forKeyPath:@"status" options:0 context:nil]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.videoLayer.layer addSublayer:self.playerLayer]; 
     }); 
} 

的视图控制器,所以每次当前视图控制器加载时,视频应该开始播放。

在这里,我检查了球员的状态和发挥资源,如果准备:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
         change:(NSDictionary *)change context:(void *)context { 
    if (object == self.player && [keyPath isEqualToString:@"status"]) { 
     if (self.player.status == AVPlayerStatusReadyToPlay) { 
      [self.player play]; 
     } 
    } 
} 

的问题是,认为没有出现在视频开始播放,但只有音频,视频不。我得到的只是视频中的黑屏。音频播放效果很好,但由于某些原因,视频帧并不是未知的。

这只发生在iOS 10设备上,在iOS 9设备上运行时的相同代码就像魅力一样。视频按预期显示。

在AVPlayer等方面,iOS 10的AVFoundation框架中是否有任何更改?还是有什么,我在这里失踪,因为iOS 9发挥它很好。

如果有人遇到此问题,并且您已解决问题,请发布您的解决方案。这将有所帮助。

谢谢。

---- ****的解决方案---- ****

感谢您的答复!我刚刚发现,出于某种原因,在iOS 10中,viewDidLayoutSubviews未被调用,因为它在iOS 9中。实际上,我在viewDidLayoutSubviews方法中设置了播放器层的帧。由于它没有被调用,我无法在屏幕上看到玩家。我所做的是,在上面的loadPlayer方法中设置播放器图层的框架。它工作正常。希望这可以帮助某人。

这是代码,我从viewDidLayoutSubviews搬到我loadPlayer方法行和它的工作:

self.playerLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 

回答

0

感谢您的答复!我刚刚发现,出于某种原因,在iOS 10中,viewDidLayoutSubviews未被调用,因为它在iOS 9中。实际上,我在viewDidLayoutSubviews方法中设置了播放器层的帧。由于它没有被调用,我无法在屏幕上看到玩家。我所做的是,在上面的loadPlayer方法中设置播放器图层的框架。它工作正常。谢谢!希望这可以帮助某人。

编辑

这是代码,我从viewDidLayoutSubviews搬到我loadPlayer方法行和它的工作:

self.playerLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);

0

您需要保留您的AVPlayerItem即实例作为属性或实例变量。如果不保留,则对电影播放器​​的引用将丢失。 即使有一段时间,这种红宝石也发生在ARC中,请使其属性。

+0

我有同样的错误,但我不知道它会帮助你。道歉 –

+0

谢谢,Matloob。我在找到我的解决方案之前尝试将其更改为属性。没有工作。请尝试我的答案,看看它是否有效。 –

0

这里是我最近研究了AVPlayer

你可以尝试

XYAVMoviePlayer

享受你的一天:)

0

黑色是AVPlayerViewController的背景色。所以将AVPlayerViewController的背景颜色更改为超级视图颜色。所以黑色闪光灯将不可见。

self.view.backgroundColor =[UIColor whiteColor]; 
    avMoviePlayer.view.backgroundColor=[UIColor whiteColor]; 
    [self.view addSubview:avMoviePlayer.view]; 
+0

谢谢!我得到了解决方案。请检查我的答案。 –