iOS GPUImage研究序三:GPUImageMovie简介

来源:互联网 发布:java教程pdf完整版 编辑:程序博客网 时间:2024/06/13 19:13

前言:

GPUImageMovie 不支持在线视频播放--换而言之,他仅仅支持本地视频文件播放、因此显得很鸡肋。

其大概使用方法如下:

初始化 movie

NSURL *sampleURL = [[NSBundle mainBundle]URLForResource:@"mv" withExtension:@"MPG" subdirectory:nil];movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];

runBenchmark

这使当前视频处于基准测试的模式,记录并输出瞬时和平均帧时间到控制台 每隔一段时间打印: Current frame time : 51.256001 ms,直到播放或加滤镜等操作完毕
movieFile.runBenchmark = NO;

//是否重复播放movieFile.shouldRepeat = YES;控制GPUImageView预览视频时的速度是否要保持真实的速度。如果设为NO,则会将视频的所有帧无间隔渲染,导致速度非常快。设为YES,则会根据视频本身时长计算出每帧的时间间隔,然后每渲染一帧,就sleep一个时间间隔,从而达到正常的播放速度。movieFile.playAtActualSpeed = YES;

添加显示:

GPUImageView *filterView = [[GPUImageView alloc]initWithFrame:self.view.frame];[self.view addSubview: filterView];[movieFile addTarget:filterView];

开始处理并播放

 视频处理后输出到 GPUImageView 预览时不支持播放声音,需要自行添加声音播放功能 [movieFile startProcessing];

代理:

@protocol GPUImageMovieDelegate <NSObject>- (void)didCompletePlayingMovie;@end


所有代码:

#import "ViewController.h"#import "GPUImage.h"#import <AssetsLibrary/ALAssetsLibrary.h>@interface ViewController ()<GPUImageMovieDelegate>@end@implementation ViewController{    GPUImageMovie *movieFile;    GPUImageOutput<GPUImageInput> *filter;}- (void)viewDidLoad {    [super viewDidLoad];    GPUImageView *filterView = [[GPUImageView alloc] initWithFrame:self.view.frame];    [self.view addSubview: filterView];    // 播放    NSURL *sampleURL = [[NSBundle mainBundle]URLForResource:@"mv" withExtension:@"MPG" subdirectory:nil];//    NSURL *sampleURL = [NSURL URLWithString:@"http://bos.nj.bpc.baidu.com/tieba-smallvideo/11772_3c435014fb2dd9a5fd56a57cc369f6a0.mp4"];    movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];    /**     *  This enables the benchmarking mode, which logs out instantaneous and average frame times to the console     *     *  这使当前视频处于基准测试的模式,记录并输出瞬时和平均帧时间到控制台     *     *  每隔一段时间打印: Current frame time : 51.256001 ms,直到播放或加滤镜等操作完毕     */    movieFile.runBenchmark = NO;    //是否重复播放    movieFile.shouldRepeat = YES;    /**     *  控制GPUImageView预览视频时的速度是否要保持真实的速度。     *  如果设为NO,则会将视频的所有帧无间隔渲染,导致速度非常快。     *  设为YES,则会根据视频本身时长计算出每帧的时间间隔,然后每渲染一帧,就sleep一个时间间隔,从而达到正常的播放速度。     */    movieFile.playAtActualSpeed = YES;    //    GPUImageFilter* progressFilter = [[GPUImageFilter alloc] init];    //    [movieFile addTarget:progressFilter];    [movieFile addTarget:filterView];    //    [movieWriter startRecording];    /**     *  视频处理后输出到 GPUImageView 预览时不支持播放声音,需要自行添加声音播放功能     *     *  开始处理并播放...     */    [movieFile startProcessing];}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{    return (interfaceOrientation == UIInterfaceOrientationPortrait);}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];}@end
0 0