Ios AVPlayer不';我什么也没表现出来
我尝试嵌入来自youtube vimeo、dailymotion的不同视频 遗憾的是,目前除了我的containerView的背景色外,什么都没有显示:Ios AVPlayer不';我什么也没表现出来,ios,objective-c,youtube,avplayer,avplayerlayer,Ios,Objective C,Youtube,Avplayer,Avplayerlayer,我尝试嵌入来自youtube vimeo、dailymotion的不同视频 遗憾的是,目前除了我的containerView的背景色外,什么都没有显示: 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.yout
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错误为Null,并且我始终从状态中获取的唯一日志为:AVPlayerItemStatusUnknown。有什么想法吗
编辑1:
player = [AVPlayer playerWithURL:videoPathUrl];
AVcontroller = [[AVPlayerViewController alloc] init];
[AVcontroller.view setFrame:CGRectMake(0, 0,self.view.frame.size.width, self.view.frame.size.width)];
AVcontroller.player = player;
AVcontroller.showsPlaybackControls = FALSE;
[self addChildViewController:AVcontroller];
[self.view addSubview:AVcontroller.view];
[player play];
我将代码更改为:
@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];
@实现视频视图
区块视频*列表;
-(id)initWithBlock:(GFBlock*)块{
self=[super initWithBlock:block];
如果(自我){
if(block.values&&block.values.count){
list=(GFBlockVideo*)[block.values对象索引:0];
对于(int i=0;i您必须执行以下操作:
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];
希望这有帮助
附录:
playerItem = [AVPlayerItem playerItemWithURL:url];
player = [AVPlayer playerWithPlayerItem:playerItem];
player = [AVPlayer playerWithURL:url];
[player play];
[player pause];
player = nil;
它还取决于您的URL;如果如您所说,您有一个如下格式的URL:
那么您应该改用这个:
[NSURL urlWithString:item.url];
考虑到项
是您的对象,并且url
是对象类型的属性NSString使用PHImageManager的requestPlayerItemForVideo方法获取AVPlayerItem;这是播放AVAsset的最简单、可靠的方法,性能完美且一致
我在这里使用它:
适合我的AVPlayer实现:
player = [AVPlayer playerWithURL:videoPathUrl];
AVcontroller = [[AVPlayerViewController alloc] init];
[AVcontroller.view setFrame:CGRectMake(0, 0,self.view.frame.size.width, self.view.frame.size.width)];
AVcontroller.player = player;
AVcontroller.showsPlaybackControls = FALSE;
[self addChildViewController:AVcontroller];
[self.view addSubview:AVcontroller.view];
[player play];
MP4:
player = [AVPlayer playerWithURL:videoPathUrl];
AVcontroller = [[AVPlayerViewController alloc] init];
[AVcontroller.view setFrame:CGRectMake(0, 0,self.view.frame.size.width, self.view.frame.size.width)];
AVcontroller.player = player;
AVcontroller.showsPlaybackControls = FALSE;
[self addChildViewController:AVcontroller];
[self.view addSubview:AVcontroller.view];
[player play];
MP3:
playerItem = [AVPlayerItem playerItemWithURL:url];
player = [AVPlayer playerWithPlayerItem:playerItem];
player = [AVPlayer playerWithURL:url];
[player play];
[player pause];
player = nil;
要获取缩略形式的视频,请尝试此
AVAsset *asset = [AVAsset assetWithURL:videoPathUrl];
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
float tempTime = CMTimeGetSeconds(player.currentItem.duration);
CMTime time = CMTimeMake(tempTime, 1); // (1,1)
CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
UIImage *aThumbnail = [UIImage imageWithCGImage:imageRef];
用于停止视频
playerItem = [AVPlayerItem playerItemWithURL:url];
player = [AVPlayer playerWithPlayerItem:playerItem];
player = [AVPlayer playerWithURL:url];
[player play];
[player pause];
player = nil;
**设置视频的播放速率/速度**
[player play];
[player setRate:currentRate];
从头开始播放
[player seekToTime:kCMTimeZero];
[player play];
if ((player.rate != 0) && (player.error == nil)) {
// playing
}
用于检查视频是否正在播放
[player seekToTime:kCMTimeZero];
[player play];
if ((player.rate != 0) && (player.error == nil)) {
// playing
}
用于查找视频(在未来的一段时间内)
非常感谢您的回复,我编辑了我的答案,遗憾的是它仍然不起作用:/@Davis您是否尝试过改变背景颜色,看看它是否被完美加载,或者是否与帧编号一起玩,看看它是否以某种方式显示在屏幕外?至少您会发现一些问题/缩小问题范围。如果是在f中扮演一个帧问题,那么这将是一个很容易解决的问题,对吗?@Davis,它确实可以工作-但只适用于AVFoundation支持的格式,当然从uTube播放不起作用,必须使用uTube API来播放它的音乐。但是尝试使用另一个以格式结尾的链接,例如.mp3
,它可以播放。这不是一个令人满意的解决方案回答,但这似乎是事实。顺便说一句,我自己运行了代码。希望这些信息仍然有帮助。是的,似乎我必须使用youtube vimeo and Co.的UIWebView,谢谢你的帮助!原来我无法让AVPlayer
工作,因为我使用的是URLWithString
而不是fileURLWithPath
确保AVPlayerLayer帧的大小实际上是正确的,您不能通过AVPlayer播放此链接…您需要视频的直接链接…