記錄一下:
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 urlplayerItem = [[AVPlayerItem alloc]initWithURL:self.outputUrl];
[player replaceCurrentItemWithPlayerItem:playerItem];//GPUImageMovie is initialized with AVPlayerItemmovieFile = [[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 pausedif (CMTimeCompare(pausedTime, player.currentItem.asset.duration) == 0) {[player play];} else {[player seekToTime:pausedTime];[player play];
}
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态