@class ITMGRoom;//房间相关@class ITMGAudioCtrl;//音频相关@class ITMGAudioEffectCtrl;//音效、伴奏相关
接口 | 接口含义 |
InitEngine | 初始化 GME |
Poll | 触发事件回调 |
Pause | 系统暂停 |
Resume | 系统恢复 |
Uninit | 反初始化 GME |
ITMGContext ITMGDelegate <NSObject>
ITMGContext* _context = [ITMGContext GetInstance];_context.TMGDelegate =self;
- (void)OnEvent:(ITMG_MAIN_EVENT_TYPE)eventType data:(NSDictionary*)data;
-(void)OnEvent:(ITMG_MAIN_EVENT_TYPE)eventType data:(NSDictionary *)data{NSLog(@"OnEvent:%lu,data:%@",(unsigned long)eventType,data);switch (eventType) {//对eventType进行判断}}
-(int)InitEngine:(NSString*)sdkAppID openID:(NSString*)openID;
参数 | 类型 | 含义 |
sdkAppId | String | |
OpenId | String | OpenId 只支持 Int64 类型(转为 string 传入)。 |
返回值 | 处理 |
QAV_OK= 0 | 初始化 SDK 成功 |
QAV_ERR_SDK_NOT_FULL_UPDATE= 7015 | 检查 SDK 文件是否完整,建议删除后重新导入 SDK |
_openId = _userIdText.text;_appId = _appIdText.text;[[ITMGContext GetInstance] InitEngine:SDKAPPID openID:_openId];
-(void)Poll;
[[ITMGContext GetInstance] Poll];
-(QAVResult)Pause;
-(QAVResult)Resume;
-(int)Uninit;
[[ITMGContext GetInstance] Uninit];
接口 | 接口含义 |
GenAuthBuffer | 初始化鉴权 |
EnterRoom | 加入房间 |
IsRoomEntered | 是否已经进入房间 |
ExitRoom | 退出房间 |
ChangeRoomType | 修改用户房间音频类型 |
GetRoomType | 获取用户房间音频类型 |
@interface QAVAuthBuffer : NSObject+ (NSData*) GenAuthBuffer:(unsigned int)appId roomId:(NSString*)roomId openID:(NSString*)openID key:(NSString*)key;+ @end
参数 | 类型 | 含义 |
appId | int | 来自腾讯云控制台的 AppId 号码。 |
roomId | NSString | 房间号,最大支持127字符。 |
openID | NSString | 用户标识。与 Init 时候的 openID相同。 |
key | NSString |
#import "GMESDK/QAVAuthBuffer.h"NSData* authBuffer = [QAVAuthBuffer GenAuthBuffer:SDKAPPID3RD.intValue roomId:_roomId openID:_openId key:AUTHKEY];
-(int)EnterRoom:(NSString*) roomId roomType:(int)roomType authBuffer:(NSData*)authBuffer;
参数 | 类型 | 含义 |
roomId | NSString | 房间号,最大支持127字符 |
roomType | int | 房间音频类型 |
authBuffer | NSData | 鉴权码 |
[[ITMGContext GetInstance] EnterRoom:_roomId roomType:_roomType authBuffer:authBuffer];
-(void)OnEvent:(ITMG_MAIN_EVENT_TYPE)eventType data:(NSDictionary *)data{NSLog(@"OnEvent:%lu,data:%@",(unsigned long)eventType,data);switch (eventType) {case ITMG_MAIN_EVENT_TYPE_ENTER_ROOM:{int result = ((NSNumber*)[data objectForKey:@"result"]).intValue;NSString* error_info = [data objectForKey:@"error_info"];//收到进房成功事件}break;}}
消息 | Data | 例子 |
ITMG_MAIN_EVENT_TYPE_ENTER_ROOM | result; error_info | {"error_info":"","result":0} |
ITMG_MAIN_EVENT_TYPE_ROOM_DISCONNECT | result; error_info | {"error_info":"waiting timeout, please check your network","result":0} |
ITMG_MAIN_EVENT_TYPE.ITMG_MAIN_EVENT_TYPE_ROOM_DISCONNECT
,此时 SDK 会自动进行重连,回调是 ITMG_MAIN_EVENT_TYPE_RECONNECT_START
,当重连成功时,会有 ITMG_MAIN_EVENT_TYPE_RECONNECT_SUCCESS
回调。错误码值 | 原因及建议方案 |
7006 | 鉴权失败,原因如下: AppID 不存在或者错误 authbuff 鉴权错误 鉴权过期 openID不符合规范 |
7007 | 已经在其它房间。 |
1001 | 已经在进房过程中,然后又重复了此操作。建议在进房回调返回之前不要再调用进房接口。 |
1003 | 已经进房了在房间中,又调用一次进房接口。 |
1101 | 确保已经初始化 SDK,确保 OpenId 是否符合规则,或者确保在同一线程调用接口,以及确保 Poll 接口正常调用。 |
-(int)ExitRoom
[[ITMGContext GetInstance] ExitRoom];
-(void)OnEvent:(ITMG_MAIN_EVENT_TYPE)eventType data:(NSDictionary *)data{NSLog(@"OnEvent:%lu,data:%@",(unsigned long)eventType,data);switch (eventType) {case ITMG_MAIN_EVENT_TYPE_EXIT_ROOM:{//收到退房成功事件}break;}}
消息 | Data | 例子 |
ITMG_MAIN_EVENT_TYPE_EXIT_ROOM | result; error_info | {"error_info":"","result":0} |
-(BOOL)IsRoomEntered;
[[ITMGContext GetInstance] IsRoomEntered];
-(int) SwitchRoom:(NSString *)roomID authBuffer:(NSData*)authBuffer;
参数 | 类型 | 含义 |
targetRoomID | NSString * | 将要进入的房间号 |
authBuffer | NSData* | 用将要进入的房间号生成的新鉴权 |
- (IBAction)swichRoom:(id)sender {NSData* authBuffer = [QAVAuthBuffer GenAuthBuffer:_appId.intValue roomID:_roomIdText.text openID:_openId key:_key];[[[ITMGContext GetInstance]GetRoom]SwitchRoom:_roomIdText.text authBuffer:authBuffer];}-(void)OnEvent:(ITMG_MAIN_EVENT_TYPE)eventType data:(NSDictionary *)data{NSString* log =[NSString stringWithFormat:@"OnEvent:%d,data:%@", (int)eventType, data];[self showLog:log];NSLog(@"====%@====",log);switch (eventType) {case ITMG_MAIN_EVENT_TYPE_SWITCH_ROOM:{int result = ((NSNumber*)[data objectForKey:@"result"]).intValue;NSString* log = nil;if (result == QAV_OK) {log = [NSString stringWithFormat:@"switch room success."];} else {log = [NSString stringWithFormat:@"switch room failed."];}[self showLog:log];break;}}}
-(int) StartRoomSharing:(NSString *)targetRoomID targetOpenID:(NSString *)targetOpenID authBuffer:(NSData*)authBuffer;-(int) StopRoomSharing;
参数 | 类型 | 含义 |
targetRoomID | NSString * | 将要连麦的房间号 |
targetOpenID | NSString * | 将要连麦的目标 OpenID |
authBuffer | NSData* | 保留标志位,只需填 NULL |
- (IBAction)shareRoom:(id)sender {if(_shareRoomSwitch.isOn){[[[ITMGContext GetInstance]GetRoom]StartRoomSharing:_shareRoomID.text targetOpenID:_shareOpenID.text authBuffer:NULL];}else{[[[ITMGContext GetInstance]GetRoom]StopRoomSharing];}}}
event_id | 含义 | 应用侧维护内容 |
ITMG_EVENT_ID_USER_ENTER | 有成员进入房间 | 应用侧维护成员列表 |
ITMG_EVENT_ID_USER_EXIT | 有成员退出房间 | 应用侧维护成员列表 |
ITMG_EVENT_ID_USER_HAS_AUDIO | 有成员发送音频包,通过此事件可以判断用户是否说话,并展示声纹效果,可配合 GetRecvStreamLevel 一起调用 | 应用侧维护通话成员列表 |
ITMG_EVENT_ID_USER_NO_AUDIO | 有成员停止发送音频包 | 应用侧维护通话成员列表 |
-(void)OnEvent:(ITMG_MAIN_EVENT_TYPE)eventType data:(NSDictionary *)data{ITMG_EVENT_ID_USER_UPDATE event_id=((NSNumber*)[data objectForKey:@"event_id"]).intValue;NSMutableArray* uses = [NSMutableArray arrayWithArray: [data objectForKey:@"user_list"]];NSLog(@"OnEvent:%lu,data:%@",(unsigned long)eventType,data);switch (eventType) {case ITMG_MAIN_EVNET_TYPE_USER_UPDATE:{//进行处理//开发者对参数进行解析,得到信息 event_id及 user_listswitch (eventID){case ITMG_EVENT_ID_USER_ENTER://有成员进入房间break;case ITMG_EVENT_ID_USER_EXIT://有成员退出房间break;case ITMG_EVENT_ID_USER_HAS_AUDIO://有成员发送音频包break;case ITMG_EVENT_ID_USER_NO_AUDIO://有成员停止发送音频包break;}break;}}}
消息 | Data | 例子 |
ITMG_MAIN_EVNET_TYPE_USER_UPDATE | event_id; user_list | {"event_id":0,"user_list":""} |
ITMGContext GetAudioCtrl -(QAVResult)AddAudioBlackList:(NSString*)openID;
参数 | 类型 | 含义 |
openId | NSString | 需添加黑名单的用户 openid |
[[[ITMGContext GetInstance]GetAudioCtrl ] AddAudioBlackList[id]];
-(QAVResult)RemoveAudioBlackList:(NSString*)openID;
参数 | 类型 | 含义 |
openId | NSString | 需移除黑名单的用户 openid |
[[[ITMGContext GetInstance]GetAudioCtrl ] RemoveAudioBlackList[openId]];
接口 | 接口含义 |
EnableMic | 开关麦克风 |
GetMicState | 获取麦克风状态 |
EnableAudioCaptureDevice | 开关采集设备 |
IsAudioCaptureDeviceEnabled | 获取采集设备状态 |
EnableAudioSend | 打开关闭音频上行 |
IsAudioSendEnabled | 获取音频上行状态 |
GetMicLevel | 获取实时麦克风音量 |
GetSendStreamLevel | 获取音频上行实时音量 |
SetMicVolume | 设置麦克风音量 |
GetMicVolume | 获取麦克风音量 |
EnableSpeaker | 开关扬声器 |
GetSpeakerState | 获取扬声器状态 |
EnableAudioPlayDevice | 开关播放设备 |
IsAudioPlayDeviceEnabled | 获取播放设备状态 |
EnableAudioRecv | 打开关闭音频下行 |
IsAudioRecvEnabled | 获取音频下行状态 |
GetSpeakerLevel | 获取实时扬声器音量 |
GetRecvStreamLevel | 获取房间内其他成员下行实时音量 |
SetSpeakerVolume | 设置扬声器音量 |
GetSpeakerVolume | 获取扬声器音量 |
EnableLoopBack | 开关耳返 |
-(QAVResult)EnableMic:(BOOL)enable;
参数 | 类型 | 含义 |
isEnabled | boolean | 如果需要打开麦克风,则传入的参数为 YES 如果关闭麦克风,则传入的参数为 NO |
//打开麦克风[[[ITMGContext GetInstance] GetAudioCtrl] EnableMic:YES];
-(int)GetMicState;
[[[ITMGContext GetInstance] GetAudioCtrl] GetMicState];
-(QAVResult)EnableAudioCaptureDevice:(BOOL)enabled;
参数 | 类型 | 含义 |
enabled | BOOL | 如果需要打开采集设备,则传入的参数为 YES 如果关闭采集设备,则参数为 NO |
//打开采集设备[[[ITMGContext GetInstance]GetAudioCtrl ]EnableAudioCaptureDevice:enabled];
-(BOOL)IsAudioCaptureDeviceEnabled;
BOOL IsAudioCaptureDevice = [[[ITMGContext GetInstance] GetAudioCtrl] IsAudioCaptureDeviceEnabled];
-(QAVResult)EnableAudioSend:(BOOL)enable;
参数 | 类型 | 含义 |
enable | BOOL | 如果需要打开音频上行,则传入的参数为 YES 如果关闭音频上行,则传入的参数为 NO |
[[[ITMGContext GetInstance]GetAudioCtrl ]EnableAudioSend:enabled];
-(BOOL)IsAudioSendEnabled;
BOOL IsAudioSend = [[[ITMGContext GetInstance] GetAudioCtrl] IsAudioSendEnabled];
-(int)GetMicLevel;
[[[ITMGContext GetInstance] GetAudioCtrl] GetMicLevel];
-(int)GetSendStreamLevel();
[[[ITMGContext GetInstance] GetAudioCtrl] GetSendStreamLevel];
-(QAVResult)SetMicVolume:(int) volume;
参数 | 类型 | 含义 |
volume | int | 设置音量,范围0 - 200 |
[[[ITMGContext GetInstance] GetAudioCtrl] SetMicVolume:100];
-(int) GetMicVolume;
[[[ITMGContext GetInstance] GetAudioCtrl] GetMicVolume];
-(void)EnableSpeaker:(BOOL)enable;
参数 | 类型 | 含义 |
isEnabled | boolean | 如果需要关闭扬声器,则传入的参数为 NO 如果打开扬声器,则传入的参数为 YES |
//打开扬声器[[[ITMGContext GetInstance] GetAudioCtrl] EnableSpeaker:YES];
-(int)GetSpeakerState;
[[[ITMGContext GetInstance] GetAudioCtrl] GetSpeakerState];
-(QAVResult)EnableAudioPlayDevice:(BOOL)enabled;
参数 | 类型 | 含义 |
enabled | BOOL | 如果需要关闭播放设备,则传入的参数为 NO 如果打开播放设备,则传入的参数为 YES |
//打开播放设备[[[ITMGContext GetInstance]GetAudioCtrl ]EnableAudioPlayDevice:enabled];
-(BOOL)IsAudioPlayDeviceEnabled;
BOOL IsAudioPlayDevice = [[[ITMGContext GetInstance] GetAudioCtrl] IsAudioPlayDeviceEnabled];
-(QAVResult)EnableAudioRecv:(BOOL)enabled;
参数 | 类型 | 含义 |
enabled | BOOL | 如果需要打开音频下行,则传入的参数为 YES 如果关闭音频下行,则传入的参数为 NO |
[[[ITMGContext GetInstance]GetAudioCtrl ]EnableAudioRecv:enabled];
-(BOOL)IsAudioRecvEnabled;
BOOL IsAudioRecv = [[[ITMGContext GetInstance] GetAudioCtrl] IsAudioRecvEnabled];
-(int)GetSpeakerLevel;
[[[ITMGContext GetInstance] GetAudioCtrl] GetSpeakerLevel];
-(int)GetRecvStreamLevel:(NSString*) openID;
参数 | 类型 | 含义 |
openID | NSString | 房间其他成员的 openId |
[[[ITMGContext GetInstance] GetAudioCtrl] GetRecvStreamLevel:(NSString*) openId
-(int) SetSpeakerVolumeByOpenID:(NSString *)openId volume:(int)volume;
参数 | 类型 | 含义 |
openId | String * | 需要调节音量大小的 OpenID |
volume | int | 百分比,建议[0-200],其中100为默认值 |
-(int) GetSpeakerVolumeByOpenID:(NSString *)openId;
-(QAVResult)SetSpeakerVolume:(int)vol;
参数 | 类型 | 含义 |
vol | int | 设置音量,范围0 - 200 |
[[[ITMGContext GetInstance] GetAudioCtrl] SetSpeakerVolume:100];
-(int)GetSpeakerVolume;
[[[ITMGContext GetInstance] GetAudioCtrl] GetSpeakerVolume];
EnableLoopBack + EnableSpeaker
才可以听到自己声音。-(QAVResult)EnableLoopBack:(BOOL)enable;
参数 | 类型 | 含义 |
enable | boolean | 设置是否启动 |
[[[ITMGContext GetInstance] GetAudioCtrl] EnableLoopBack:YES];
-(int)ChangeRoomType:(int)nRoomType;
参数 | 类型 | 含义 |
nRoomType | int | 房间切换成的目标类型,房间音频类型请参见 EnterRoom 接口 |
[[[ITMGContext GetInstance]GetRoom ]ChangeRoomType:_roomType];
-(int)GetRoomType;
[[[ITMGContext GetInstance]GetRoom ]GetRoomType];
事件子类型 | 代表参数 | 含义 |
ITMG_ROOM_CHANGE_EVENT_ENTERROOM | 1 | 表示在进房的过程中,自带的音频类型与房间不符合,被修改为所进入房间的音频类型 |
ITMG_ROOM_CHANGE_EVENT_START | 2 | 表示已经在房间内,音频类型开始切换(例如调用 ChangeRoomType 接口后切换音频类型 ) |
ITMG_ROOM_CHANGE_EVENT_COMPLETE | 3 | 表示已经在房间,音频类型切换完成 |
ITMG_ROOM_CHANGE_EVENT_REQUEST | 4 | 表示房间成员调用 ChangeRoomType 接口,请求切换房间音频类型 |
-(void)OnEvent:(ITMG_MAIN_EVENT_TYPE)eventType data:(NSDictionary *)data {NSLog(@"OnEvent:%lu,data:%@",(unsigned long)eventType,data);switch (eventType) {case ITMG_MAIN_EVENT_TYPE_CHANGE_ROOM_TYPE:NSLog(@"ITMG_MAIN_EVENT_TYPE_CHANGE_ROOM_TYPE:%@ ",data);int result = ((NSNumber*)[data objectForKey:@"result"]).intValue;int newRoomType = ((NSNumber*) [data objectForKey:@"new_room_type"]).intValue;int subEventType = ((NSNumber*) [data objectForKey:@"sub_event_type"]).intValue;}}
消息 | Data | 例子 |
ITMG_MAIN_EVENT_TYPE_CHANGE_ROOM_TYPE | result;error_info;new_room_type;subEventType | {"error_info":"","new_room_type":0,"subEventType":0,"result":0} |
参数 | 类型 | 含义 |
weight | int | 范围是1 - 50,数值为50是音质评分极好,数值为1是音质评分很差,几乎不能使用,数值为0代表初始值,无含义。一般数值在 30 以下就可以提醒用户网络较差,建议切换网络。 |
loss | double | 上行丢包率。 |
delay | int | 音频触达延迟时间(ms)。 |
-(NSString*)GetSDKVersion;
[[ITMGContext GetInstance] GetSDKVersion];
-(ITMG_RECORD_PERMISSION)CheckMicPermission;
参数 | 数值 | 含义 |
ITMG_PERMISSION_GRANTED | 0 | 麦克风已授权 |
ITMG_PERMISSION_Denied | 1 | 麦克风被禁用 |
ITMG_PERMISSION_NotDetermined | 2 | 尚未弹出权限框向用户申请权限 |
ITMG_PERMISSION_ERROR | 3 | 接口调用错误 |
[[ITMGContext GetInstance] CheckMicPermission];
-(void)SetLogLevel:(ITMG_LOG_LEVEL)levelWrite (ITMG_LOG_LEVEL)levelPrint;
参数 | 类型 | 含义 |
levelWrite | ITMG_LOG_LEVEL | 设置写入日志的等级,TMG_LOG_LEVEL_NONE 表示不写入,默认为 TMG_LOG_LEVEL_INFO |
levelPrint | ITMG_LOG_LEVEL | 设置打印日志的等级,TMG_LOG_LEVEL_NONE 表示不打印,默认为 TMG_LOG_LEVEL_ERROR |
ITMG_LOG_LEVEL | 含义 |
TMG_LOG_LEVEL_NONE | 不打印日志 |
TMG_LOG_LEVEL_ERROR | 打印错误日志(默认) |
TMG_LOG_LEVEL_INFO | 打印提示日志 |
TMG_LOG_LEVEL_DEBUG | 打印开发调试日志 |
TMG_LOG_LEVEL_VERBOSE | 打印高频日志 |
[[ITMGContext GetInstance] SetLogLevel:TMG_LOG_LEVEL_INFO TMG_LOG_LEVEL_INFO];
-(void)SetLogPath:(NSString*)logDir;
参数 | 类型 | 含义 |
logDir | NSString | 路径 |
[[ITMGContext GetInstance] SetLogPath:Path];
-(NSString*)GetQualityTips;
[[[ITMGContext GetInstance]GetRoom ] GetQualityTips];
消息 | 消息代表的含义 |
ITMG_MAIN_EVENT_TYPE_ENTER_ROOM | 进入音频房间消息 |
ITMG_MAIN_EVENT_TYPE_EXIT_ROOM | 退出音频房间消息 |
ITMG_MAIN_EVENT_TYPE_ROOM_DISCONNECT | 房间因为网络等原因断开消息 |
ITMG_MAIN_EVENT_TYPE_CHANGE_ROOM_TYPE | 房间类型变化事件 |
ITMG_MAIN_EVNET_TYPE_USER_UPDATE | 房间成员更新消息 |
ITMG_MAIN_EVENT_TYPE_CHANGE_ROOM_QUALITY | 房间质量信息 |
消息 | Data | 例子 |
ITMG_MAIN_EVENT_TYPE_ENTER_ROOM | result; error_info | {"error_info":"","result":0} |
ITMG_MAIN_EVENT_TYPE_EXIT_ROOM | result; error_info | {"error_info":"","result":0} |
ITMG_MAIN_EVENT_TYPE_ROOM_DISCONNECT | result; error_info | {"error_info":"waiting timeout, please check your network","result":0} |
ITMG_MAIN_EVENT_TYPE_CHANGE_ROOM_TYPE | result; error_info; sub_event_type; new_room_type | {"error_info":"","new_room_type":0,"result":0} |
ITMG_MAIN_EVENT_TYPE_SPEAKER_NEW_DEVICE | result; error_info | {"deviceID":"{0.0.0.00000000}.{a4f1e8be-49fa-43e2-b8cf-dd00542b47ae}","deviceName":"扬声器 (Realtek High Definition Audio)","error_info":"","isNewDevice":true,"isUsedDevice":false,"result":0} |
ITMG_MAIN_EVENT_TYPE_SPEAKER_LOST_DEVICE | result; error_info | {"deviceID":"{0.0.0.00000000}.{a4f1e8be-49fa-43e2-b8cf-dd00542b47ae}","deviceName":"扬声器 (Realtek High Definition Audio)","error_info":"","isNewDevice":false,"isUsedDevice":false,"result":0} |
ITMG_MAIN_EVENT_TYPE_MIC_NEW_DEVICE | result; error_info | {"deviceID":"{0.0.1.00000000}.{5fdf1a5b-f42d-4ab2-890a-7e454093f229}","deviceName":"麦克风 (Realtek High Definition Audio)","error_info":"","isNewDevice":true,"isUsedDevice":true,"result":0} |
ITMG_MAIN_EVENT_TYPE_MIC_LOST_DEVICE | result; error_info | {"deviceID":"{0.0.1.00000000}.{5fdf1a5b-f42d-4ab2-890a-7e454093f229}","deviceName":"麦克风 (Realtek High Definition Audio)","error_info":"","isNewDevice":false,"isUsedDevice":true,"result":0} |
ITMG_MAIN_EVNET_TYPE_USER_UPDATE | user_list; event_id | {"event_id":1,"user_list":["0"]} |
ITMG_MAIN_EVENT_TYPE_NUMBER_OF_USERS_UPDATE | AllUser; AccUser; ProxyUser | {"AllUser":3,"AccUser":2,"ProxyUser":1} |
ITMG_MAIN_EVENT_TYPE_NUMBER_OF_AUDIOSTREAMS_UPDATE | AudioStreams | {"AudioStreams":3} |
ITMG_MAIN_EVENT_TYPE_CHANGE_ROOM_QUALITY | weight; loss; delay | {"weight":5,"loss":0.1,"delay":1} |
本页内容是否解决了您的问题?