视频硬编码(iOS端)

视频硬编码

VideoToolBox(硬编码部分)

VideoToolBox是一个直接通过硬件来提升视频编码和解码能力的框架。也就是我们俗称的硬解码和硬编码

VTCompressionSession (object)

一个管理视频数据压缩的会话

VTCompressionSessionCreate (method)

创建VTCompressionSession

//OSStatus 返回创建的状态
OSStatus VTCompressionSessionCreate(
//1. 一个分配器 默认为Null
CFAllocatorRef allocator, 
//2. 视频帧的像素宽度
int32_t width, 
//3. 视频帧的像素高度
int32_t height, 
//4. 编码类型 常用H264编码 kCMVideoCodecType_H264
CMVideoCodecType codecType, 
//5. 编码方式Null由videoToolBox选择
CFDictionaryRef encoderSpecification, 
//6. 创建一个像素缓冲池的属性 Null为由videoToolBox创建
CFDictionaryRef sourceImageBufferAttributes, 
//7. 数据压缩分配器  默认为Null
CFAllocatorRef compressedDataAllocator, 
//8. 输出回调   VTCompressionSessionEncodeFrame
VTCompressionOutputCallback outputCallback, 
//9. 回调对象 
void *outputCallbackRefCon,
//10. VTCompressionSession 要创建的对象 
VTCompressionSessionRef  _Nullable *compressionSessionOut);
复制代码

VTSessionSetProperty && VTSessionSetProperties (method)

设置 VideoToolbox session 属性

//返回状态
OSStatus VTSessionSetProperty(
//VTCompressionSession 设置的session对象
VTSessionRef session, 
//key值
CFStringRef propertyKey, 
//value值
CFTypeRef propertyValue);
复制代码

批量设置 VideoToolbox session 属性


//返回状态
OSStatus VTSessionSetProperties(
//VTCompressionSession 设置的session对象
VTSessionRef session, 
//CFDictionaryRef 字典存储
CFDictionaryRef propertyDictionary);

复制代码

VTCompressionSessionPrepareToEncodeFrames (method)

允许编码器编码开始之前执行任何必要的资源分配框架(可选)。该方法需要在VTCompressionSessionEncodeFrame之前调用

OSStatus VTCompressionSessionPrepareToEncodeFrames(VTCompressionSessionRef session);
复制代码

VTCompressionSessionEncodeFrame (method)

把会话中的每一帧进行压缩

OSStatus VTCompressionSessionEncodeFrame(
//数据压缩会话
VTCompressionSessionRef session, 
//一个核心的视频图像缓冲区包含一个视频帧
CVImageBufferRef imageBuffer, 
//帧的时间戳,时间戳后一个必须大于前一个
CMTime presentationTimeStamp, 
//这一帧展示的时间 默认kCMTimeInvalid
CMTime duration, 
//每一帧的属性
CFDictionaryRef frameProperties, 
//一个回调,可以对每一帧进行处理 不需要处理传Null
void *sourceFrameRefCon, 
//VTEncodeInfoFlags 设置同步异步处理 0为异步
VTEncodeInfoFlags *infoFlagsOut);
复制代码

VTCompressionSessionInvalidate (method)

废弃VTCompressionSession

//废弃值
void VTCompressionSessionInvalidate(VTCompressionSessionRef session);
//完成后需要进行release
void CFRelease(CFTypeRef cf);
//最后将对象置空Null
session = Null
复制代码

代码参考简书作者:落影loyinglin

转载于:https://juejin.im/post/5ab86e1bf265da23766b45eb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值