自定义视频采集

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

设置回调对象后,当推流开启和推流关闭会触发回调,可以在对应的回调中处理视频采集的开关处理。回调方法:onStartonStoponEncodedDataTrafficControl在回调方法里处理采集的开启和关闭

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 非必传 默认为主流通道

results matching ""

    No results matching ""