ここで解決策があるしているものを以下のようなコード..です
しかし、まず(フィルタリングあなたが唯一のビデオを再生する必要がある最初の心のHTTAにものを保管してください)。その後、必要になったらそれも保存することができます。あなたのアプリに複数のフィルタがあるためです。だから毎回、それを保存する場合は、メモリの問題や読み込みの問題が発生します。だから最初に再生しているビデオにのみフィルタを適用するGPUImageのフィルタを使用して、それを保存することができます。両方のコードを以下に入れています:
// GPUMovieViewでビデオを再生するためのコード。
self.playerItem = AVPlayerItem(URL: NSURL(fileURLWithPath: filePath))
self.player = AVPlayer(playerItem: self.playerItem)
self.movieView = GPUImageView(frame: self.vview.frame)
self.player.replaceCurrentItemWithPlayerItem(self.playerItem)
self.movieFile = GPUImageMovie(playerItem: self.playerItem)
self.movieFile.runBenchmark = true
self.movieFile.playAtActualSpeed = true
self.movieFile.addTarget(self.filter)
self.filter.addTarget(self.movieView)
self.movieFile.startProcessing()
self.view.addSubview(self.movieView)
// self.view.sendSubviewToBack(self.movieView)
self.movieRunning = true
self.player.play()
そして、以下のようにそのビデオコードを保存する:
self.movieFile = GPUImageMovie(URL: NSURL(fileURLWithPath: filePath))
self.movieFile.runBenchmark = true
self.movieFile.playAtActualSpeed = false
self.movieFile.addTarget(self.filter)
let Data = NSData(contentsOfURL: NSURL(fileURLWithPath: filePath))
let anAsset = AVAsset(URL: NSURL(fileURLWithPath: filePath))
let vanasset = anAsset.tracksWithMediaType(AVMediaTypeVideo)[0]
print(vanasset.naturalSize)
let orientation : UIInterfaceOrientation = self.orientationForTrack(anAsset)
print(orientation)
if orientation == .Portrait
{
filter.setInputRotation(.RotateRight, atIndex: 0)
}
else if orientation == .LandscapeRight {
filter.setInputRotation(.Rotate180, atIndex: 0)
}
else if orientation == .PortraitUpsideDown {
filter.setInputRotation(.RotateLeft, atIndex: 0)
}
let videoAssetTrack = anAsset.tracksWithMediaType(AVMediaTypeVideo)[0]
var naturalSize = CGSize()
naturalSize = vanasset.naturalSize
self.movieWriter = GPUImageMovieWriter(movieURL: NSURL(fileURLWithPath:pathToMovie), size: p)
let input : GPUImageOutput!
input = self.filter
input.addTarget(self.movieWriter)
self.movieWriter.shouldPassthroughAudio = true
if anAsset.tracksWithMediaType(AVMediaTypeAudio).count > 0 {
self.movieFile.audioEncodingTarget = self.movieWriter
}
else
{
self.movieFile.audioEncodingTarget = nil
}
self.movieFile.enableSynchronizedEncodingUsingMovieWriter(self.movieWriter)
self.movieWriter.startRecording()
self.movieFile.startProcessing()
self.movieWriter.completionBlock =
{() -> Void in
self.movieWriter.finishRecording()
self.movieFile.cancelProcessing()
input.removeAllTargets()
self.movieFile.removeAllTargets()
}
コード上で試してみて、何か助けが必要な場合は私にお気軽に。
異なるフィルタがある場合、GPUImageフィルタの配列を作成します。 – JAck