使用AVAssetWriter对视频进行UIImages会产生闪烁的黑色帧。 800张图片

时间:2018-06-01 02:25:21

标签: ios swift avfoundation

我被困了几个星期!

我在stackoverflow上尝试了所有的解决方案,它们可以在大约0到500张图像上工作,或者在12 fps上工作50秒,但是对于更长的视频,在大约50秒后会出现黑色闪烁,具体取决于iphone, 在iphone 8上50秒后发生iphone 6,它发生在1:30之后

我尝试了this link writeImagesAsMovie()函数

中接受的答案

有时我会遇到内存分配问题,有时候我没有, 但黑色闪烁仍然存在。

 // MARK: - Fill Pixel Buffer -

private func fillPixelBufferFromImage(image: UIImage, pixelBuffer: CVPixelBuffer) {
    CVPixelBufferLockBaseAddress(pixelBuffer, CVPixelBufferLockFlags(rawValue: 0))
    let pixelData = CVPixelBufferGetBaseAddress(pixelBuffer)
    let rgbColorSpace = CGColorSpaceCreateDeviceRGB()

    // Create CGBitmapContext
    let context = CGContext(
      data: pixelData,
      width: Int(720),
      height: Int(720),
      bitsPerComponent: 8,
      bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer),
      space: rgbColorSpace,
      bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue
    )


    // Draw image into context"
    context?.draw(image.cgImage!, in: CGRect(x: 0, y: 0, width: 720, height: 720))

    CVPixelBufferUnlockBaseAddress(pixelBuffer, CVPixelBufferLockFlags(rawValue: 0))


    //UIGraphicsEndImageContext()
}

1 个答案:

答案 0 :(得分:0)

有助于获得理想结果的事情...... 使用UIImageJPEGRepresentation而不是PNG,尺寸必须是16的倍数...... :)和更新的iphone可以处理更多图像