构造函数

(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 的所有接口函数,如无特殊说明,都建议在主线程调用

注解
参数
clientJCClient 对象
callbackJCMediaDeviceCallback 对象,用于回调相关通知
返回
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 给出 onAudioInputFrameonAudioOutputFrame 回调时,需要使用该方法注册回调。 该方法需要在加入频道前或开始通话前调用。

参数
callback实现 JCAudioFrameCallback 协议的对象。传入 nil 表示取消注册。我们建议在收到 onLeaveonStoponCallItemRemove 后调用,来释放语音观测器对象。

◆ registerVideoFrameCallback:

- (void) registerVideoFrameCallback: (id< JCVideoFrameCallback > __nullable)  callback

注册视频观测器对象。

该方法用于注册视频观测器对象,即注册回调。当需要 SDK 给出 onVideoCaptureFrameonVideoRenderFrame 回调时,需要使用该方法注册回调。 该方法需要在加入频道前或开始通话前调用。

参数
callbackJCVideoFrameCallback 对象。传入 nil 表示取消注册。我们建议在收到 onLeaveonStoponCallItemRemove 后调用,来释放语音观测器对象。
返回
是否正常调用
  • 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:调用失败

◆ startCameraVideo:

- (JCMediaDeviceVideoCanvas* __nullable) startCameraVideo: (JCMediaDeviceRender type

开始自身视频渲染

获取本端视频预览对象 JCMediaDeviceVideoCanvas,通过此对象能获得视图用于UI显示

一对一通话建议使用 startSelfVideo 方法代替,多方通话建议使用 startVideo 方法代替

注解
调用此方法时需要保证默认摄像头不为空,即 defaultCamera 不为空,否则将直接返回 nil
参数
type渲染模式:
返回

◆ startCameraVideo:view:

- (JCMediaDeviceVideoCanvas* __nullable) startCameraVideo: (JCMediaDeviceRender type
view: (JCView *__nonnull)  view 

开始自身视频渲染

获取本端视频预览对象 JCMediaDeviceVideoCanvas,通过此对象能获得视图用于UI显示

一对一通话建议使用 startSelfVideo 方法代替,多方通话建议使用 startVideo 方法代替

注解
调用此方法时需要保证默认摄像头不为空,即 defaultCamera 不为空,否则将直接返回 nil
参数
type渲染模式:
view渲染视图
返回

◆ startVideo:renderType:

- (JCMediaDeviceVideoCanvas* __nullable) startVideo: (NSString *__nonnull)  videoSource
renderType: (JCMediaDeviceRender type 

开始其他端的视频渲染

获取其他端的视频预览对象 JCMediaDeviceVideoCanvas,通过此对象能获得视图用于UI显示

一对一通话建议使用 startOtherVideo 方法代替,多方通话建议使用 startVideo 方法代替

参数
videoSource渲染标识串,通过 JCMediaChannelParticipantrenderId 方法和 JCCallItemrenderId 方法可以得到
type渲染模式:
返回

◆ startVideo:renderType:view:

- (JCMediaDeviceVideoCanvas* __nullable) startVideo: (NSString *__nonnull)  videoSource
renderType: (JCMediaDeviceRender type
view: (JCView *__nonnull)  view 

开始其他端的视频渲染

获取其他端的视频预览对象 JCMediaDeviceVideoCanvas,通过此对象能获得视图用于UI显示

一对一通话建议使用 startOtherVideo 方法代替,多方通话建议使用 startVideo 方法代替

参数
videoSource渲染标识串,通过 JCMediaChannelParticipantrenderId 方法和 JCCallItemrenderId 方法可以得到
type渲染模式:
view渲染视图
返回
JCMediaDeviceVideoCanvas 对象

◆ startVideoFile

- (bool) startVideoFile

开启视频文件作为视频输入源

注解
  • 加入会议前或者一对一通话接听前调用
  • 文件和摄像头作为视频输入源只能存在一种,如果当前摄像头已开启的话会关闭摄像头
返回
调用是否成功
  • true:正常执行调用流程
    • 若调用此方法时文件视频源已开启,则不会收到回调
    • 若调用此方法时文件视频源还未开启,则会收到 onCameraUpdate 回调
  • false:调用失败,不会收到回调

◆ stopAudio

- (bool) stopAudio

停止音频

在通话挂断时或者离开频道时,SDK内部会自动调用此方法来停止音频,上层无需再调用此方法

返回
调用是否成功
  • true:调用成功
  • false:调用失败

◆ stopCamera

- (bool) stopCamera

关闭摄像头

返回
调用是否成功
  • true:正常执行调用流程
    • 调用此方法前摄像头已打开,不会收到回调通知
    • 调用此方法前摄像头未打开,会收到 onCameraUpdate 通知
  • false:调用失败

◆ stopVideo:

- (void) stopVideo: (JCMediaDeviceVideoCanvas *__nonnull)  canvas

停止视频渲染

一对一通话建议使用 stopSelfVideostopOtherVideo 方法代替,多方通话渲染建议使用 stopVideo 方法代替

参数
canvasJCMediaDeviceVideoCanvas 对象,由 startVideostartCameraVideo 返回

◆ stopVideoFile

- (bool) stopVideoFile

关闭逐帧采集画面

返回
调用是否成功
  • true:正常执行调用流程
    • 若调用此方法时文件视频源已关闭,不会收到回调
    • 若调用此方法时文件视频源未关闭,则会收到 onCameraUpdate 回调
  • false:调用失败

◆ switchCamera

- (bool) switchCamera

切换摄像头

内部会根据当前摄像头类型来进行切换

  • 调用此方法时要保证摄像头已打开,否则将直接返回 false
  • 设备拥有两个以上摄像头,否则将直接返回 true
  • 满足以上两个条件后,内部会调用 switchCamera:(JCMediaDeviceCamera *)camera 方法并提供返回值
返回
调用是否成功
  • true:调用成功
  • false:调用失败

◆ switchCamera:

- (bool) switchCamera: (JCMediaDeviceCamera *__nonnull)  camera

切换摄像头

调用此方法时需要保证摄像头已打开并且摄像头数大于0,否则将直接返回 false

参数
camera摄像头
返回
调用是否成功
  • true:正常执行调用流程
    • 摄像头个数为1,不会收到回调
    • 摄像头个数大于1,会收到 onCameraUpdate 通知
  • false:调用失败,不会收到回调

属性说明

◆ audioInput

- (JCMediaDeviceAudio* __nullable) audioInput
readwritenonatomicstrong

当前音频输入设备,mac 使用

◆ audioInputs

- (NSArray<JCMediaDeviceAudio*>* __nonnull) audioInputs
readnonatomicassign

音频输入设备列表,mac 使用

◆ audioInterrupt

- (bool) audioInterrupt
readnonatomicassign

是否声音被中断

◆ audioOutput

- (JCMediaDeviceAudio* __nullable) audioOutput
readwritenonatomicstrong

当前音频输出设备,mac 使用

◆ audioOutputs

- (NSArray<JCMediaDeviceAudio*>* __nonnull) audioOutputs
readnonatomicassign

音频输出设备列表,mac 使用

◆ audioParam

- (JCMediaDeviceAudioParam* _Nonnull) audioParam
readwritenonatomicstrong

音频参数

此参数不设置,将使用默认值。此参数在调用 startAudio 方法前设置,即连接通话或加入频道前设置此参数

◆ audioStart

- (bool) audioStart
readnonatomicassign

音频是否启动

一般正式开启通话前需要调用此接口

  • true:调用成功
  • false:调用失败

◆ camera

- (JCMediaDeviceCamera* __nullable) camera
readnonatomicstrong

当前使用的摄像头

◆ cameraOpen

- (bool) cameraOpen
readnonatomicassign

摄像头是否已打开

  • true: 已打开
  • false: 未打开

◆ cameras

- (NSArray<JCMediaDeviceCamera*>* __nonnull) cameras
readnonatomicassign

摄像头列表

◆ defaultCamera

- (JCMediaDeviceCamera* __nullable) defaultCamera
readwritenonatomicstrong

默认摄像头

◆ defaultSpeakerOn

- (bool) defaultSpeakerOn
readwritenonatomicassign

没有插入耳机或外接蓝牙时是否默认开启扬声器,默认关闭,iOS 使用

  • true 默认开启
  • false 默认不开启

◆ desktops

- (NSArray<JCMediaDeviceWindow*>* __nonnull) desktops
readnonatomicassign

桌面列表,mac 使用

◆ screenshareWindow

- (JCMediaDeviceWindow* __nullable) screenshareWindow
readwritenonatomicstrong

屏幕分享的窗口,mac 使用

◆ useInternalAudioDeviceLogic

- (bool) useInternalAudioDeviceLogic
readwritenonatomicassign

是否使用内部音频设备逻辑 内部音频设备逻辑如下:
1.打开扬声器 - 使用扬声器输出声音
2.连上蓝牙耳机 - 使用蓝牙耳机输出声音,如果扬声器开着则关闭扬声器
3.插入耳机 - 使用耳机输出声音,如果扬声器开着则关闭扬声器
4.蓝牙耳机和有线耳机以最后连上的作为输出
5.关闭扬声器 - (蓝牙耳机或有线耳机) 优于 听筒

  • true: 使用内部音频设备逻辑
  • false: 不使用内部音频设备逻辑

◆ videoAngle

- (JCMediaDeviceVideoAngel) videoAngle
readwritenonatomicassign

◆ videoFileId

- (NSString* __nonnull) videoFileId
readnonatomicstrong

视频文件作为本地视频源的渲染标识

◆ videoFileOpen

- (bool) videoFileOpen
readnonatomicassign

文件播放是否打开

  • true: 已打开文件播放
  • false: 未打开文件播放

◆ windows

- (NSArray<JCMediaDeviceWindow*>* __nonnull) windows
readnonatomicassign

窗口列表,mac 使用


该类的文档由以下文件生成:
最后更新时间: 11/9/2021, 5:34:32 PM