- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用此代码从相机捕获视频,但 CMSampleBufferGetImageBuffer(sampleBuffer) 始终返回 nil。问题是什么?。这是代码,我修改了此源代码以适应 Swift 4 https://github.com/FlexMonkey/CoreImageHelpers/blob/master/CoreImageHelpers/coreImageHelpers/CameraCaptureHelper.swift
import AVFoundation
import CoreMedia
import CoreImage
import UIKit
class CameraCaptureHelper: NSObject
{
let captureSession = AVCaptureSession()
let cameraPosition: AVCaptureDevice.Position
weak var delegate: CameraCaptureHelperDelegate?
required init(cameraPosition: AVCaptureDevice.Position)
{
self.cameraPosition = cameraPosition
super.init()
initialiseCaptureSession()
}
fileprivate func initialiseCaptureSession()
{
captureSession.sessionPreset = AVCaptureSession.Preset.photo
guard let camera = AVCaptureDevice.default(.builtInWideAngleCamera,
for: .video, position: cameraPosition)
else {
fatalError("Unable to access camera")
}
do
{
let input = try AVCaptureDeviceInput(device: camera)
captureSession.addInput(input)
}
catch
{
fatalError("Unable to access back camera")
}
let videoOutput = AVCaptureVideoDataOutput()
videoOutput.setSampleBufferDelegate(self,
queue: DispatchQueue(label: "sample buffer delegate", attributes: []))
if captureSession.canAddOutput(videoOutput)
{
captureSession.addOutput(videoOutput)
}
captureSession.startRunning()
}
}
extension CameraCaptureHelper: AVCaptureVideoDataOutputSampleBufferDelegate
{
func captureOutput(_ output: AVCaptureOutput, didDrop sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
connection.videoOrientation = .landscapeRight //AVCaptureVideoOrientation(rawValue: UIApplication.shared.statusBarOrientation.rawValue)!
guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else
{
return
}
DispatchQueue.main.async
{
self.delegate?.newCameraImage(self,
image: CIImage(cvPixelBuffer: pixelBuffer))
}
}
}
protocol CameraCaptureHelperDelegate: class
{
func newCameraImage(_ cameraCaptureHelper: CameraCaptureHelper, image: CIImage)
}
最佳答案
您正在尝试从“刚刚删除样本缓冲区”回调访问像素缓冲区。头文件说:
CMSampleBuffer object passed to this delegate method will contain metadata about the dropped video frame, such as its duration and presentation time stamp, but will contain no actual video data.
您应该从 didOutputSampleBuffer:
委托(delegate)回调中执行此操作。
关于ios - CMSampleBufferGetImageBuffer(sampleBuffer) 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51150267/
我正在使用 ReplayKit 录制视频: let sharedRecorder = RPScreenRecorder.shared() sharedRecorder.startC
我使用此代码从相机捕获视频,但 CMSampleBufferGetImageBuffer(sampleBuffer) 始终返回 nil。问题是什么?。这是代码,我修改了此源代码以适应 Swift 4
我尝试将示例缓冲区而不是 UIImage 保存到数组中,以便稍后转换它。这样可以加快图像捕获速度,并且可能不会收到内存警告。我只是不知道如何将它保存到数组,然后再次使用它来调用 [self image
我正在使用前置摄像头,当我捕捉帧时,它们会逆时针旋转 90 度。我想在 CGContext 中旋转捕获的图像(因为我读到 Core Graphic 比其他框架快得多)。 这是我的代码: func ca
如何在 Swift 中使用“CFRetain(sampleBuffer)”和“CFRelease(sampleBuffer)”? CFRetain 不可用:Core Foundation 对象自动进行
我正在尝试使用 OpenCV 进行实时相机处理。在 AVCaptureVideoDataOutputSampleBufferDelegate 的 didOutputSampleBuffer 方法中,我
我正在努力解决这个问题。我想使用 AVAssetWriterInput 在 OSX 上使用 Swift 录制实时视频。 我创建了一个名为 input 的 AVAssetWriterInput 实例,我
我试图更好地理解 AVFoundation 框架以及各种 Core xxxx 框架,因此我决定尝试一个简单的视频捕获,看看是否可以将图像输出到 UI。我查看了 rosyWriter 代码和文档,但没有
如何在 Swift 3 中将 captureStillImageAsynchronously(sampleBuffer) 转换为 base64 编码 我正在尝试将图像数据连续馈送到 HTML WebV
我是一名优秀的程序员,十分优秀!