jmplayer苹果app怎么用_使用AVPlayer在iphone上播放许多不同的视频

我正在使用AVFoundation为iOS定制视频播放器.我们的想法是能够通过手势切换到不同的视频(点按,滑动等等).现在玩家在模拟器上完美运行,但是当我在实际设备上测试时,在3或4次滑动后视图变为空白.我甚至为我的播放器创建了播放控件,当视图变为空白时,这些控件正确加载但什么都不做.有什么想法吗?

这是播放器的初始化

- (id)initWithContentURL:(NSString *)aContentURL delegate:(id)aDelegate {

self = [super initWithNibName:@"NoCashMoviePlayer" bundle:nil];

if (self == nil)

return nil;

delegate = aDelegate;

systemPath = [aContentURL retain];

contentURL = [[NSURL alloc]initFileURLWithPath:systemPath];

asset = [AVURLAsset URLAssetWithURL:contentURL options:nil];

playerItem = [AVPlayerItem playerItemWithAsset:asset];

isPaused = false;

controlsHidden = false;

self.player = [[AVPlayer playerWithPlayerItem:playerItem] retain];

duration = self.player.currentItem.asset.duration;

return self;

}

这是播放视频的代码:

-(void)playMovie{

UITapGestureRecognizer *tapRecon = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(toggleControls:)];

[tapRecon setNumberOfTapsRequired:2];

[self.movieContainer addGestureRecognizer:tapRecon];

[tapRecon release];

NSLog(@"Playing item: %@",contentURL);

playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];

[movieContainer.layer addSublayer:playerLayer];

playerLayer.frame = movieContainer.layer.bounds;

playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;

self.seeker.alpha = 1.0;

[self.view addSubview:movieContainer];

[self.movieContainer addSubview:controls];

[self setSlider];

[player play];

player.actionAtItemEnd = AVPlayerActionAtItemEndNone;

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(playerItemDidReachEnd:)

name:AVPlayerItemDidPlayToEndTimeNotification

object:[player currentItem]];

}

选择要播放的剪辑的代码:

-(void)viewSelect: (double) curTime{

self.myView.backgroundColor = [UIColor blackColor];

UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeFrom:)];

swipeRecognizer.direction = UISwipeGestureRecognizerDirectionRight;

[self.myView addGestureRecognizer:swipeRecognizer];

[swipeRecognizer release];

UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeFromLeft:)];

swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;

[self.myView addGestureRecognizer:leftRecognizer];

[leftRecognizer release];

if(isMain){

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationTransitionFlipFromLeft animations:^{

self.myView.alpha = 1.0;

moviePlayer = [[NoCashMoviePlayer alloc]initWithContentURL:[self movieURL:vidIndex] delegate:self];

self.moviePlayer.view.frame = self.myView.bounds;

self.moviePlayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;

[self.myView addSubview:moviePlayer.view];

}completion:^(BOOL finished) {

[self.moviePlayer.player seekToTime:CMTimeMake(curTime, 1)];

[self.moviePlayer playMovie];

}];

}else{

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationTransitionFlipFromLeft animations:^{

self.otherView.alpha = 1.0;

moviePlayer = [[NoCashMoviePlayer alloc]initWithContentURL:[self movieURL:vidIndex] delegate:self];

self.moviePlayer.view.frame = self.otherView.bounds;

self.moviePlayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;

[self.otherView addSubview:moviePlayer.view];

}completion:^(BOOL finished) {

[self.moviePlayer.player seekToTime:CMTimeMake(curTime, 1)];

[self.moviePlayer playMovie];

}];

}

}

最后一个手势动作:

- (void)handleSwipeFromLeft:(UISwipeGestureRecognizer *)recognizer {

double elapsedTime = 0.0;

if(vidIndex==0){

vidIndex = 3;

}else vidIndex = vidIndex --;

elapsedTime = [self.moviePlayer currentTimeInSeconds];

[self.moviePlayer stopMovie];

isMain = !isMain;

[self viewSelect: elapsedTime];

}

编辑:尝试使用不同的AVPlayerLayers为每个视频文件,相同的情况,在模拟器中工作,而不是在iPad上.

编辑2:我运行仪器分析核心动画性能,当视频正在播放时,它显示大约30 fps的帧速率,当播放器空白时,它一直下降到1或2 fps.这可能是可能的,但仍然,如果它有助于提供更多的光…..

编辑3:好的,我终于到了某个地方,我知道问题是什么,我有一个核心动画内存泄漏,在模拟器中它“工作”,因为计算机比iPad有更多的内存,但自iPad内存非常有限,它很快停止工作.如果有人对Core Animation漏洞有任何建议,那将会非常受欢迎.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值