Search code examples
gpuimage

GPUImageMovie not playing video file when initWithPlayerItem


I am using GPUImageMovie with initWithPlayerItem and its not starting the movie file on startProcessing. It was working fine with initWithUrl but I need playback controls for the player as told in this thread. I am using the following code

-(void)loadVideo
{
    _playerItem = [[AVPlayerItem alloc]initWithURL:movieURL];
    _player = [AVPlayer playerWithPlayerItem:_playerItem];
    movieFile = [[GPUImageMovie alloc] initWithPlayerItem:_playerItem];

    movieFile.runBenchmark = YES;
    movieFile.playAtActualSpeed = YES;

    filter = [[TSFilter alloc] init];
    _movieView = [[GPUImageView alloc] initWithFrame:self.view.bounds];

    [self.view addSubview:_movieView];
    [self.view sendSubviewToBack:_movieView];

    [movieFile addTarget:filter];
    [filter addTarget:_movieView];

    _player.rate = 1.0;

    [movieFile startProcessing];

    [_player play];

}

Solution

  • And finally after spent a lot of time I found the solution to this silly problem. I came to that solution when I tried bundled file instead of a file in a document directory. I think it is the bug in AVPlayerItem:initWithUrl method that is not working with the NSUrl value from document directory. Let me explain it in detail

    When I get the Url of the file from document directory its value is

    /var/mobile/Applications/7B3229B0-D18E-405D-BBA0-E9D57F2842C4/Documents/SkyFall_clip.m4v

    but if I bundled this file and get the url from [NSBundle mainBundle] then its value is

    file:///var/mobile/Applications/7B3229B0-D18E-405D-BBA0-E9D57F2842C4/Documents/SkyFall_clip.m4v

    So I found that "file://" keyword is missing in the url for the document directory file. So i just append "file://" in the beginning of the url and it starts working. Although this should not be the case because both are the valid NSUrl and working for other classes like UIImage.

    Note: Implement the string append operation is such a way that it append only if it is missing.