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最简单,最好的方式,完美无瑕地执行。
我在这里使用它: