ios - iOS:解码 YUY2 视频帧
问题描述
我正在尝试使用 YUY2 视频并在 iOS 设备上一次显示一帧。我最终将使用 YUY2 数据流,但目前我正在使用记录的文件。
不幸的是,我似乎无法正确进行这种转换。我正在使用 CoreVideo,我的代码是基于从 Internet 上拼凑而成的一堆零碎示例。目前我正在收到视频垃圾。
到目前为止,这是我的代码,感谢您查看:
import UIKit
import AVKit
import AVFoundation
import CoreGraphics
class ViewController: UIViewController {
var url: URL!
var buffer: Data!
var image: UIImage!
override func viewDidLoad() {
super.viewDidLoad()
let path = Bundle.main.path(forResource: "gst-video", ofType: "yuy2")!
self.url = URL(fileURLWithPath: path)
// Examining the video file in a Hex Editor shows the frame size of 614400
let data = try! Data(contentsOf: self.url)
let sub = data.subdata(in: 0..<614400)
self.buffer = sub
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
var pixelBufferOut: CVPixelBuffer?
let attributes : [NSObject:AnyObject] = [
kCVPixelBufferCGImageCompatibilityKey : true as AnyObject,
kCVPixelBufferCGBitmapContextCompatibilityKey : true as AnyObject,
]
CVPixelBufferCreateWithBytes(kCFAllocatorDefault, 640, 480, kCVPixelFormatType_422YpCbCr8_yuvs, UnsafeMutablePointer(&buffer), 8, nil, nil, attributes as CFDictionary, &pixelBufferOut)
guard let pixelBuffer = pixelBufferOut else {
return
}
CVPixelBufferLockBaseAddress(pixelBuffer, CVPixelBufferLockFlags(rawValue: 0))
let ciImage = CIImage(cvPixelBuffer: pixelBuffer)
let ciContext = CIContext(options: nil)
let frameImage = ciContext.createCGImage(ciImage, from: ciImage.extent)
let frame = UIImage(cgImage: frameImage!)
print(frame.cgImage)
self.image = frame
let imageView = UIImageView()
imageView.image = frame
imageView.frame.origin = CGPoint(x: 8, y: 32)
imageView.frame.size = frame.size
view.addSubview(imageView)
CVPixelBufferUnlockBaseAddress(pixelBuffer, CVPixelBufferLockFlags(rawValue: 0))
}
}
解决方案
推荐阅读
- c# - GameObject 属性值不会在游戏重新启动时重置
- php - 使用 Telegram webhook 执行代码时,$_POST 变量为空
- python - 如何从网页中保存值(int)并使用 Selenium-Python 将其存储为数组
- amazon-web-services - AWS 网络负载均衡器粘性会话不起作用
- hashicorp-vault - Vault - 如何使用 CLI 存储逗号分隔值或数组
- javascript - 将 .style 和 class 添加到数组元素 [Javascript]
- python-3.x - 无法从“帮助者”导入名称“login_required”
- python - 等待python脚本在节点js中执行
- ansible - ansible 在 2.9 版中不扩展 var,它在 2.8 中有效
- highcharts - Angular 8 highcharts 如何将自定义数据传递给 Highcharts 中的向下钻取事件