# 视频管理
# 视频数据采集管理
# 设置要开启的摄像头类型
视频采集设置前,可以通过 JCMediaDevice (opens new window) 类中的属性和方法获取摄像头列表、当前摄像头以及默认摄像头,具体如下:
/**
* 获取摄像头列表
*
* @return 摄像头列表
*/
getCameras(): Array<JCMediaDeviceCamera>;
/**
* 当前默认的摄像头
*
* @return 当前摄像头
*/
getCamera(): JCMediaDeviceCamera;
/**
* 默认摄像头
*/
defaultCamera: JCMediaDeviceCamera;
其中,摄像头对象(JCMediaDeviceCamera)有以下属性
/** 摄像头id */
cameraId: string;
/** 摄像头名字 */
cameraName: string;
/** 摄像头类型 */
cameraType: CameraType;
CameraType (opens new window) 有以下几种
/**
* 未获取到摄像头
*/
static readonly CAMERA_NONE: number = 0;
/**
* 前置摄像头
*/
static readonly CAMERA_FRONT: number = 1;
/**
* 后置摄像头
*/
static readonly CAMERA_BACK: number = 2;
/**
* 未知摄像头
*/
static readonly CAMERA_UNKNOWN: number = 3;
获取摄像头列表后,可以调用 getCameraType (opens new window) 方法获得列表中的摄像头类型
/**
* 获得摄像头类型
*
* @param cameraIndex 摄像头队列索引
* @return 摄像头类型
*/
getCameraType(cameraIndex: number): CameraType;
如果想切换摄像头,调用 switchCamera (opens new window) 方法切换指定的摄像头
/**
* 切换摄像头
* @param camera 摄像头
* @return 成功返回 true,失败返回 false
*/
switchCamera(camera: JCMediaDeviceCamera): boolean;
示例代码
const item: JCMediaDeviceCamera = new JCMediaDeviceCamera();
item.cameraType = JCMediaDevice.CAMERA_FRONT;
const cameras: Array<JCMediaDeviceCamera> = this.mediaDevice.getCameras();
this.mediaDevice.defaultCamera = cameras[0];
# 设置摄像头采集分辨率
您可以通过调用 setCameraProperty (opens new window) 方法实现不同的视频分辨率,如采集的高度、宽度和帧速率。
摄像头采集属性设置接口如下:
/**
* 设置摄像头采集属性
* @param width 采集宽度,默认640
* @param height 采集高度,默认360
* @param frameRate 采集帧速率,默认30
*/
setCameraProperty(width: number, height: number, frameRate: number): void;
示例代码
// 设置摄像头采集属性
this.mediaDevice.setCameraProperty(640, 360, 30);
# 视频渲染管理
# 创建本地和远端视频画面
- 本地视频渲染
本地视频渲染通过调用 startCameraVideo (opens new window) 接口获得本地视频对象用于 UI 界面显示,该接口会打开摄像头
/**
* 获得视频预览对象,通过此对象能获得视频用于UI显示
*
* @param renderType 渲染模式
* @return JCMediaDeviceVideoCanvas 对象
* @see RenderType
*/
startCameraVideo(renderType: RenderType): JCMediaDeviceVideoCanvas;
其中,渲染模式(RenderType)有以下三种
名称 | 描述 |
---|---|
RENDER_FULL_SCREEN = 0 | 铺满窗口 |
RENDER_FULL_CONTENT = 1 | 全图像显示,会有黑边,但在窗口跟图像比例相同的情况下不会有黑边 |
RENDER_FULL_AUTO = 2 | 自适应 |
- 远端视频渲染
您可以调用 startVideo (opens new window) 方法获取对端视频对象并进行渲染
/**
* 获得视频对象,通过此对象能获得视频用于UI显示
*
* @param videoSource 渲染标识串,比如 JCMediaChannelParticipant JCCallItem 中的 renderId
* @param renderType 渲染模式
* @return JCMediaDeviceVideoCanvas 对象
* @see RenderType
*/
startVideo(videoSource: string, renderType: RenderType): JCMediaDeviceVideoCanvas;
示例代码
// 打开本地视频预览
const localCanvas: JCMediaDeviceVideoCanvas = this.mediaDevice.startCameraVideo(JCMediaDevice.RENDER_FULL_CONTENT);
viewGroup.addView(localCanvas.getVideoView(), 0);
// 远端视频渲染,renderId来源于通话对象,一对一为JCCallItem对象,多方为JCMediaChannelParticipant对象
const remoteCanvas: JCMediaDeviceVideoCanvas = this.mediaDevice.startVideo(renderId, JCMediaDevice.RENDER_FULL_CONTENT);
viewGroup.addView(remoteCanvas.getVideoView(), 0);
# 销毁本地和远端视频画面
在视频通话结束或者视频通话中,如果想销毁视频画面,可以调用 stopVideo (opens new window) 接口
/**
* 停止视频
*
* @param canvas JCMediaDeviceVideoCanvas 对象,由 startVideo 获得
*/
stopVideo(canvas: JCMediaDeviceVideoCanvas): void;
示例代码
const localCanvas: JCMediaDeviceVideoCanvas = this.mediaDevice.startCameraVideo(JCMediaDevice.RENDER_FULL_CONTENT);
const remoteCanvas: JCMediaDeviceVideoCanvas = this.mediaDevice.startVideo(renderId, JCMediaDevice.RENDER_FULL_CONTENT);
if (localCanvas != null) {
mContentView.removeView(localCanvas.getVideoView());
this.mediaDevice.stopVideo(localCanvas);
localCanvas = null;
}
if (remoteCanvas != null) {
mContentView.removeView(remoteCanvas.getVideoView());
this.mediaDevice.stopVideo(remoteCanvas);
remoteCanvas = null;
}
# 视频设备管理
视频设备管理主要用到 JCMediaDevice (opens new window) 类中的方法,具体如下:
# 获取摄像头列表
通过调用 getCameras (opens new window) 方法获取摄像头列表
/**
* 获取摄像头列表
*
* @return 摄像头列表
*/
getCameras(): Array<JCMediaDeviceCamera>;
示例代码
// 获取摄像头列表
const cameras: Array<JCMediaDeviceCamera> = this.mediaDevice.getCameras();
# 获取当前默认的摄像头
通过调用 getCamera (opens new window) 方法获取当前默认的摄像头
/**
* 当前默认的摄像头
*
* @return 当前摄像头
*/
getCamera(): JCMediaDeviceCamera;
示例代码
// 获取当前摄像头
const camera: JCMediaDeviceCamera = this.mediaDevice.getCamera();
# 开启关闭摄像头
通过调用 startCamera (opens new window) 和 stopCamera (opens new window) 方法开启/关闭摄像头
/**
* 开启摄像头
*
* @return 成功返回 true,失败返回 false
*/
startCamera(): boolean;
/**
* 关闭摄像头
*
* @return 成功返回 true,失败返回 false
*/
stopCamera(): boolean;
# 切换摄像头
/**
* 切换摄像头,内部会根据当前摄像头类型来进行切换
*
* @return 成功返回 true,失败返回 false
*/
switchCamera(): boolean;
示例代码
// 打开摄像头
this.mediaDevice.startCamera();
// 关闭摄像头
this.mediaDevice.stopCamera();
// 切换摄像头
this.mediaDevice.switchCamera();