GPUImageMovie播放控制

记录一下:

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];
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值