自定义视频采集
自定义视频采集是指的由开发者向 SDK 传入自定义采集的视频帧数据作为视频输入源,然后由SDK内部进行编码\推流的功能。目前推荐使用外部传入ChuangVideoBufferType类型的视频数据。
用到SDK自定义视频采集功能的常见场景:
- 开发者APP使用了第三方美颜厂商SDK进行视频数据采集、视频数据的前处理;
- 采用非摄像头采集的数据。比如屏幕分享、游戏直播、播放视频文件等;
- 本身默认的手机内部摄像头被占用,SDK默认是使用手机摄像头采集的等情况
步骤
1、开启自定义视频采集
SDK内部默认是摄像头采集,当开启自定义视频采集时,SDK内部摄像头采集会停止。调用自定义采集接口仅仅改变的推流的视频源数据,不会影响推流的开启和关闭。推流的开启和关闭请正常调用推流接口实现。
/**
* 是否启用自定义视频采集
* @param enable true:启用自定义采集 false:不启用自定义采集。(默认:false 不启用自定义采集)
* @param customVideoCaptureConfig 自定义视频采集配置
*/
public abstract int enableCustomVideoCapture(boolean enable, ChuangCustomVideoCaptureConfig config);
2、设置视频自定义采集回调对象并实现对应方法
/**
* 设置自定义视频采集源
* @param customVideoCaptureHandler 自定义视频集源
*/
public abstract int setCustomVideoCaptureHandler(IChuangCustomVideoCaptureHandler customVideoCaptureHandler);
设置回调对象后,当推流开启和推流关闭会触发回调,可以在对应的回调中处理视频采集的开关处理。回调方法:onStart、onStop、onEncodedDataTrafficControl在回调方法里处理采集的开启和关闭
3、传入自定义采集视频数据
目前支持3种方式的自定义视频采集,根据开发者需要选择其中一种:
1、RawData裸数据;
/**
* 像sdk发送视频数据
*
* @param data 视频帧数据
* @param dataLength 视频帧长度
* @param param 视频帧详情
* @param referenceTimeMillisecond 视频帧的时间戳,单位毫秒
* @param publishChannel 推流通道
*/
public abstract int sendCustomVideoCaptureRawData(ByteBuffer data, int dataLength, ChuangVideoFrameParam param, long referenceTimeMillisecond, ChuangPublishChannel publishChannel);
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
data | ByteBuffer | 必传 | 传入的自定义视频数据 |
dataLength | int | 必传 | 视频帧长度 |
param | ChuangVideoFrameParam | 必传 | 视频帧详情 |
referenceTimeMillisecond | int | 必传 | 视频帧的时间戳 ,单位毫秒 |
publishChannel | ChuangPublishChannel | 非必传 | 默认为主流通道 |
2、纹理格式的视频数据
/**
* 向sdk发送纹理格式的视频数据
*
* @param textureId 纹理ID
* @param format 纹理格式
* @param width 视频帧宽
* @param height 视频帧高
* @param rotation 视频旋转角度
* @param matrix 视频纹理矩阵
* @param referenceTimeMillisecond 视频帧的时间戳,单位毫秒
*/
public abstract int sendCustomVideoCaptureTextureData(int textureId, int format, int width, int height,
int rotation, float[] matrix, long referenceTimeMillisecond, ChuangPublishChannel publishChannel);
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
textureId | 纹理Id | 必传 | 传入的纹理格式数据 |
format | int | 必传 | 纹理格式 |
width | int | 必传 | 视频帧宽 |
height | int | 必传 | 视频帧高 |
rotation | int | 必传 | 视频帧旋转角度 |
matrix | float[] | 必传 | 视频纹理矩阵 |
referenceTimeMillisecond | int | 必传 | 视频帧的时间戳,单位毫秒 |
publishChannel | ChuangPublishChannel | 非必传 | 默认为主流通道 |
3、视频帧编码后的数据(默认支持H.264编码);
/**
* 向sdk发送编码后的视频帧,仅支持h264格式
*
* @param data 视频帧数据
* @param dataLength 视频帧数据长度
* @param param 视频帧参数
* @param referenceTimeMillisecond 视频帧的索引时间,UNIX 时间戳,单位为毫秒
* @param publishChannel 推流通道
*/
public abstract int sendCustomVideoCaptureEncodedData(ByteBuffer data, int dataLength, ChuangVideoEncodedFrameParam param, long referenceTimeMillisecond, ChuangPublishChannel publishChannel);
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
data | ByteBuffer | 必传 | 传入的自定义视频数据 |
dataLength | int | 必传 | 视频帧长度 |
param | ChuangVideoEncodedFrameParam | 必传 | 视频帧参数 |
referenceTimeMillisecond | int | 必传 | 视频帧的时间戳 ,单位毫秒 |
publishChannel | ChuangPublishChannel | 非必传 | 默认为主流通道 |