您的位置:首页 > 产品设计 > UI/UE

GPUImageMovie播放控制

2015-12-18 21:02 741 查看
记录一下:

Initial method to setup GPUImageMovie,
- (void)setupVideo
{
playerItem = [[AVPlayerItem alloc]initWithURL:self.recordSession.outputUrl];
player = [AVPlayer playerWithPlayerItem:playerItem];

movieFile = [[GPUImageMovie alloc] initWithPlayerItem:playerItem];

movieFile.runBenchmark = YES;
movieFile.playAtActualSpeed = YES;
[self.view sendSubviewToBack:self.videoView];

[movieFile addTarget:filter];
[filter addTarget:self.videoView];

[movieFile startProcessing];
movieRunning = YES;
dispatch_async(dispatch_get_main_queue(), ^{
self.playButton.hidden = YES;
});

player.rate = 1.0;
}


This method is called when user clicks on a filter button.
- (void)filterClicked:(UIButton *)button
{
// Set paused time. If player reaches end of the video, set pausedTime to 0.
if (CMTimeCompare(pausedTime, player.currentItem.asset.duration)) {
pausedTime = player.currentTime;
} else {
pausedTime = CMTimeMake(0, 600.0);
}
[self.videoView setBackgroundColor:[UIColor clearColor]];

[movieFile cancelProcessing];

switch (button.tag)
{
case 0:
filter = nil;
filter = [[GPUImageFilter alloc] init];
break;
case 1:
filter = nil;
filter = [[GPUImageColorInvertFilter alloc] init];
break;
case 2:
filter = nil;
filter = [[GPUImageEmbossFilter alloc] init];
break;
case 3:
filter = nil;
filter = [[GPUImageGrayscaleFilter alloc] init];
break;
default:
filter = nil;
filter = [[GPUImageFilter alloc] init];
break;
}

[self filterVideo];

}


After filter generation, video play resume is handled in this method.
- (void)filterVideo {

// AVPlayerItem is initialized with required url

playerItem = [[AVPlayerItem alloc]initWithURL:self.outputUrl];
[player replaceCurrentItemWithPlayerItem:playerItem];

//GPUImageMovie is initialized with AVPlayerItem

movieFile = [[GPUImageMovie alloc] initWithPlayerItem:playerItem];

movieFile.runBenchmark = YES;
movieFile.playAtActualSpeed = YES;

// Adding targets for movieFile and filter

[movieFile addTarget:filter];
[filter addTarget:self.videoView]; // self.videoView is my GPUImageView

[movieFile startProcessing];
movieRunning = YES;

dispatch_async(dispatch_get_main_queue(), ^{
self.playButton.hidden = YES;
});

// Player rate is set to 0 means player is paused

[player setRate:0.0];

// Seeking to the point where video was paused

if (CMTimeCompare(pausedTime, player.currentItem.asset.duration) == 0) {
[player play];

} else {
[player seekToTime:pausedTime];
[player play];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: