如何在Mac上使用Foundation将图片编码为H264 而不是使用 x264

我正在尝试使 Mac 广播客户端使用 FFmpeg 而不是 x264 库编码到 H264 中。所以基本上,我能够在CMSampleBufferRef或AVPicture中从 AVFoundation 中获取原始帧。那么有没有办法使用 Apple 框架将一系列这些图片编码为 H264 帧,例如AVVideoCodecH264。我知道使用 AVAssetwriter 将其编码的方式,但我不希望

我正在尝试使 Mac 广播客户端使用 FFmpeg 而不是 x264 库编码到 H264 中。所以基本上,我能够在CMSampleBufferRefPicture中从 Foundation 中获取原始帧。那么有没有办法使用 Apple 框架将一系列这些图片编码为 H264 帧,例如VideoCodecH264。我知道使用 Assetwriter 将其编码的方式,但我不希望

6

在参考VideoCore project之后,我可以使用 Apple 的 VideoToolbox 框架在硬件中进行编码。

启动 VTCompressionSession:

// Create compression session
err = VTCompressionSessionCreate(kCFAllocatorDefault,
                             frameW,
                             frameH,
                             kCMVideoCodecType_H264,
                             encoderSpecifications,
                             NULL,
                             NULL,
                             (VTCompressionOutputCallback)vtCallback,
                             self,
                             &compression_session);
if(err == noErr) {
    comp_session = session;
}

将原始帧推送到 VTCompressionSession

// Delegate method from the CaptureVideoDataOutputSampleBufferDelegate
- (void)captureOutput:(CaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(CaptureConnection *)connection {
    // get pixelbuffer out from samplebuffer
    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    //set up all the info for the frame
    // call VT to encode frame
    VTCompressionSessionEncodeFrame(compression_session, pixelBuffer, pts, dur, NULL, NULL, NULL);
    }

获取 VTCallback 中的编码帧,这是一个要用作 VTCompressionSessionCreate()的参数的 C 方法

void vtCallback(void *outputCallbackRefCon,
        void *sourceFrameRefCon,
        OSStatus status,
        VTEncodeInfoFlags infoFlags,
        CMSampleBufferRef sampleBuffer ) {
    // Do whatever you want with the sampleBuffer
    CMBlockBufferRef blockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer);
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(742)
在 Javascript中从国家缩写中获取完整的国家名称
上一篇
在纯函数语言中 是否有一种算法来获取反函数(self inverse function)
下一篇

相关推荐

  • type c接口是啥改变你的充电体验

    示例示例Type C接口是一种新型的USB连接器,它可以支持更高的数据传输速度,比传统的USB 0接口更快。与传统的USB接口不同,Type C接口可以在两端都使用,无需额外的翻转,使连接更加方便快捷。下面是一个使用Type C接口的代码示例:…

    2023-01-12 02:06:09
    0 21 11
  • carwings是什么意思智能汽车连接系统的未来

    Carwings是日产汽车公司推出的一款远程智能汽车服务,它可以帮助用户远程监控汽车的状态和行驶信息,并且可以远程控制汽车的功能。…

    2023-01-19 13:55:38
    0 82 66
  • cvt变速箱油分几种:CVT变速箱油的种类及用法

    cvt变速箱油一般分为三种,分别是:传统cvt变速箱油:代码:CVT-1…

    2023-01-27 12:23:25
    0 67 85
  • contextcapture集群:如何使用ContextCapture技术构建高效的3D集群

    ContextCapture集群是一种分布式的技术,它可以让多台服务器共享数据,从而提高应用程序的性能和可靠性。它可以使用多台服务器来收集、存储和处理数据,而不需要单独的服务器来执行这些任务。…

    2023-01-05 08:03:52
    0 17 23
  • code128条码字体下载:使用 Code128 条码字体创建条码标识

    code128条码字体下载是指下载code128条码字体的过程。Code128条码字体是一种用于生成Code128条形码的字体。它可以将文本转换为条形码,并将条形码打印在各种类型的媒体上。要下载code128条码字体,可以从网上搜索“code128条码字体下载”,然后选择一个可靠的网站下载。一旦下载完成,就可以使用该字体创建code128条形码。…

    2023-01-19 14:44:33
    0 52 96
  • txvlog com糖心改变你的生活,让你的心情更加甜蜜!

    txvlog com糖心是一款以视频分享为主的社交APP,可以让用户上传自己的视频,并与其他用户进行互动。它的主要功能有:用户注册:用户可以通过手机号码、邮箱地址或者社交媒体账号注册,并设置自己的个人信息;…

    2023-01-10 05:08:15
    0 47 32
  • chigo空调遥控器操作老式:如何使用Chigo空调遥控器操作老式空调

    Chigo空调遥控器操作老式,主要有以下几步:首先准备好Chigo空调遥控器,打开电源,将遥控器与空调连接;…

    2023-01-23 01:53:07
    0 76 46
  • cvte在线测评:如何利用CVTE在线测评提升职业能力?

    cvte在线测评是一款在线编程测评系统,它可以帮助用户快速、准确地评估学生的编程能力。它支持多种编程语言,并且提供了完善的测试环境,可以有效地检测出学生编程中的错误,同时还可以提供可视化的报告,帮助用户更好地理解学生的编程能力。…

    2023-01-27 15:11:58
    0 23 95

发表评论

登录 后才能评论

评论列表(84条)