自定义视频采集

自定义视频采集是指的由开发者向 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;

设置回调对象后,当推流开启和推流关闭会触发回调,可以在对应的回调中处理视频采集的开关处理。回调方法:onStartonStoponEncodedDataTrafficControlInfo: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:)通知开发者,开发者需要自行对编码器配置修改,从而保证视频传输的流畅性 请不要在此回调中执行耗时操作,若需执行耗时操作,请切换线程。

results matching ""

    No results matching ""