#include <JCMediaDevice.h>
类方法 | |
(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 |
NSString * | screenCaptureVideoFileId |
NSString *__nullable | currentScreenCaptureId |
当前共享的屏幕或者窗口id | |
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
- 调用此方法创建 JCMediaDevice 对象后,期间没有调用过
- 参数
-
client JCClient 对象 callback JCMediaDeviceCallback 对象,用于回调相关通知
- 返回
- JCMediaDevice 对象
- 异常
-
JCClient、JCMediaDeviceCallback 任意一个参数传空就会调用失败
◆ destroy
+ (void) destroy |
销毁 JCMediaDevice 对象
该方法为同步调用,需要等待 JCMediaDevice 实例资源释放后才能执行其他操作,调用此方法后,你将无法再使用 JCMediaDevice 的其它方法和回调。
我们 不建议 在 JCSDK 的回调中调用此方法销毁 JCMediaDevice 对象,否则会出现崩溃。
如需在销毁后再次创建 JCMediaDevice 实例,需要等待 destroy 方法执行结束后再创建实例。
◆ enableFlash:
- (bool) enableFlash: | (bool) | enable |
是否使用闪光灯
- 返回
- 返回使用结果
◆ enableScreenCapture:appGroupId:preferredExtension:
- (bool) enableScreenCapture: | (bool) | enable | |
appGroupId: | (NSString *) | appGroupId | |
preferredExtension: | (NSString *) | preferredExtension | |
开启/关闭屏幕采集
- 注解
- 支持应用外采集,需要 iOS 12.0 及以上(不包含 iOS 13.0),需要集成屏幕采集插件, 调用此方法后成功,界面上会拉起屏幕采集插件,需手动点击"开始直播"按钮进行屏幕采集,
- 参数
-
enable 是否开启 appGroupId extension 和 app 所处于的同一个 groupId,如果是关闭可以传空 preferredExtension 希望打开的 extension 的 ID,如果是关闭可以传空
- 返回
- 返回 true 表示开启/关闭屏幕共享成功,false 表示失败
◆ 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 使用
- 返回
- 音频模式
◆ getExposureCompensationStep
- (float) getExposureCompensationStep |
获取摄像头曝光补偿步长
- 返回
- 获取曝光补偿步长:
◆ getInputVolume
- (int) getInputVolume |
获取音频采集音量
- 返回
- 音频采集音量,范围从小到大是(0,100)
◆ getMaxExposureCompensation
- (int) getMaxExposureCompensation |
获取摄像头曝光补偿最大最小值,单位EV
- 返回
- 最大曝光补偿:
◆ getMinExposureCompensation
- (int) getMinExposureCompensation |
获取摄像头曝光补偿最大最小值,单位EV
- 返回
- 最小曝光补偿:
◆ getOutputVolume
- (int) getOutputVolume |
获取音频播放音量
- 返回
- 音频播放音量,范围从小到大是(0,80)
◆ 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: 调用失败
◆ isCameraFlashSupported
- (bool) isCameraFlashSupported |
查询摄像头是否支持闪光灯
- 返回
- 是否支持闪光灯:
◆ 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
◆ setCameraZoom:
- (int) setCameraZoom: | (float) | zoom |
设置摄像头变焦
- 返回
- 返回使用结果
◆ setExposureCompensation:
- (int) setExposureCompensation: | (float) | exposureValue |
设置摄像头曝光补偿
- 返回
- 返回使用结果
◆ 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 |
摄像头列表
◆ currentScreenCaptureId
|
readwritenonatomicstrong |
当前共享的屏幕或者窗口id
◆ defaultCamera
|
readwritenonatomicstrong |
默认摄像头
◆ defaultSpeakerOn
|
readwritenonatomicassign |
没有插入耳机或外接蓝牙时是否默认开启扬声器,默认关闭,iOS 使用
- true 默认开启
- false 默认不开启
◆ desktops
|
readnonatomicassign |
桌面列表,mac 使用
◆ screenCaptureVideoFileId
|
readnonatomicstrong |
视频文件作为屏幕共享视频源的视频流ID
◆ 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