iOS 硬编码

iOS 硬编码

iOS 硬编码简单的总结来说就是将采集到的CMSampleBufferRef编码成H264或者是H265,对编码完成后的数据最后进行合成等工作用以实现自己不同的需求。
编码的主要步骤可分为以下几个步骤:

  1. 创建编码用的session,并设置编码的参数
  2. 等待数据进行正式编码工作
  3. 处理编码完成的数据

总结的步骤是比较简单的,但是在各个步骤中有几个比较重要的点需要注意,下面在代码中逐步进行指出

编码session 的创建

在进行session创建的时候需要设置回调函数,数据编码之后将通过该函数方法输出,另配置session的几个关键属性。

  • 配置是否实时编码
  • 配置编码等级(baseline/main/high)
  • 配置帧率(1秒多少帧画面)
  • 配置GOP(两个I帧的间隔多少帧)
  • 配置编码类型(CABAC/CAVLC)

具体的操作代码如下:

- (void)createSessionWithConfig:(VideoEncodeConfig *)config {
    needSetVideoParam = YES;
    // 创建session,指定回调方法
    VTCompressionSessionCreate(NULL, config.size.width, config.size.height, kCMVideoCodecType_H264, NULL, NULL, NULL, outputCallback, (__bridge void *)self, &pCompressionSession);
    // 配置session 属性
    // 是否实时
    VTSessionSetProperty(pCompressionSession, kVTCompressionPropertyKey_RealTime, kCFBooleanTrue);
    // gop数值
    VTSessionSetProperty(pCompressionSession, kVTCompressionPropertyKey_MaxKeyFrameInterval, (__bridge CFTypeRef)@(config.videoMaxKeyframeInterval));
    // 期望帧率
    VTSessionSetProperty(pCompressionSession, kVTCompressionPropertyKey_ExpectedFrameRate, (__bridge CFTypeRef)@(config.videoFrameRate));
    // 关键帧采样间隔时间
    VTSessionSetProperty(pCompressionSession, kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration,( __bridge CFTypeRef)@(config.videoMaxKeyframeInterval / config.videoFrameRate));
    // 比特率
    VTSessionSetProperty(pCompressionSession, kVTCompressionPropertyKey_AverageBitRate, ( __bridge CFTypeRef)@(config.videoBitRate));
    NSArray *limit = @[@(conf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值