AVPlayer不显示任何东西

我尝试从youtube vimeo,dailymotion中embedded不同的video。

可悲的是在这一刻没有任何东西显示,除了我的containerView的backgroundcolor:

UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0, 320.0f, 200.0f)]; //item.url is my url which i get fro my webserver, it looks like http://www.youtube.com/watch?v=zPP6lXaL7KA&feature=youtube_gdata_player AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:item.url]]; AVPlayer *avPlayer = [AVPlayer playerWithPlayerItem:playerItem]; NSLog(@"%@",playerItem); AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer]; avPlayerLayer.frame = self.frame; [containerView.layer addSublayer:avPlayerLayer]; [self addSubview:containerView]; [avPlayer play]; if (avPlayer.status == AVPlayerStatusReadyToPlay) { //[playingLbl setText:@"Playing Audio"]; NSLog(@"It works"); } else if (avPlayer.status == AVPlayerStatusFailed) { // something went wrong. player.error should contain some information NSLog(@"Not works"); NSLog(@"%@",avPlayer.error); } else if (avPlayer.status == AVPlayerItemStatusUnknown) { NSLog(@"AVPlayer Unknown"); } containerView.backgroundColor = [UIColor blueColor]; NSLog(@"error: %@", avPlayer.error); NSLog(@"AVPlayer: %@", avPlayer); 

AVPlayer错误是空的,唯一的日志我总是从状态是:AVPlayerItemStatusUnknown。 有任何想法吗?

编辑1:

我把我的代码改为:

 @implementation VideoView BlockVideo *list; - (id)initWithBlock:(GFBlock *)block { self = [super initWithBlock:block]; if (self) { if (block.values && block.values.count) { list = (GFBlockVideo *) [block.values objectAtIndex:0]; for (int i=0; i<list.videos.count; ++i) { GFBlockVideoItem *item = list.videos[i]; UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0, 320.0f, 200.0f)]; //Like i said item.url = http://www.youtube.com/watch?v=zPP6lXaL7KA&feature=youtube_gdata_player //@property (nonatomic, strong) NSString* url; AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:item.url]]; AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:asset]; AVPlayer *avPlayer = [AVPlayer playerWithPlayerItem:playerItem]; AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer]; avPlayerLayer.frame = containerView.frame; [containerView.layer addSublayer:avPlayerLayer]; [self addSubview:containerView]; [avPlayer play]; containerView.backgroundColor = [UIColor blueColor]; 

可悲的是我唯一能看到的是蓝色的containerView:/

在这里输入图像说明

我认为问题不是AVPlayer自己,但框架和图层也许….

你必须做到以下几点:

 AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:item.url]]; AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:asset]; AVPlayer *avPlayer = [AVPlayer playerWithPlayerItem:playerItem]; AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer]; avPlayerLayer.frame = self.frame; [containerView.layer addSublayer:avPlayerLayer]; [self addSubview:containerView]; [avPlayer play]; 

希望这可以帮助。

附录:

这也取决于你的url; 如果如你所说,你有这样的格式:

http://www.youtube.com/watch?v=zPP6lXaL7KA&feature=youtube_gdata_player

那么你应该用这个代替:

 [NSURL urlWithString:item.url]; 

鉴于该item是您的对象,并且url是对象typesNSString的属性。

使用PHImageManager的requestPlayerItemForVideo方法获取AVPlayerItem; 这是玩AVAsset最简单,最好的方式,完美无瑕地执行。

我在这里使用它:

https://youtu.be/7QlaO7WxjGg