I add gpuimage framework for video editing in my project, but it can't play video clean (as per screen shot) i checked example in gpuimage framework i.e. "SimpleVideoFileFilter", but it also have same issue , audio is clean , and save easily(movie writer code not show here) i checked different video format i.e. "mp4", "mov", "m4v" but have same issue
my code is below,
.h file
#import <UIKit/UIKit.h>
#import <GPUImage.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController : UIViewController<GPUImageMovieDelegate>
@end
and .m file is following
#import "ViewController.h"
@interface ViewController ()
{
GPUImageMovie *movieFile;
GPUImageOutput<GPUImageInput> *filter;
GPUImageMovieWriter *movieWriter;
}
@property (nonatomic,strong) GPUImageView *gpuImageViewObj;
@property (nonatomic,strong) AVPlayer *player;
@property (nonatomic,strong) AVPlayerItem *playerItem;
@end
@implementation ViewController
@synthesize gpuImageViewObj,player,playerItem;
- (void)viewDidLoad
{
[super viewDidLoad];
gpuImageViewObj = [[GPUImageView alloc] initWithFrame:CGRectMake(0, 0, 568, 320)];
[self.view addSubview:gpuImageViewObj];
[self try128];
}
-(void)try128{
//AVplayer
NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"Sample" withExtension:@"m4v"];
playerItem = [[AVPlayerItem alloc]initWithURL:sampleURL];
player = [[AVPlayer alloc ]initWithPlayerItem:playerItem];
[player play];
//GPUImage movie
movieFile = [[GPUImageMovie alloc] initWithPlayerItem:playerItem];
// movieFile.runBenchmark = YES;
movieFile.playAtActualSpeed = YES;
movieFile.delegate = self;
//filter
filter = [[GPUImageFilter alloc] init];
[filter forceProcessingAtSize:gpuImageViewObj.sizeInPixels];
[movieFile addTarget:filter];
[filter addTarget:gpuImageViewObj];
[movieFile startProcessing];
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didCompletePlayingMovie)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
}
#pragma mark - GPUImageMovieDelegate
-(void)didCompletePlayingMovie
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
[filter removeTarget:movieWriter];
// [movieFile endProcessing]; //not needed
NSLog(@"finish............");
}
#pragma mark -GPUImageMovieWriterDelegate
- (void)movieRecordingCompleted{
NSLog(@"movieRecordingCompleted called...");
// [movieWriter finishRecording];
}
- (void)movieRecordingFailedWithError:(NSError*)error{
NSLog(@"movieRecordingFailedWithError called...");
}
my o/p images
I'm guessing that you're trying to run this in the Simulator, not on an actual device. Movie playback has never worked correctly on the Simulator, and this is one artifact of that.
Instead, do your development on actual iOS hardware.