功能介绍
ARTC SDK支持客户自定义视频采集的功能,客户通过此功能实自定义管理视频设备,且阿里云支持动态切换内部采集和外部采集。
实现步骤
代码实现
打开或关闭内部采集
android平台
/* 关闭内部采集 */ mAliRtcEngine.enableLocalVideo(false); /* 打开内部采集,阿里内部默认状态是true,所以如果不需要控制的情况下不需要调用此api */ mAliRtcEngine.enableLocalVideo(true);
ios平台
/* 关闭内部采集 */ [_engine enableLocalVideo:NO]; /* 打开内部采集,阿里内部默认状态是true,所以如果不需要控制的情况下不需要调用此api */ [_engine enableLocalVideo:YES];
开启或关闭外部视频源
android平台
/* 特别说明:这里以非纹理的方式示例,目前SDK也可以以纹理的方式输入数据 */ /* 打开外部采集,这里以camera流为例,具体可以根据sourceType指定,渲染模式也可以根据需要指定 */ mAliRtcEngine.setExternalVideoSource(true,false, AliRtcVideoTrackCamera,AliRtcRenderModeAuto ); /* 关闭外部采集,这里以camera流为例,具体可以根据sourceType指定 */ mAliRtcEngine.setExternalVideoSource(false,false, AliRtcVideoTrackCamera,AliRtcRenderModeAuto );
ios平台
/* 打开外部采集,这里以camera流为例,具体可以根据sourceType指定,渲染模式也可以根据需要指定 */ [_engine setExternalVideoSource:YES sourceType:AliRtcVideosourceCameraType renderMode:AliRtcRenderModeAuto]; /* 关闭外部采集,这里以camera流为例,具体可以根据sourceType指定 */ [_engine setExternalVideoSource:NO sourceType:AliRtcVideosourceCameraType renderMode:AliRtcRenderModeAuto];
向SDK输入外部的视频源
android平台
/* 按照自己的数据格式填写以下内容,下面以I420格式为例 */ int width = 720; int height = 1280; AliRtcEngine.AliRtcVideoFormat videoformat = AliRtcEngine.AliRtcVideoFormat.AliRtcVideoFormatI420; int[] lineSize = {width, width / 2, width / 2, 0}; int frameLength = width * height * 3 / 2; byte[] buffer = new byte[frameLength]; /* 构造传入SDK的数据对象 */ AliRtcEngine.AliRtcRawDataFrame rawDataFrame = new AliRtcEngine.AliRtcRawDataFrame(buffer, videoformat, width, height, lineSize, 0, buffer.length); /* 调用API传入数据对象 */ int ret = mAliRtcEngine.pushExternalVideoFrame(rawDataFrame, AliRtcVideoTrackCamera); if (ret != 0) { /* 打印下错误信息 */ }
ios平台
/* 按照自己的数据格式填写以下内容,下面以I420格式为例 */ AliRtcVideoDataSample *dataSample = [[AliRtcVideoDataSample alloc] init]; dataSample.dataPtr = (long)yuv_read_data; dataSample.format = AliRtcVideoFormat_I420; dataSample.type = AliRtcBufferType_Raw_Data; dataSample.width = width; dataSample.height = height; dataSample.strideY = width; dataSample.strideU = width/2; dataSample.strideV = width/2; dataSample.dataLength = dataSample.strideY * dataSample.height * 3/2; /* 调用API传入数据对象 */ int ret = [self.engine pushExternalVideoFrame:dataSample sourceType:AliRtcVideosourceCameraType]; if (ret != 0) { /* 打印下错误信息 */ }
文档内容是否对您有帮助?