被 com.juphoon.cloud.JCMediaDeviceImpl 继承.
类 | |
class | JCMediaDeviceAudioParam |
class | JCMediaDeviceCamera |
enum | RenderMirrorType |
Public 成员函数 | |
abstract boolean | isCameraOpen () |
abstract boolean | isSpeakerOn () |
abstract JCMediaDeviceCamera | getCamera () |
abstract List< JCMediaDeviceCamera > | getCameras () |
abstract List< JCMediaDeviceCamera > | getExtCameras () |
abstract JCMediaDeviceVideoCanvas | startCameraVideo (@RenderType int renderType) |
abstract JCMediaDeviceVideoCanvas | startVideo (String videoSource, @RenderType int renderType) |
abstract void | stopVideo (@NonNull JCMediaDeviceVideoCanvas canvas) |
abstract boolean | isAudioStart () |
abstract boolean | startAudio () |
abstract boolean | stopAudio () |
abstract boolean | setAudioAecMode (int mode) |
abstract boolean | startCamera () |
abstract boolean | stopCamera () |
abstract boolean | switchCamera () |
abstract boolean | switchCamera (JCMediaDeviceCamera camera) |
abstract void | setCameraProperty (int width, int height, int frameRate) |
abstract void | setScreenCaptureProperty (int width, int height, int frameRate) |
abstract int | getCameraType (int cameraIndex) |
abstract int | getMinExposureCompensation () |
abstract int | getMaxExposureCompensation () |
abstract float | getExposureCompensationStep () |
abstract boolean | setExposureCompensation (int level) |
abstract boolean | isCameraFlashSupported () |
abstract boolean | enableFlash (boolean enable) |
abstract boolean | handleFocusMetering (JCMediaDeviceVideoCanvas canvas, float xPercent, float yPercent) |
abstract boolean | setCameraZoomRatio (int zoomRatio) |
abstract int | getCameraMaxZoom () |
abstract int | getCameraCurrentZoom () |
abstract void | enableSpeaker (boolean enable) |
abstract boolean | isVideoFileOpen () |
abstract String | getVideoFileId () |
abstract boolean | startVideoFile () |
abstract void | setVideoFileFrame (byte[] data, @VideoPixelFormat int format, int width, int height, int angle, int mirror, boolean keyFrame) |
abstract boolean | stopVideoFile () |
abstract int | getAudioRouteType () |
abstract void | setVideoAngle (@VideoAngle int angle) |
abstract int | getVideoAngle () |
abstract void | setAudioFrameCallback (JCAudioFrameCallback callback) |
abstract void | setVideoFrameCallback (JCVideoFrameCallback callback) |
abstract boolean | inputCustomAudioData (int sampleRateHz, int channels, ByteBuffer byteBuffer, int playDelayMS, int recDelayMS, int clockDrift) |
abstract boolean | getAudioOutputData (int sampleRateHz, int channels, ByteBuffer byteBuffer) |
abstract int | getOutputVolume () |
abstract int | getInputVolume () |
静态 Public 成员函数 | |
static JCMediaDevice | create (JCClient client, JCMediaDeviceCallback callback) |
static void | destroy () |
Public 属性 | |
boolean | defaultSpeakerOn = false |
boolean | useInternalAudioDeviceLogic = true |
JCMediaDeviceCamera | defaultCamera |
JCMediaDeviceAudioParam | audioParam |
静态 Public 属性 | |
static final int | RENDER_FULL_SCREEN = 0 |
static final int | RENDER_FULL_CONTENT = 1 |
static final int | RENDER_FULL_AUTO = 2 |
static final int | CAMERA_NONE = 0 |
static final int | CAMERA_FRONT = 1 |
static final int | CAMERA_BACK = 2 |
static final int | CAMERA_UNKNOWN = 3 |
static final int | CAMERA_EXTERAL = 4 |
static final int | I420 = 1 |
static final int | IYUV = 2 |
static final int | RGB24 = 3 |
static final int | ABGR = 4 |
static final int | ARGB = 5 |
static final int | ARGB444 = 6 |
static final int | RGB565 = 7 |
static final int | ARGB1555 = 8 |
static final int | YUY2 = 9 |
static final int | YV12 = 10 |
static final int | UYVY = 11 |
static final int | MJPG = 12 |
static final int | NV21 = 13 |
static final int | NV12 = 14 |
static final int | BGRA = 15 |
static final int | H264 = 100 |
static final int | H264_SVC = 101 |
static final int | AUDIO_ROUTE_RECEIVER = 0 |
static final int | AUDIO_ROUTE_SPEAKER = 1 |
static final int | AUDIO_ROUTE_HEADSET = 2 |
static final int | AUDIO_ROUTE_BLUETOOTH = 3 |
static final int | VIDEO_ANGLE_AUTO = -1 |
static final int | VIDEO_ANGLE_0 = 0 |
static final int | VIDEO_ANGLE_90 = 90 |
static final int | VIDEO_ANGLE_180 = 180 |
static final int | VIDEO_ANGLE_270 = 270 |
static final int | VIDEO_SOURCE_PEER = 0 |
static final int | VIDEO_SOURCE_CAPTURE = 1 |
static final int | VIDEO_SOURCE_FILE = 2 |
static final int | MIRROR_NONE = 0 |
static final int | MIRROR_HORIZONTAL = 1 |
static final int | MIRROR_VERTICAL = 2 |
static final int | MIRROR_AUTO = 3 |
static final int | MIRROR_FLIP_FROM_LEFT = 4 |
static final int | MIRROR_FLIP_FROM_TOP = 8 |
详细描述
用于管理设备
成员函数说明
◆ create()
|
inlinestatic |
创建 JCMediaDevice 对象
JCMediaDevice 的所有接口函数,如无特殊说明,都建议在主线程调用
- 参数
-
client JCClient 对象 callback JCMediaDeviceCallback 对象,用于回调相关通知
- 返回
- JCMediaDevice 对象
- 异常
-
JCClient、JCMediaDeviceCallback 任意一个参数传空就会出现调用异常
- 注解
- - 调用此方法创建 JCMediaDevice 对象后,期间没有调用过 destroy 方法销毁对象,然后又重复调用此方法,会直接返回第一次创建的 JCMediaDevice 对象
- 调用此方法前确保 JCClient 已完成初始化,即 getState 方法获取的状态值不等于 STATE_NOT_INIT
◆ destroy()
|
inlinestatic |
销毁 JCMediaDevice 对象
该方法为同步调用,需要等待 JCMediaDevice 实例资源释放后才能执行其他操作,调用此方法后,你将无法再使用 JCMediaDevice 的其它方法和回调。
我们 不建议 在 JCSDK 的回调中调用此方法销毁 JCMediaDevice 对象,有可能会出现崩溃。
如需在销毁后再次创建 JCMediaDevice 实例,需要等待 destroy 方法执行结束后再创建实例。
◆ isCameraOpen()
|
abstract |
摄像头是否已打开
- 返回
- 摄像头是否已打开
- true: 已打开
- false: 未打开
◆ isSpeakerOn()
|
abstract |
扬声器是否已打开
- 返回
- 扬声器是否已打开
- true: 已打开
- false: 未打开
◆ getCamera()
|
abstract |
获取当前的摄像头
- 返回
- JCMediaDeviceCamera 对象,当前摄像头
◆ getCameras()
|
abstract |
获取摄像头列表
- 返回
- 摄像头列表
◆ getExtCameras()
|
abstract |
获取外置摄像头列表
- 返回
- 摄像头列表
◆ startCameraVideo()
|
abstract |
开始自身视频渲染
获取本端视频预览对象 JCMediaDeviceVideoCanvas ,通过此对象能获得视图用于UI显示
一对一通话建议使用 startSelfVideo 方法代替,频道建议使用 startVideo 方法代替
- 参数
-
renderType 渲染模式: - RENDER_FULL_SCREEN : 铺满窗口
- RENDER_FULL_CONTENT : 全图像显示,会有黑边
- RENDER_FULL_AUTO : 自适应
- 返回
- - JCMediaDeviceVideoCanvas 对象:开始自身视频渲染成功
- null:开始自身视频渲染失败
◆ startVideo()
|
abstract |
开始其他端的视频渲染
获取其他端的视频预览对象 JCMediaDeviceVideoCanvas ,通过此对象能获得视图用于UI显示
一对一通话建议使用 startOtherVideo 方法代替,频道建议使用 startVideo 方法代替
- 参数
-
videoSource 渲染标识串,通过 JCMediaChannelParticipant 的 getRenderId 方法和 JCCallItem 的 getRenderId 方法可以得到 renderType 渲染模式: - RENDER_FULL_SCREEN : 铺满窗口
- RENDER_FULL_CONTENT : 全图像显示,会有黑边
- RENDER_FULL_AUTO : 自适应
◆ stopVideo()
|
abstract |
停止视频渲染
一对一通话建议使用 stopSelfVideo 和 stopOtherVideo 方法代替,频道建议使用 stopVideo 方法代替
- 参数
-
canvas JCMediaDeviceVideoCanvas 对象,由 startVideo 和 startCameraVideo 返回
◆ isAudioStart()
|
abstract |
音频是否已打开
- 返回
- 音频是否已打开
- true: 已打开
- false: 未打开
◆ startAudio()
|
abstract |
启动音频
在通话连接中或者加入频道成功时,内部会自动调用此方法来启动音频
- 返回
- 调用是否成功
- true:正常执行调用流程
- false:调用失败
◆ stopAudio()
|
abstract |
停止音频
在通话挂断时或者离开频道时,内部会自动调用此方法来停止音频
- 返回
- 调用是否成功
- true:正常执行调用流程
- false:调用失败
◆ setAudioAecMode()
|
abstract |
设置音频模式
更改硬件AEC(回声消除)的开启状态
- 参数
-
mode ON、OFF、AUTO
- 返回
- 是否调用成功
◆ startCamera()
|
abstract |
开启摄像头
- 返回
- 调用是否成功
- true:正常执行调用流程,存在以下两种场景:
- 若调用此方法前摄像头已打开,不会收到通知
- 若调用此方法前摄像头未打开,会收到 onCameraUpdate 通知
- false:调用失败,不会收到通知
◆ stopCamera()
|
abstract |
关闭摄像头
- 返回
- 调用是否成功
- true:正常执行调用流程,存在以下两种场景:
- 若调用此方法前摄像头已打开,会收到 onCameraUpdate 通知
- 若调用此方法前摄像头未打开,不会收到通知
- false:调用失败
◆ switchCamera() [1/2]
|
abstract |
切换摄像头
内部会根据当前摄像头类型来进行切换
- 调用此方法时要保证摄像头已打开,否则将直接返回 false
- 设备拥有两个以上摄像头,否则将直接返回 true
- 满足以上两个条件后,内部会调用 switchCamera(JCMediaDeviceCamera) 方法并提供返回值
- 返回
- 调用是否成功
- true:正常执行调用流程
- false:调用失败
◆ switchCamera() [2/2]
|
abstract |
切换摄像头
调用此方法时需要保证摄像头已打开并且摄像头数大于0,否则将直接返回 false
- 参数
-
camera 摄像头
- 返回
- 调用是否成功
- true:正常执行调用流程
- 摄像头个数为1,不会收到回调
- 摄像头个数大于1,会收到 onCameraUpdate 通知
- false:调用失败,不会收到回调
◆ setCameraProperty()
|
abstract |
设置摄像头采集属性
在调用 startSelfVideo 方法或 startVideo 方法开启自身视频渲染前设置即可生效
- 参数
-
width 采集宽度,默认640 height 采集高度,默认360 frameRate 采集帧速率,默认24
◆ setScreenCaptureProperty()
|
abstract |
设置屏幕共享采集属性
在调用 enableScreenShare 方法开启屏幕共享前设置即可生效
- 参数
-
width 采集宽度,默认1280 height 采集高度,默认720 frameRate 采集帧速率,默认10
◆ getCameraType()
|
abstract |
获得摄像头类型
- 参数
-
cameraIndex 摄像头队列索引
- 返回
- 摄像头类型:
- CAMERA_NONE : 未获取到摄像头
- CAMERA_FRONT : 前置摄像头
- CAMERA_BACK : 后置摄像头
- CAMERA_UNKNOWN : 未知摄像头
◆ getMinExposureCompensation()
|
abstract |
获取摄像头曝光补偿最大最小值,单位EV
- 返回
- 最小曝光补偿:
◆ getMaxExposureCompensation()
|
abstract |
获取摄像头曝光补偿最大最小值,单位EV
- 返回
- 最大曝光补偿:
◆ getExposureCompensationStep()
|
abstract |
获取摄像头曝光补偿步长
- 返回
- 获取曝光补偿步长:
◆ setExposureCompensation()
|
abstract |
设置曝光度
- true: 成功
- false:失败
- 返回
- 返回设置结果:
◆ isCameraFlashSupported()
|
abstract |
查询摄像头是否支持闪光灯
- true: 支持
- false:不支持
- 返回
- 返回查询结果:
◆ enableFlash()
|
abstract |
是否使用闪光灯
- true: 开启
- false:关闭
- 返回
- 返回使用结果
◆ handleFocusMetering()
|
abstract |
设置触屏对焦
调用此方法时需要保证该视频对象正在渲染,否则将调用失败
- 参数
-
xPercent 焦点所在渲染视图 x 轴的比例,取值范围 0-1 yPercent 焦点所在渲染视图 y 轴的比例,取值范围 0-1
- 返回
- 是否成功
- true: 成功
- false: 失败
◆ setCameraZoomRatio()
|
abstract |
设置变焦
- 调用此方法时要保证摄像头已打开,否则将直接返回 -1
- 参数
-
zoomRatio
- 返回
- 设置是否成功
- true : 调用接口成功
- false : 调用失败
◆ getCameraMaxZoom()
|
abstract |
获取镜头最大焦距
- 调用此方法时要保证摄像头已打开,否则将直接返回 -1
- 返回
- 镜头的最大焦距
- 返回小于0, 表示不支持变焦
◆ getCameraCurrentZoom()
|
abstract |
获取镜头的当前焦距
- 调用此方法时要保证摄像头已打开,否则将直接返回 -1
- 返回
- 镜头的当前使用焦距
◆ enableSpeaker()
|
abstract |
开启/关闭扬声器
只有在音频已经启动的情况下调用才会生效
- 参数
-
enable 开启或者关闭扬声器 - true: 开启
- false: 关闭
◆ isVideoFileOpen()
|
abstract |
文件视频源是否已开启
- 返回
- 文件视频源是否已开启
- true: 已开启
- false: 未开启
◆ getVideoFileId()
|
abstract |
获取文件视频源渲染id
- 返回
- 文件视频源渲染id
◆ startVideoFile()
|
abstract |
开启视频文件作为视频输入源
- 返回
- 调用是否成功
- true:正常执行调用流程,存在以下两种场景:
- 若调用此方法时文件视频源已开启,则不会收到回调
- 若调用此方法时文件视频源还未开启,则会收到 onCameraUpdate 回调
- false:调用失败,不会收到回调
- 注解
- - 加入会议前或者一对一通话接听前调用
- 文件和摄像头作为视频输入源只能存在一种,如果当前摄像头已开启的话会关闭摄像头
◆ setVideoFileFrame()
|
abstract |
逐帧采集视频画面
调用此方法时要保证文件视频源已开启
- 参数
-
data 画面二进制数据 format 视频像素格式 width 宽 height 高 angle 90 的倍数 mirror 0 不镜像,1进行左右镜像 keyFrame 是否为关键帧,针对 format 为 H264 - true: 关键帧
- false: 不是关键帧
- 注解
- 当 format 为 H264 格式并且是关键帧时:
- 第一帧一定要包含关键帧,并且需要将 0x67 0x68 0x65 的数据作为完整一帧传入,其中0x67,0x68为pps,0x65为关键帧标识
- 后续P帧以 0x41 数据形式传入
- 关键帧要以固定间隔传入,例如5秒,否则一开始可能有几秒对端无法显示视频
◆ stopVideoFile()
|
abstract |
关闭逐帧采集画面
- 返回
- 调用是否成功
- true:正常执行调用流程,存在以下两种场景:
- 若调用此方法时文件视频源已关闭,不会收到回调
- 若调用此方法时文件视频源未关闭,则会收到 onCameraUpdate 回调
- false:调用失败,不会收到回调
◆ getAudioRouteType()
|
abstract |
音频路由类型
- 返回
- 音频路由类型:
- AUDIO_ROUTE_RECEIVER : 听筒
- AUDIO_ROUTE_SPEAKER : 扬声器
- AUDIO_ROUTE_HEADSET : 有线耳机
- AUDIO_ROUTE_BLUETOOTH : 蓝牙耳机
◆ setVideoAngle()
|
abstract |
设置视频窗体角度
- 参数
-
angle 视频旋转角度: - VIDEO_ANGLE_AUTO : 自动
- VIDEO_ANGLE_0 : 0度
- VIDEO_ANGLE_90 : 90度
- VIDEO_ANGLE_180 : 180度
- VIDEO_ANGLE_270 : 270度
◆ getVideoAngle()
|
abstract |
获取视频窗体角度
- 返回
- 视频渲染窗体角度
- VIDEO_ANGLE_AUTO : 自动
- VIDEO_ANGLE_0 : 0度
- VIDEO_ANGLE_90 : 90度
- VIDEO_ANGLE_180 : 180度
- VIDEO_ANGLE_270 : 270度
◆ setAudioFrameCallback()
|
abstract |
设置语音观测器对象
该方法用于设置语音观测器对象,即注册回调。当需要 SDK 给出 onAudioInputFrame 或 onAudioOutputFrame 回调时,需要使用该方法注册回调。该方法需要在加入频道前或开始通话前调用
- 参数
-
callback JCAudioFrameCallback 对象。传入 null 表示取消注册。我们建议在收到 onLeave 或 onStop 或 onCallItemRemove 后调用,来释放语音观测器对象
◆ setVideoFrameCallback()
|
abstract |
设置视频观测器对象
该方法用于设置视频观测器对象,即注册回调。当需要 SDK 给出 onVideoCaptureFrame 或 onVideoRenderFrame 回调时,需要使用该方法注册回调。 该方法需要在加入频道前或开始通话前调用
- 参数
-
callback JCVideoFrameCallback 对象。传入 null 表示取消注册。我们建议在收到 onLeave 或 onStop 或 onCallItemRemove 后调用,来释放语音观测器对象
◆ inputCustomAudioData()
|
abstract |
将音频输入数据输入到媒体层
当 autoStartAudioInputDevice 为 false 时才可以将音频输入数据输入到媒体层。 建议在一对一通话状态为连接中时或者加入频道成功后,在子线程不断的调用此方法传入音频数据
- 参数
-
sampleRateHz 外部输入源的采样频率,取值范围:8000,16000,32000,44100,48000 channels 外部输入源的采样通道数,取值范围:1或2 byteBuffer 外部采集数据源,需要传入 DirectByteBuffer 对象 playDelayMS 播放延时 一般设为0 recDelayMS 采集延时 一般设为0 clockDrift 时钟漂移 一般设为0
- 返回
- 是否正常调用
- true: 正常执行调用流程
- false: 调用失败
◆ getAudioOutputData()
|
abstract |
获取音频输出数据
当 autoStartAudioOutputDevice 为 false 时才可以获取到音频输出数据。 建议在一对一通话状态为连接中时或者加入频道成功后,在子线程不断的调用此方法获取音频输出数据
- 参数
-
sampleRateHz 输出源的采集频率,取值范围:8000,16000,32000,44100,48000 channels 输出源的采样通道数,取值范围:1或2 byteBuffer 字节缓冲区,从媒体层获取的音频输出数据将被存入此缓冲区,需要传入 DirectByteBuffer 对象。缓冲区的容量为(采样频率*采样通道数/100)
- 返回
- 是否正常调用
- true: 正常执行调用流程
- false: 调用失败
◆ getOutputVolume()
|
abstract |
获取音频播放音量
- 返回
- 音频播放音量,范围从小到大是(0,80)
◆ getInputVolume()
|
abstract |
获取音频采集音量
- 返回
- 音频采集音量,范围从小到大是(0,100)
类成员变量说明
◆ RENDER_FULL_SCREEN
|
static |
铺满窗口
◆ RENDER_FULL_CONTENT
|
static |
全图像显示,会有黑边
◆ RENDER_FULL_AUTO
|
static |
自适应
◆ CAMERA_NONE
|
static |
未获取到摄像头
◆ CAMERA_FRONT
|
static |
前置摄像头
◆ CAMERA_BACK
|
static |
后置摄像头
◆ CAMERA_UNKNOWN
|
static |
未知摄像头
◆ CAMERA_EXTERAL
|
static |
外部摄像头
◆ I420
|
static |
I420
◆ IYUV
|
static |
IYUV
◆ RGB24
|
static |
RGB24
◆ ABGR
|
static |
ABGR
◆ ARGB
|
static |
ARGB
◆ ARGB444
|
static |
ARGB444
◆ RGB565
|
static |
RGB565
◆ ARGB1555
|
static |
ARGB1555
◆ YUY2
|
static |
YUY2
◆ YV12
|
static |
YV12
◆ UYVY
|
static |
UYVY
◆ MJPG
|
static |
MJPG
◆ NV21
|
static |
NV21
◆ NV12
|
static |
NV12
◆ BGRA
|
static |
BGRA
◆ H264
|
static |
H264
◆ H264_SVC
|
static |
H264-SVC
◆ AUDIO_ROUTE_RECEIVER
|
static |
听筒
◆ AUDIO_ROUTE_SPEAKER
|
static |
扬声器
◆ AUDIO_ROUTE_HEADSET
|
static |
有线耳机
◆ AUDIO_ROUTE_BLUETOOTH
|
static |
蓝牙耳机
◆ VIDEO_ANGLE_AUTO
|
static |
自动
◆ VIDEO_ANGLE_0
|
static |
0度
◆ VIDEO_ANGLE_90
|
static |
90度
◆ VIDEO_ANGLE_180
|
static |
180度
◆ VIDEO_ANGLE_270
|
static |
270度
◆ VIDEO_SOURCE_PEER
|
static |
用户
◆ VIDEO_SOURCE_CAPTURE
|
static |
采集设备
◆ VIDEO_SOURCE_FILE
|
static |
文件
◆ MIRROR_NONE
|
static |
不镜像
◆ MIRROR_HORIZONTAL
|
static |
水平方向镜像
◆ MIRROR_VERTICAL
|
static |
竖直方向镜像
◆ MIRROR_AUTO
|
static |
自动选择
◆ MIRROR_FLIP_FROM_LEFT
|
static |
转场动画,从左侧翻转
◆ MIRROR_FLIP_FROM_TOP
|
static |
转场动画,从上侧翻转
◆ defaultSpeakerOn
boolean com.juphoon.cloud.JCMediaDevice.defaultSpeakerOn = false |
没有插入耳机或外接蓝牙时是否默认开启扬声器,默认关闭
- true: 默认开启
- false: 默认关闭
◆ useInternalAudioDeviceLogic
boolean com.juphoon.cloud.JCMediaDevice.useInternalAudioDeviceLogic = true |
是否使用内部音频设备逻辑,默认使用
修改⾳频输出设备 audioInputDevice , 务必将该参数设置为false,否则会导致修改⽆法⽣效。 内部音频设备逻辑如下:
1.打开扬声器 - 使用扬声器输出声音 2.连上蓝牙耳机 - 使用蓝牙耳机输出声音,如果扬声器开着则关闭扬声器 3.插入耳机 - 使用耳机输出声音,如果扬声器开着则关闭扬声器 4.蓝牙耳机和有线耳机以最后连上的作为输出 5.关闭扬声器 - (蓝牙耳机或有线耳机) 优于听筒
- true: 使用内部音频设备逻辑
- false: 不使用内部音频设备逻辑
◆ defaultCamera
JCMediaDeviceCamera com.juphoon.cloud.JCMediaDevice.defaultCamera |
默认摄像头
◆ audioParam
JCMediaDeviceAudioParam com.juphoon.cloud.JCMediaDevice.audioParam |
音频参数
需要在调用 startAudio 方法前设置,即连接通话或加入频道前设置此参数。若不设置此参数,将使用默认值。
该类的文档由以下文件生成:
- cloud/src/main/common/com/juphoon/cloud/JCMediaDevice.java