构造函数 | |
(JCMediaDeviceVideoCanvas *__nullable) | - startCameraVideo: |
(JCMediaDeviceVideoCanvas *__nullable) | - startCameraVideo:view: |
(JCMediaDeviceVideoCanvas *__nullable) | - startVideo:renderType: |
(JCMediaDeviceVideoCanvas *__nullable) | - startVideo:renderType:view: |
(void) | - stopVideo: |
(bool) | - startAudio |
(bool) | - stopAudio |
(bool) | - startCamera |
(bool) | - stopCamera |
(bool) | - switchCamera |
(bool) | - switchCamera: |
(void) | - setCameraProperty:height:framerate: |
(void) | - setScreenCaptureProperty:height:framerate: |
(bool) | - startVideoFile |
(void) | - setVideoFileFrame:format:width:height: |
(void) | - setVideoFileFrame:angle:mirror: |
(bool) | - stopVideoFile |
(void) | - registerAudioFrameCallback: |
(void) | - registerVideoFrameCallback: |
(bool) | - inputCustomAudioData:sampleRateHz:channels:playDelayMS:recDelayMS:clockDrift: |
(bool) | - getAudioOutputData:length:sampleRateHz:channels: |
(void) | - enableSpeaker: |
(NSString *__nullable) | - getAudioOutputType |
(bool) | - isSpeakerOn |
类方法 | |
(JCMediaDevice *__nullable) | + create:callback: |
(void) | + destroy |
属性 | |
bool | cameraOpen |
bool | videoFileOpen |
JCMediaDeviceCamera *__nullable | camera |
NSArray< JCMediaDeviceCamera * > *__nonnull | cameras |
JCMediaDeviceCamera *__nullable | defaultCamera |
JCMediaDeviceAudioParam *_Nonnull | audioParam |
NSString *__nonnull | videoFileId |
bool | audioInterrupt |
JCMediaDeviceVideoAngel | videoAngle |
bool | useInternalAudioDeviceLogic |
bool | audioStart |
NSArray< JCMediaDeviceAudio * > *__nonnull | audioInputs |
JCMediaDeviceAudio *__nullable | audioInput |
NSArray< JCMediaDeviceAudio * > *__nonnull | audioOutputs |
JCMediaDeviceAudio *__nullable | audioOutput |
NSArray< JCMediaDeviceWindow * > *__nonnull | desktops |
NSArray< JCMediaDeviceWindow * > *__nonnull | windows |
JCMediaDeviceWindow *__nullable | screenshareWindow |
bool | defaultSpeakerOn |
详细描述
设备模块
- 注解
- 扬声器通过 JCMediaDevice 类中 enableSpeaker 进行开关
函数文档
◆ create:callback:
+ (JCMediaDevice* __nullable) create: | (JCClient *__nonnull) | client | |
callback: | (id< JCMediaDeviceCallback > __nonnull) | callback | |
创建 JCMediaDevice 对象
JCMediaDevice 的所有接口函数,如无特殊说明,都建议在主线程调用
- 注解
- 调用此方法创建 JCMediaDevice 对象后,期间没有调用过 destroy 方法销毁对象,然后又重复调用此方法,会直接返回第一次创建的 JCMediaDevice 对象
- 调用此方法前确保 JCClient 已完成初始化,即 state 状态值不等于 JCClientStateNotInit
- 参数
-
client JCClient 对象 callback JCMediaDeviceCallback 对象,用于回调相关通知
- 返回
- JCMediaDevice 对象
- 异常
-
JCClient、JCMediaDeviceCallback 任意一个参数传空就会调用失败
◆ destroy
+ (void) destroy |
销毁 JCMediaDevice 对象
该方法为同步调用,需要等待 JCMediaDevice 实例资源释放后才能执行其他操作,调用此方法后,你将无法再使用 JCMediaDevice 的其它方法和回调。
我们 不建议 在 JCSDK 的回调中调用此方法销毁 JCMediaDevice 对象,否则会出现崩溃。
如需在销毁后再次创建 JCMediaDevice 实例,需要等待 destroy 方法执行结束后再创建实例。
◆ enableSpeaker:
- (void) enableSpeaker: | (bool) | enable |
开启/关闭扬声器,iOS 使用
只有在音频已经启动的情况下调用才会生效
- 参数
-
enable 开启或者关闭扬声器 - true: 开启
- false: 关闭
◆ getAudioOutputData:length:sampleRateHz:channels:
- (bool) getAudioOutputData: | (unsigned char *_Nonnull) | buf | |
length: | (int) | length | |
sampleRateHz: | (int) | sampleRateHz | |
channels: | (int) | channels | |
获取音频输出数据
当 autoStartAudioOutputDevice 为 false 时才可以获取到音频输出数据 建议在一对一通话状态为连接中时或者加入频道成功后,在子线程不断的调用此方法获取音频输出数据
- 参数
-
buf 字节缓冲区,从媒体层获取的音频输出数据将被存入此缓冲区,需要传入 unsigned char* 对象。缓冲区的容量为(采样频率*采样通道数/100) sampleRateHz 输出源的采集频率,取值范围:8000,16000,32000,44100,48000 channels 输出源的采样通道数,取值范围:1或2 length 音频输出数据的字节长度,即 buf 参数的字节长度
- 返回
- 是否正常调用
- true: 正常执行调用流程
- false: 调用失败
◆ getAudioOutputType
- (NSString* __nullable) getAudioOutputType |
获得当前音频模式,目前只支持听筒和扬声器,iOS 使用
- 返回
- 音频模式
◆ inputCustomAudioData:sampleRateHz:channels:playDelayMS:recDelayMS:clockDrift:
- (bool) inputCustomAudioData: | (NSData *_Nonnull) | data | |
sampleRateHz: | (int) | sampleRateHz | |
channels: | (int) | channels | |
playDelayMS: | (int) | playDelayMS | |
recDelayMS: | (int) | recDelayMS | |
clockDrift: | (int) | clockDrift | |
将音频输入数据输入到媒体层 当 autoStartAudioInputDevice 为 false 时才可以将音频输入数据输入到媒体层 建议在一对一通话状态为连接中时或者加入频道成功后,在子线程不断的调用此方法传入音频数据
- 参数
-
data 外部采集数据源,需要传入 NSData 对象 sampleRateHz 外部输入源的采样频率,取值范围:8000,16000,32000,44100,48000 channels 外部输入源的采样通道数,取值范围:1或2 playDelayMS 播放延时 一般设为0 recDelayMS 采集延时 一般设为0 clockDrift 时钟漂移 一般设为0
- 返回
- 是否正常调用
- true: 正常执行调用流程
- false: 调用失败
◆ isSpeakerOn
- (bool) isSpeakerOn |
扬声器是否已打开,iOS 使用
- true: 已打开
- false: 未打开
◆ registerAudioFrameCallback:
- (void) registerAudioFrameCallback: | (id< JCAudioFrameCallback > __nullable) | callback |
注册语音观测器对象。
该方法用于注册语音观测器对象,即注册回调。当需要 SDK 给出 onAudioInputFrame 或 onAudioOutputFrame 回调时,需要使用该方法注册回调。 该方法需要在加入频道前或开始通话前调用。
- 参数
-
callback 实现 JCAudioFrameCallback 协议的对象。传入 nil 表示取消注册。我们建议在收到 onLeave 或 onStop 或 onCallItemRemove 后调用,来释放语音观测器对象。
◆ registerVideoFrameCallback:
- (void) registerVideoFrameCallback: | (id< JCVideoFrameCallback > __nullable) | callback |
注册视频观测器对象。
该方法用于注册视频观测器对象,即注册回调。当需要 SDK 给出 onVideoCaptureFrame 或 onVideoRenderFrame 回调时,需要使用该方法注册回调。 该方法需要在加入频道前或开始通话前调用。
- 参数
-
callback JCVideoFrameCallback 对象。传入 nil 表示取消注册。我们建议在收到 onLeave 或 onStop 或 onCallItemRemove 后调用,来释放语音观测器对象。
- 返回
- 是否正常调用
- true: 正常执行调用流程
- false: 调用失败
◆ setCameraProperty:height:framerate:
- (void) setCameraProperty: | (int) | width | |
height: | (int) | height | |
framerate: | (int) | framerate | |
设置摄像头采集属性
在调用 startSelfVideo 方法或 startVideo 方法开启自身视频渲染前设置即可生效
- 参数
-
width 采集宽度,默认640 height 采集高度,默认360 frameRate 采集帧速率,默认24
◆ setScreenCaptureProperty:height:framerate:
- (void) setScreenCaptureProperty: | (int) | width | |
height: | (int) | height | |
framerate: | (int) | framerate | |
设置屏幕共享采集属性
在调用 enableScreenShare 方法开启屏幕共享前设置即可生效
- 参数
-
width 采集宽度,默认1280 height 采集高度,默认720 frameRate 采集帧速率,默认10
◆ setVideoFileFrame:angle:mirror:
- (void) setVideoFileFrame: | (CVPixelBufferRef __nonnull) | srcFrame | |
angle: | (int) | angle | |
mirror: | (int) | mirror | |
向文件视频源逐帧添加视频数据
调用此方法时要保证文件视频源已开启
- 注解
- 当 format 为 H264 格式并且是关键帧时:
- 第一帧一定要包含关键帧,并且需要将 0x67 0x68 0x65 的数据作为完整一帧传入,其中0x67,0x68为pps,0x65为关键帧标识
- 后续P帧以 0x41 数据形式传入
- 关键帧要以固定间隔传入,例如5秒,否则一开始可能有几秒对端无法显示视频
- 参数
-
srcFrame 视频数据 angle 角度, 为 90 的倍数 mirror 是否镜像,0 不镜像,1 镜像
◆ setVideoFileFrame:format:width:height:
- (void) setVideoFileFrame: | (NSData *__nonnull) | srcFrame | |
format: | (JCMediaDeviceVideoPixelFormat) | format | |
width: | (int) | width | |
height: | (int) | height | |
逐帧采集视频画面
调用此方法时要保证文件视频源已开启
- 注解
- 当 format 为 H264 格式并且是关键帧时:
- 第一帧一定要包含关键帧,并且需要将 0x67 0x68 0x65 的数据作为完整一帧传入,其中0x67,0x68为pps,0x65为关键帧标识
- 后续P帧以 0x41 数据形式传入
- 关键帧要以固定间隔传入,例如5秒,否则一开始可能有几秒对端无法显示视频
- 参数
-
data 画面二进制数据 format 视频像素格式 width 宽 height 高
◆ startAudio
- (bool) startAudio |
启动音频
在通话连接中或者加入频道成功时,SDK内部会自动调用此方法来启动音频,上层无需再调用此方法
- 返回
- 调用是否成功
- true:调用成功
- false:调用失败
◆ startCamera
- (bool) startCamera |
开启摄像头
- 注解
- 调用此方法时需要保证默认摄像头不为空,即 defaultCamera 不为空,否则将直接返回 false
- 返回
- 调用是否成功
- true:正常执行调用流程
- 若调用此方法前摄像头已打开,不会收到回调通知
- 若调用此方法前摄像头未打开,会收到 onCameraUpdate 通知
- false:调用失败
- true:正常执行调用流程
◆ startCameraVideo:
- (JCMediaDeviceVideoCanvas* __nullable) startCameraVideo: | (JCMediaDeviceRender) | type |
开始自身视频渲染
获取本端视频预览对象 JCMediaDeviceVideoCanvas,通过此对象能获得视图用于UI显示
一对一通话建议使用 startSelfVideo 方法代替,多方通话建议使用 startVideo 方法代替
- 注解
- 调用此方法时需要保证默认摄像头不为空,即 defaultCamera 不为空,否则将直接返回 nil
- 参数
-
type 渲染模式: - JCMediaDeviceRenderFullScreen : 铺满窗口,会有裁剪
- JCMediaDeviceRenderFullContent : 全图像显示,会有黑边
- JCMediaDeviceRenderFullAuto : 自适应
- 返回
- JCMediaDeviceVideoCanvas 对象:开始自身视频渲染成功
- nil:开始自身视频渲染失败
◆ startCameraVideo:view:
- (JCMediaDeviceVideoCanvas* __nullable) startCameraVideo: | (JCMediaDeviceRender) | type | |
view: | (JCView *__nonnull) | view | |
开始自身视频渲染
获取本端视频预览对象 JCMediaDeviceVideoCanvas,通过此对象能获得视图用于UI显示
一对一通话建议使用 startSelfVideo 方法代替,多方通话建议使用 startVideo 方法代替
- 注解
- 调用此方法时需要保证默认摄像头不为空,即 defaultCamera 不为空,否则将直接返回 nil
- 参数
-
type 渲染模式: - JCMediaDeviceRenderFullScreen : 铺满窗口,会有裁剪
- JCMediaDeviceRenderFullContent : 全图像显示,会有黑边
- JCMediaDeviceRenderFullAuto : 自适应
view 渲染视图
- 返回
- JCMediaDeviceVideoCanvas 对象:开始自身视频渲染成功
- nil:开始自身视频渲染失败
◆ startVideo:renderType:
- (JCMediaDeviceVideoCanvas* __nullable) startVideo: | (NSString *__nonnull) | videoSource | |
renderType: | (JCMediaDeviceRender) | type | |
开始其他端的视频渲染
获取其他端的视频预览对象 JCMediaDeviceVideoCanvas,通过此对象能获得视图用于UI显示
一对一通话建议使用 startOtherVideo 方法代替,多方通话建议使用 startVideo 方法代替
- 参数
-
videoSource 渲染标识串,通过 JCMediaChannelParticipant 的 renderId 方法和 JCCallItem 的 renderId 方法可以得到 type 渲染模式: - JCMediaDeviceRenderFullScreen : 铺满窗口,会有裁剪
- JCMediaDeviceRenderFullContent : 全图像显示,会有黑边
- JCMediaDeviceRenderFullAuto : 自适应
- 返回
- JCMediaDeviceVideoCanvas 对象:开始自身视频渲染成功
- nil:开始自身视频渲染失败
◆ startVideo:renderType:view:
- (JCMediaDeviceVideoCanvas* __nullable) startVideo: | (NSString *__nonnull) | videoSource | |
renderType: | (JCMediaDeviceRender) | type | |
view: | (JCView *__nonnull) | view | |
开始其他端的视频渲染
获取其他端的视频预览对象 JCMediaDeviceVideoCanvas,通过此对象能获得视图用于UI显示
一对一通话建议使用 startOtherVideo 方法代替,多方通话建议使用 startVideo 方法代替
- 参数
-
videoSource 渲染标识串,通过 JCMediaChannelParticipant 的 renderId 方法和 JCCallItem 的 renderId 方法可以得到 type 渲染模式: - JCMediaDeviceRenderFullScreen : 铺满窗口
- JCMediaDeviceRenderFullContent : 全图像显示,会有黑边
- JCMediaDeviceRenderFullAuto : 自适应
view 渲染视图
◆ startVideoFile
- (bool) startVideoFile |
开启视频文件作为视频输入源
- 注解
- 加入会议前或者一对一通话接听前调用
- 文件和摄像头作为视频输入源只能存在一种,如果当前摄像头已开启的话会关闭摄像头
- 返回
- 调用是否成功
- true:正常执行调用流程
- 若调用此方法时文件视频源已开启,则不会收到回调
- 若调用此方法时文件视频源还未开启,则会收到 onCameraUpdate 回调
- false:调用失败,不会收到回调
- true:正常执行调用流程
◆ stopAudio
- (bool) stopAudio |
停止音频
在通话挂断时或者离开频道时,SDK内部会自动调用此方法来停止音频,上层无需再调用此方法
- 返回
- 调用是否成功
- true:调用成功
- false:调用失败
◆ stopCamera
- (bool) stopCamera |
关闭摄像头
- 返回
- 调用是否成功
- true:正常执行调用流程
- 调用此方法前摄像头已打开,不会收到回调通知
- 调用此方法前摄像头未打开,会收到 onCameraUpdate 通知
- false:调用失败
- true:正常执行调用流程
◆ stopVideo:
- (void) stopVideo: | (JCMediaDeviceVideoCanvas *__nonnull) | canvas |
停止视频渲染
一对一通话建议使用 stopSelfVideo 和 stopOtherVideo 方法代替,多方通话渲染建议使用 stopVideo 方法代替
- 参数
-
canvas JCMediaDeviceVideoCanvas 对象,由 startVideo 或 startCameraVideo 返回
◆ stopVideoFile
- (bool) stopVideoFile |
关闭逐帧采集画面
- 返回
- 调用是否成功
- true:正常执行调用流程
- 若调用此方法时文件视频源已关闭,不会收到回调
- 若调用此方法时文件视频源未关闭,则会收到 onCameraUpdate 回调
- false:调用失败
- true:正常执行调用流程
◆ switchCamera
- (bool) switchCamera |
切换摄像头
内部会根据当前摄像头类型来进行切换
- 调用此方法时要保证摄像头已打开,否则将直接返回 false
- 设备拥有两个以上摄像头,否则将直接返回 true
- 满足以上两个条件后,内部会调用 switchCamera:(JCMediaDeviceCamera *)camera 方法并提供返回值
- 返回
- 调用是否成功
- true:调用成功
- false:调用失败
◆ switchCamera:
- (bool) switchCamera: | (JCMediaDeviceCamera *__nonnull) | camera |
切换摄像头
调用此方法时需要保证摄像头已打开并且摄像头数大于0,否则将直接返回 false
- 参数
-
camera 摄像头
- 返回
- 调用是否成功
- true:正常执行调用流程
- 摄像头个数为1,不会收到回调
- 摄像头个数大于1,会收到 onCameraUpdate 通知
- false:调用失败,不会收到回调
- true:正常执行调用流程
属性说明
◆ audioInput
|
readwritenonatomicstrong |
当前音频输入设备,mac 使用
◆ audioInputs
|
readnonatomicassign |
音频输入设备列表,mac 使用
◆ audioInterrupt
|
readnonatomicassign |
是否声音被中断
◆ audioOutput
|
readwritenonatomicstrong |
当前音频输出设备,mac 使用
◆ audioOutputs
|
readnonatomicassign |
音频输出设备列表,mac 使用
◆ audioParam
|
readwritenonatomicstrong |
音频参数
此参数不设置,将使用默认值。此参数在调用 startAudio 方法前设置,即连接通话或加入频道前设置此参数
◆ audioStart
|
readnonatomicassign |
音频是否启动
一般正式开启通话前需要调用此接口
- true:调用成功
- false:调用失败
◆ camera
|
readnonatomicstrong |
当前使用的摄像头
◆ cameraOpen
|
readnonatomicassign |
摄像头是否已打开
- true: 已打开
- false: 未打开
◆ cameras
|
readnonatomicassign |
摄像头列表
◆ defaultCamera
|
readwritenonatomicstrong |
默认摄像头
◆ defaultSpeakerOn
|
readwritenonatomicassign |
没有插入耳机或外接蓝牙时是否默认开启扬声器,默认关闭,iOS 使用
- true 默认开启
- false 默认不开启
◆ desktops
|
readnonatomicassign |
桌面列表,mac 使用
◆ screenshareWindow
|
readwritenonatomicstrong |
屏幕分享的窗口,mac 使用
◆ useInternalAudioDeviceLogic
|
readwritenonatomicassign |
是否使用内部音频设备逻辑 内部音频设备逻辑如下:
1.打开扬声器 - 使用扬声器输出声音
2.连上蓝牙耳机 - 使用蓝牙耳机输出声音,如果扬声器开着则关闭扬声器
3.插入耳机 - 使用耳机输出声音,如果扬声器开着则关闭扬声器
4.蓝牙耳机和有线耳机以最后连上的作为输出
5.关闭扬声器 - (蓝牙耳机或有线耳机) 优于 听筒
- true: 使用内部音频设备逻辑
- false: 不使用内部音频设备逻辑
◆ videoAngle
|
readwritenonatomicassign |
视频渲染窗体角度
- JCMediaDeviceVideoAngelAuto : 自动
- JCMediaDeviceVideoAngel0 : 0°
- JCMediaDeviceVideoAngel90 : 90°
- JCMediaDeviceVideoAngel180 : 180°
- JCMediaDeviceVideoAngel270 : 270°
◆ videoFileId
|
readnonatomicstrong |
视频文件作为本地视频源的渲染标识
◆ videoFileOpen
|
readnonatomicassign |
文件播放是否打开
- true: 已打开文件播放
- false: 未打开文件播放
◆ windows
|
readnonatomicassign |
窗口列表,mac 使用
该类的文档由以下文件生成:
- JCSDKOC/JCSDKOC/JCMediaDevice/JCMediaDevice.h