我使用AVPlayer和GPUImageMovie控制电影文件的播放,同时应用过滤器如下:
NSURL *mediaURL = ...
AVPlayer *mainPlayer = [[AVPlayer alloc] init];
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:mediaUrl];
[mainPlayer replaceCurrentItemWithPlayerItem:playerItem];
GPUImageMovie *currentMovieFile = [[GPUImageMovie alloc] initWithPlayerItem:playerItem];
GPUImageFilter *filter = <a filter>;
GPUImageView *videoView = [[GPUImageView alloc] initWith...];
[currentMovieFile addTarget:filter];
[filter addTarget:videoView];
[currentMovieFile startProcessing];
[mainPlayer play];
一切正常,直到我暂停播放并更改过滤器:
[mainPlayer pause];
[filter removeTarget:videoView];
[currentMovieFile removeTarget:filter];
filter = <new filter>;
[currentMovieFile addTarget:filter];
[filter addTarget:videoView];
我需要在播放暂停时使用新过滤器更新videoView。我试图播放电影播放器并再次暂停,但有时它确实有效。我该如何解决这个问题?
答案 0 :(得分:0)
我找到了一个棘手的解决方案。
在播放器暂停时,如果您寻求的playerItem最小为CMTime(例如CMTime(value:1,timescale:1000)),则GPUImageFilters再次呈现。 您不必担心会进行预览更新,因为这确实很短。
请参阅我的代码。
let player: AVPlayer
let time: CMTime = player.currentTime()
let diffTime = CMTime(value: 1, timescale: time.timescale)
var seekTime = time + diffTime
if let endTime = player.duration {
if seekTime > endTime {
seekTime = endTime - diffTime
}
}
player.seek(to: seekTime, toleranceBefore: .zero, toleranceAfter: .zero) { success in
print("seek success \(checkTime), \(success)")
}