GPUImageMovie播放控制
2015-12-18 21:02
741 查看
记录一下:
Initial method to setup GPUImageMovie,
This method is called when user clicks on a filter button.
After filter generation, video play resume is handled in this method.
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]; } }
相关文章推荐
- datagrid分页
- 38 用break和continue改变流程 课后
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
- 17-1 UI高级可视化设计
- 15 UITabBarController、block高级(+UIMenuController_UIPasteBoard、MBProgressHud)
- 14-1 UITableView综合-模态viewController、单例(LED,Neon)
- 组件_ UIToolbar 与 组件_UISearchBar
- UITableView的使用
- 13 自定义cell、cell自适应高度、 多种类型的cell混合使用、 UITableViewController、model类
- <LeetCode OJ> 303. Range Sum Query - Immutable
- 12 UITableView编辑和移动 、UITableViewController、(+UIDatePicker)
- 11 UITableView表视图
- UIPickerView
- UIStoryboard和UIResponder
- UIImageView和UIImage
- 10 导航控制器UINavigationController、导航条navigationBar、界面通信(属性传值、代理传值、单例传值)
- UIAlertView与UIActionSheet
- 09 UIScrollView 、 UIPageControl
- 08-2 UISwitch and UIStepper
- IOS 开发学习笔记-基础 UI(十)九宫格布局,块动画,字典转模型,Xib使用