我正在使用带有initWithPlayerItem的GPUImageMovie,而不是在startProcessing上启动电影文件。它与initWithUrl工作正常,但我需要在this线程中告知播放器的播放控件。我使用以下代码
-(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];
}
答案 0 :(得分:2)
最后我花了很多时间才找到解决这个愚蠢问题的方法。当我尝试使用捆绑文件而不是文档目录中的文件时,我找到了解决方案。我认为这是AVPlayerItem中的错误:initWithUrl方法不能使用文档目录中的NSUrl值。让我详细解释一下
当我从文档目录中获取文件的Url时,其值为
/var/mobile/Applications/7B3229B0-D18E-405D-BBA0-E9D57F2842C4/Documents/SkyFall_clip.m4v
但是如果我捆绑了这个文件并从[NSBundle mainBundle]获取了网址,那么它的值是
文件:///var/mobile/Applications/7B3229B0-D18E-405D-BBA0-E9D57F2842C4/Documents/SkyFall_clip.m4v
所以我发现" file://"文档目录文件的URL中缺少关键字。所以我只是追加" file://"在网址的开头,它开始工作。虽然情况并非如此,因为两者都是有效的NSUrl,并且适用于其他类,如UIImage。
注意:实现字符串追加操作只有在缺少时才附加。