我收到了CMSampleBufferRef来自系统 API 的CVPixelBufferRefs,其中包含不是RGBA(线性像素)的s 。缓冲区包含平面像素(例如420faka kCVPixelFormatType_420YpCbCr8BiPlanarVideoRangeaka yCbCraka YUV)。
我想在将视频数据发送VideoToolkit到编码之前对其进行一些修改h264(绘制一些文本、覆盖徽标、旋转图像等),但我希望它高效且真实-时间。Buuuut 平面图像数据处理起来看起来很杂乱——有色度平面和亮度平面,它们的大小不同,而且……在字节级别上使用它似乎需要做很多工作。
我可能会使用 aCGContextRef并直接在像素顶部绘制,但据我所知,它仅支持 RGBA 像素。关于如何以尽可能少的数据复制和尽可能少的代码行来做到这一点的任何建议?
我正在尝试使用AVFoundation. 这有效。我还尝试向视频添加叠加层,例如包含日期的文本标签。
例如:保存的视频不仅是相机看到的,还有时间戳。
这是我保存视频的方式:
func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
saveVideo(toURL: movieURL!)
}
private func saveVideo(toURL url: URL) {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)
}) { (success, error) in
if(success) {
print("Video saved to Camera Roll.")
} else {
print("Video failed to save.")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个movieOuput是一个AVCaptureMovieFileOutput。我的预览图层不包含任何子图层。我尝试将时间戳标签的图层添加到 previewLayer,但这没有成功。
我已经尝试过Ray Wenderlich 的例子以及这个堆栈溢出问题。最后,我也尝试了这个教程,所有这些都无济于事。
如何为相机胶卷中保存的视频中的视频添加叠加层?
xcode avfoundation video-recording avcapturemoviefileoutput swift
avfoundation ×1
core-image ×1
core-media ×1
core-video ×1
ios ×1
replaykit ×1
swift ×1
xcode ×1