ios - GPU Image2 音频问题

标签 ios swift3 gpuimage

我在使用 GPUImage2 过滤视频时收不到音频。请帮我。 提前致谢。

movie = try MovieInput(url:url, playAtActualSpeed:false)

let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! as String
let uuid1 = CFUUIDCreateString(nil, CFUUIDCreate(nil)) as NSString?

localPath = (documentDirectory as NSString).appendingPathComponent(String(format: "%@.mp4", uuid1!)) as NSString!

print("Filtered Video: %@", localPath)
let fileURL = URL.init(fileURLWithPath: localPath as String)

do {
    try FileManager.default.removeItem(at: fileURL)
} catch {
}

movieOutput = try MovieOutput(URL:fileURL, size: Size(width: 720, height: 1280), liveVideo: true)

Filter4 = ColorMatrixFilter()
Filter4.overriddenOutputRotation = Rotation.rotateClockwiseAndFlipVertically

movie --> Filter4 --> renderView

movie.runBenchmark = true
movie.start()

Filter4 --> movieOutput

movieOutput!.startRecording()

最佳答案

此功能未在 GPUImage2 框架中实现。正如您在 MovieInput 类源代码中看到的那样,它标记为 TODO:

public init(asset:AVAsset, playAtActualSpeed:Bool = false, loop:Bool = false) throws {
    self.asset = asset
    self.playAtActualSpeed = playAtActualSpeed
    self.loop = loop
    self.yuvConversionShader = crashOnShaderCompileFailure("MovieInput"){try sharedImageProcessingContext.programForVertexShader(defaultVertexShaderForInputs(2), fragmentShader:YUVConversionFullRangeFragmentShader)}

    assetReader = try AVAssetReader(asset:self.asset)

    let outputSettings:[String:AnyObject] = [(kCVPixelBufferPixelFormatTypeKey as String):NSNumber(value:Int32(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange))]
    let readerVideoTrackOutput = AVAssetReaderTrackOutput(track:self.asset.tracks(withMediaType: AVMediaTypeVideo)[0], outputSettings:outputSettings)
    readerVideoTrackOutput.alwaysCopiesSampleData = false
    assetReader.add(readerVideoTrackOutput)
    // TODO: Audio here
}

您需要检查 Camera 类和 audioEncodingTarget 属性。这是来自 SimpleVideoRecorder 示例的代码片段:

movieOutput = try MovieOutput(URL:fileURL, size:Size(width:480, height:640), liveVideo:true)
camera.audioEncodingTarget = movieOutput

如您所见,您应该设置音频目标,并且只有在 MovieOutput 类之后才会起作用。但是 MovieInput 类不支持 AudioEncodingTarget

关于ios - GPU Image2 音频问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44588436/

相关文章:

objective-c - 整个应用程序中的自定义后退按钮 UINavigationController

ios - 如何使用 NSData 处理大文件?

swift - 如何消除同名类型和模块的歧义?

ios - 为什么 Collection View 中的动态集合单元格不显示为给定大小,并且在 swift 3 中滚动后会发生变化

ios - 有没有办法让 GPUImageView 输出现有的 CMSampleBuffer?

ios - 对视频文件应用滤镜

ios - 在另一个 View Controller 中调用方法,但不继续调用它?

swift - Xcode 8.2.1 不显示自动完成的文档描述

ios - GPUImage:EAGLContext和线程队列

iphone - iO 上是否有图像缓存框架?