自定义视频采集
自定义视频采集是指的由开发者向 SDK 传入自定义采集的视频帧数据作为视频输入源,然后由SDK内部进行编码\推流的功能。目前推荐使用外部传入CVPixelBufferRef类型的视频数据。
用到SDK自定义视频采集功能的常见场景:
- 开发者APP使用了第三方美颜厂商SDK进行视频数据采集、视频数据的前处理;
- 采用非摄像头采集的数据。比如屏幕分享、游戏直播、播放视频文件等;
- 本身默认的手机内部摄像头被占用,SDK默认是使用手机摄像头采集的等情况
步骤
1、开启自定义视频采集
目前iOS支持推一路流,SDK内部默认是摄像头采集,当开启自定义视频采集时,SDK内部摄像头采集会停止。调用外部采集接口仅仅改变的推流的视频源数据,不会影响推流的开启和关闭。推流的开启和关闭请正常调用推流接口实现。
// Objective-C
/*!
@brief 是否启用自定义视频采集
@param enable YES:启用自定义采集 NO:不启用自定义采集。(默认:NO 不启用自定义采集)
@param config 自定义视频采集配置
@return 调用结果
*/
- (int)enableCustomVideoCapture:(BOOL)enable config:(ChuangCustomVideoCaptureConfig *)config;
2、设置自定义视频采集回调对象并实现对应方法
// Objective-C
/*!
@brief 设置自定义视频采集回调
@param delegate 自定义视频采集回调代理
@return 调用结果
*/
- (int)setCustomVideoCaptureHandler:(id<ChuangVideoCustomCaptureDelegate>)delegate;
设置回调对象后,当推流开启和推流关闭会触发回调,可以在对应的回调中处理视频采集的开关处理。回调方法:onStart、onStop、onEncodedDataTrafficControlInfo:channelIndex:,在回调方法里处理采集的开启和关闭
3、传入自定义视频采集数据
目前支持3种方式的自定义视频采集,根据开发者需要选择其中一种:
1、iOS原生的CVPixelBufferRef数据(推荐);
// Objective-C
/*!
@brief 传入自定义视频帧 (CVPixelBufferRef类型)
@param pixelBuffer 视频帧
@param rotation 屏幕方向
@param timeStamp 时间戳
@return 调用结果
*/
- (int)sendCustomVideoCapturePixelBuffer:(CVPixelBufferRef)pixelBuffer videoRoration:(ChuangStreamRotation)rotation timeStamp:(uint64_t)timeStamp;
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
pixelBuffer | CVPixelBufferRef | 必传 | 传入的自定义视频数据 |
rotation | ChuangStreamRotation | 必传 | 屏幕方向 |
timeStamp | uint64_t | 必传 | 视频帧的时间戳 ,单位毫秒 |
2、rawdata裸数据(自定义的视频像素格式目前支持I420、BGRA、NV12);
// Objective-C
/*!
@brief 传入自定义视频帧 (rawData裸数据)
@param rawData raw data ,要向 SDK 发送的视频帧数据
@param videFrame 视频帧参数
@param timeStamp 时间戳
@return 调用结果
*/
- (int)sendCustomVideoCaptureRawData:(NSData *)rawData param:(ChuangVideoRawDataFrameParam*)videFrame timeStamp:(uint64_t)timeStamp;
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
rawData | NSData | 必传 | 传入的自定义视频数据rawdata |
videFrame | ChuangVideoRawDataFrameParam | 必传 | rawdata视频数据的配置参数 |
timeStamp | uint64_t | 必传 | 视频帧的时间戳 ,单位毫秒 |
3、发送自定义采集的视频帧编码后的数据(默认支持H.264编码);
// Objective-C
/*!
@brief 发送自定义采集的视频帧编码后的数据(默认支持H.264编码)
@param data 发送的编码后的视频帧数据
@param param 视频帧的参数
@param timestamp 视频帧的索引时间
@return 调用结果
*/
- (int)sendCustomVideoCaptureEncodedData:(NSData *)data param:(ChuangEncodedFrameParam *)param timestamp:(uint64_t)timestamp;
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
data | NSData | 必传 | 传入的自定义编码后视频数据 |
param | ChuangEncodedFrameParam | 必传 | 编码之后的视频数据配置 |
timeStamp | uint64_t | 必传 | 视频帧的时间戳 ,单位毫秒 |
从性能考虑,推荐使用第一种的自定义视频采集;
由于自采集传入已编码后的数据,SDK内部无法得知外部自定义的编码配置,因此流控操作需要开发者自行完成,SDK内部会根据当前的网络状况,将视频配置的推荐值比如码率回调(onEncodedDataTrafficControl:channelIndex:)通知开发者,开发者需要自行对编码器配置修改,从而保证视频传输的流畅性 请不要在此回调中执行耗时操作,若需执行耗时操作,请切换线程。