Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVPlayer不';我什么也没表现出来_Ios_Objective C_Youtube_Avplayer_Avplayerlayer - Fatal编程技术网

Ios AVPlayer不';我什么也没表现出来

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

我尝试嵌入来自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.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播放此链接…您需要视频的直接链接…