實時對講功能是語音會議的一種特殊形式,默認最大支持5方,專有云根據選定套餐進行擴展。發言人必須搶麥才能發言,只能有人放麥以后,其他人才能搶麥。
注意:5.0以上的SDK集成的客戶端,測試音視頻功能,音視頻,會議,群組等操作需要,先將在我們控制臺創建的應用上線,才可測試(控制臺提供的測試demo中的應用id和應用token,不能用來測試,需要使用自己在官網控制臺創建的應用的id和應用token)
1.1、接口邏輯:
接口調用是采取“請求回調”和“通知回調”的方式和服務端交互。用戶發出創建對講、搶麥等操作時,在對應的sdk的方法參數中有“請求回調”方法,請求的結果直接在參數的回調方法中處理。會議中的成員收到服務端發送過來的消息通過“通知回調”方法-(void)onReceiveInterphoneMeetingMsg:(ECInterphoneMeetingMsg *)msg;來接收并進行處理。
1.2、業務流程
(1)用戶A創建實時對講,創建的同時選擇用戶B、用戶C加入
(2)用戶A先被加入到實時對講會議室中
(3)用戶B和用戶C收到請求并同意加入,同時用戶A收到用戶B和用戶C加入的通知消息
(4)通過退出接口可以退出實時對講
(5)實時對講只要有一個人,實時對講就不會結束,直到所有人退出實時對講,會議室自動關閉
//要邀請的成員數組 NSMutableArray * inviteArray = [[NSMutableArray alloc] initWithObjects:@" John的電話號",@" Smith的電話號", nil]; [[ECDevice sharedInstance].meetingManager createInterphoneMeetingWithMembers:inviteArray completion:^(ECError *error, NSString *meetingNumber) { // error創建實時對講回調狀態碼 //meetingNo 創建實時對講回調的會議號 if(error.errorCode==ECErrorType_NoError){ NSLog(@"創建實時對講成功,跳轉到實時對講界面"); }else { NSLog(@"創建實時對講失敗"); } }];
-(void)onReceiveInterphoneMeetingMsg:(ECInterphoneMeetingMsg *)msg{ ECInterphoneMeetingMsgType type= msg.type; if (type== Interphone_INVITE) { NSLog(@"邀請加入實時對講"); } else if(type== Interphone_OVER) { NSLog(@"退出實時對講"); } }
[[ECDevice sharedInstance].meetingManager exitMeeting];
NSString* meetingNo =@”所在的實時對講的會議號”; [[ECDevice sharedInstance].meetingManager controlMicInInterphoneMeeting: meetingNo completion:^(ECError *error,NSString *memberVoip ){ // memberVoip當前在麥上的賬號 if (error.errorCode == ECErrorType_NoError) { NSLog(@"控麥成功,請講話"); } else { NSLog(@"控麥失敗,稍后重試"); } }];
NSString* meetingNo =@”所在的實時對講的會議號”; [[ECDevice sharedInstance].meetingManager releaseMicInInterphoneMeeting: meetingNo completion:^(ECError *error,NSString *memberVoip ){ // memberVoip當前在放麥人的賬號 if (error.errorCode == ECErrorType_NoError) { NSLog(@"放麥成功,請講話"); } else { NSLog(@"放麥失敗,稍后重試"); } }];
語音會議只是多人參加的基于互聯網、或者基于電話或者網絡和電話混合的會議。Sdk最多支持32方語音會議。
1.1、接口邏輯:
接口調用是采取“請求回調”和“通知回調”的方式和服務端交互。在對應的sdk的方法參數中有“請求回調”方法,請求的結果直接在參數的回調方法中處理。。會議中的成員收到服務端發送過來的消息通過“通知回調”方法-(void)onReceiveMultiVoiceMeetingMsg:(ECMultiVoiceMeetingMsg *)msg來接收并進行處理。
1.2、業務流程
(1)用戶A創建語音會議或者電話會議
(2)會議創建成功之后,邀請其他成員加入會議
(3)其他成員收到邀請,同意或拒絕加入會議
功能:創建語音、視頻會議。 參數:params 創建語音、視頻會議的參數對象 參考ECCreateMeetingParams對象。 ecMultMeetingType 創建會議的類型、語音、視頻會議二種。 返回值:無 ECCreateMeetingParams *params =[[ECCreateMeetingParams alloc]init]; params.meetingType =會議類型 params.MeetingName= @"會議名稱"; params.MeetingPwd=@"會議密碼"; params.Square=@"創建幾路視頻"; params.AutoClose=@"創建者退出后會議是否解散"; params.AutoJoin= @"創建后,創建者是否自動加入會議"; params.AutoDelete= @"是否為永久會議"; params.VoiceMod= @"背景音樂"; params.Keywords=@"業務屬性"; [[ECDevice sharedInstance].meetingManager createMultMeetingByType:params andType:More_Voice completion:^(NSUInteger error,NSString *meetingNo ){ //meetingNo 創建會議回調的會議號 if (error.errorCode == ECErrorType_NoError) { NSLog(@"會議創建成功,請講話"); } else { NSLog(@"會議創建失敗,稍后重試"); } }];
功能:邀請用戶加入語音會議 參數: meetingNumber 會議號 isLoadingCall用戶登錄的是電話號或者通訊號碼 members被邀請加入語音會議的成員號 返回值:無 NSString* meetingNumber=@”會議號”; NSMutableArray *selectArray = [[NSMutableArray alloc] initWithObjects:@" John的電話號",@" Smith的電話號", nil]; [[ECDevice sharedInstance].meetingManager inviteMembersJoinToVoiceMeeting: meetingNumber andIsLoandingCall:(alertView.tag==ChatRoomVIEW_addmember) andMembers: selectArray completion:^(ECError *error, NSString *meetingNumber) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"邀請成員成功"); } else { NSLog(@"邀請成員失敗"); } }];
功能:通過會議類型加入會議。 參數:meetingNumber 會議號 meetingType 會議的類型; meetingPwd 會議的密碼。 返回值:無。 NSString* roomNo =@”會議號”; NSString* pwd =@”會議密碼”; [[ECDevice sharedInstance].meetingManager joinMeeting:roomNo ByMeetingType:ECMeetingType_MultiVoice andMeetingPwd:pwd completion:^(ECError *error, NSString *meetingNumber) { //meetingNo加入會議回調的會議號 if (error.errorCode == ECErrorType_NoError) { NSLog(@"加入會議成功"); } else { NSLog(@"加入會議失敗"); } }];
功能:通過會議類型加入會議。 參數:meetingNumber會議號 multMeetingType會議的類型; 返回值:無。 NSString* meetingNo =@”要解散的會議id”; [[ECDevice sharedInstance].meetingManager deleteMultMeetingByMeetingType:ECMeetingType_MultiVoice andMeetingNumber: meetingNo completion:^(ECError *error, NSString *meetingNumber) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"解散會議成功"); } else { NSLog(@"解散會議失敗"); } }];
功能:退出會議 參數:無。 [[ECDevice sharedInstance].meetingManager exitMeeting];
功能:從語音、視頻會議移除成員 參數: meetingNumber會議號 multMeetingType會議的類型; 會議的類型 、語音或者視頻。 membervVoip被移除成員的手機號碼 返回值:無. NSString* curRoomNo =@”當前的會議id”; NSString* meetingnumber =@”要踢出的成員”; [[ECDevice sharedInstance].meetingManager removeMemberFromMultMeetingByMeetingType:ECMeetingType_MultiVoice andMeetingNumber: curRoomNo andMember: meetingnumber completion:^(ECError *error, ECVoIPAccount *membervVoip) { //member被移除會議成員的號碼 if (error.errorCode == ECErrorType_NoError) { NSLog(@"踢出會議成員"); } else { NSLog(@"踢出會議成員失敗"); } }];
- (void)onReceiveMultiVoiceMeetingMsg:(ECMultiVoiceMeetingMsg *)msg { ECMultiVoiceMeetingMsgType *msgType= msg.type; if(msgType== MultiVoice_JOIN) { NSLog(@"有人加入"); } else if(msgType== MultiVoice_EXIT) { NSLog(@"有人退出"); } else if(msgType== MultiVoice_DELETE) { NSLog(@"房間被刪除退出"); } else if(msgType== MultiVoice_REMOVEMEMBER) { NSLog(@"有人被移除"); } else if(msgType== MultiVoice_REFUSE) { NSLog(@"會議釋放掉"); } }
功能:獲取應用下面的語音或視頻會議列表。 參數: Keywords業務屬性 multMeetingType會議的類型 返回值:無 NSString* keywords =@”業務屬性”; [[ECDevice sharedInstance].meetingManager listAllMultMeetingsByMeetingType:(ECMeetingType)multMeetingType andKeywords:(NSString *)keywords completion:(void(^)(ECError *error, NSArray * meetingList))completion { if (error.errorCode == ECErrorType_NoError) { NSLog(@"獲取列表成功"); } else { NSLog(@"獲取列表失敗"); } }];
功能:根據會議類型查詢當前會議的成員 參數: meetingNumber,會議號 meetingtype會議的類型, l 回調監聽 根據傳入的會議類型回調不同的方法。 返回值:無 NSString *meetingNumber =@”當前的會議id”; [[ECDevice sharedInstance].meetingManager queryMeetingMembersByMeetingType:(ECMeetingType)meetingtype andMeetingNumber:(NSString *)meetingNumber completion:(void(^)(ECError *error, NSArray* members))completion { //members參與會議的成員數組 if (error.errorCode == ECErrorType_NoError) { NSLog(@"查詢會議成員成功"); } else { NSLog(@"查詢失敗"); } }];
/** @brief 設置會議某成員是否可聽可講 @param memberVoip 成員通訊賬號 @param speakListen 是否可聽可講 1、禁言 2、可講 3、禁聽 4、可聽 @param meetingType 會議房間的類型 @param meetingNumber 房間號 @param completion 執行結果回調block */ ECVoIPAccount *account = “是否是通訊賬號” NSInteger speakListen = “是否可聽可講 1、禁言 2、可講 3、禁聽 4、可聽” ECMeetingType meetingType = “會議的類型” NSString *meetingNumber = “會議號” [[ECDevice sharedInstance].meetingManager setMember:account speakListen: speakListen ofMeetingType: meetingType andMeetingNumber: meetingNumber completion:^(ECError *error, NSString *meetingNumber) { }];
/** @brief 獲取音頻會議列表 @param multMeetingType 會議房間的類型 @param keywords 房間關鍵字 @param page 頁碼 @param pageSize 房間數 @param isAsc 是否升序 @param completion 執行結果回調block */ [[ECDevice sharedInstance].meetingManager listAllMultMeetingsByMeetingType: ECMeetingType_MultiVoice andKeywords:nil page:(NSInteger)page pageSize:(NSInteger)pageSize isAsc:(BOOL)isAsc completion: (ECError *error, NSArray * meetingList) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"獲取列表成功"); } else { NSLog(@"獲取列表失敗"); } }];
視頻會議只是多人參加的基于互聯網、或者基于電話或者網絡和電話混合的會議。
1.1、接口邏輯:
接口調用是采取“請求回調”和“通知回調”的方式和服務端交互。在對應的sdk的方法參數中有“請求回調”方法,請求的結果直接在參數的block回調中處理。會議中的成員收到服務端發送過來的消息通過“通知回調”方法onReceiveMultiVideoMeetingMsg來接收并進行處理。
1.2、業務流程
(1)用戶A創建視頻會議。
(2)會議創建的時候有兩種方式:
根據參數設置創建者自動加入,如果創建者選擇自動加入,則創建會議成功后,創建者直接加入會議。
根據參數設置創建者不自動加入會議,則會議創建成功后,創建者需要調用“加入會議接口”加入會議。
(3)其他成員獲取視頻會議列表,選擇對應的會議加入。
(4)用戶加入視頻會議的同時,需要調用publishSelfVideoFrameInVideoMeeting:(NSString*)meetingNumber completion:(void(^)(ECError *error, NSString *meetingNumber))completion接口發布自己的視頻。
(5)會議室成員收到有人加入會議通知,調用requestMemberVideoWithAccount:(NSString*)username andDisplayView:(UIView*)displayView andVideoMeeting:(NSString*)meetingNumber andPwd:(NSString*)meetingPwd andPort:(NSInteger)port completion:(void(^)(ECError *error, NSString *meetingNumber,NSString *member))completion請求該用戶的視頻數據。
(6)多路視頻會議,涉及到消息體類包括:ECCreateMeetingParams、ECMeetingRoom、ECMeetingMember、ECMultiVideoMeetingMsg、ECError等,消息體類的相關屬性,請參照SDK里面的說明。
功能:創建語音、視頻會議。 參數:params 創建語音、視頻會議的參數對象 參考ECCreateMeetingParams對象。 ecMultMeetingType 創建會議的類型、語音、視頻會議二種。 返回值:無 ECCreateMeetingParams *params =[[ECCreateMeetingParams alloc]init]; params.MeetingName= @"會議名稱"; params.meetingType = ECMeetingType_MultiVideo; params.Square=@"創建幾路視頻"; params.AutoClose=@"創建者退出后會議是否解散"; params.AutoJoin= @"創建后,創建者是否自動加入會議"; params.AutoDelete= @"是否為永久會議"; params.VoiceMod= @"背景音樂"; params.Keywords=@"業務屬性"; [[ECDevice sharedInstance].meetingManager createMultMeetingByType:params completion: (ECError* error, NSString *meetingNumber) { //meetingNo 創建會議回調的會議號 if (error.errorCode == ECErrorType_NoError) { NSLog(@"會議創建成功,請講話"); 如果選擇的是創建者自動加入的話,在會議創建成功之后就應該創建好多路視頻的View,創建過程如下: 1.在跳轉的頁面的初始化中,直接定義好view,在view調用底層sdk里面的方法,設置本地視頻窗口、然后調用創建視頻會議接口。 2.設置視頻通話碼率[[ECDevice sharedInstance].voIPManager setVideoBitRates:@” 視頻碼流,kb/s,范圍30-300”]; 3.設置視頻通話顯示的view [[ECDevice sharedInstance].voIPManager setVideoView:@” 對方顯示視圖” andLocalView:@” 本地顯示視圖”]; 4.設置視頻會議地址[[ECDevice sharedInstance].meetingManager setVideoConferenceAddr:@”會議地址”]; 5.詳細過程請參考demo中,MultiVideoConfViewController頁面。 } else { NSLog(@"會議創建失敗,稍后重試"); } }];
功能:通過會議類型加入會議。 參數:meetingNo 會議號 meetingType 會議的類型; meetingPwd 會議的密碼。 返回值:無。 如果選擇不是自動加入的話,需要在自動加入前設置多路視頻view,創建過程與自動加入的過程一致。 NSString* meetingNo =@”會議號”; NSString* meetingpwd =@”會議密碼”; [[ECDevice sharedInstance].meetingManager joinMeeting: meetingNo ByMeetingType: ECMeetingType_MultiVideo andMeetingPwd: meetingpwd completion: (ECError* error, NSString *meetingNumber) { //meetingNo加入會議回調的會議號 if (error.errorCode == ECErrorType_NoError) { NSLog(@"加入會議成功"); } else { NSLog(@"加入會議失敗"); } }];
功能:通過會議類型加入會議。 參數:meetingNo 會議號 meetingType 會議的類型 appId 應用id 返回值:無。 NSString* meetingNo =@”要解散的會議id”; [[ECDevice sharedInstance].meetingManager deleteMultMeetingByMeetingType: ECMeetingType_MultiVideo e andMeetingNumber: meetingNo completion: (ECError *error, NSString *meetingNumber) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"解散會議成功"); } else { NSLog(@"解散會議失敗"); } }];
功能: 邀請成員加入視頻會議 參數:meetingNo 會議號 type 會議的類型視頻。 Member 被移除成員的通訊賬號或者手機號碼 返回值:無. NSString* meetingNo =@”當前的會議id”; NSString* meetingnumber =@”邀請的成員通訊賬號”; BOOL isLoadingCall = YES/NO; //用戶登錄的是手機號或者通訊賬號,YES是手機號,NO是通訊賬號 [[ECDevice sharedInstance].meetingManager inviteMembersJoinMultiMediaMeeting: meetingNo andIsLoandingCall: isLoadingCall andMembers: meetingnumber completion:^(ECError *error, NSString *meetingNumber) {// meetingNumber加入會議成員的號碼 if (error.errorCode == ECErrorType_NoError) { NSLog(@"邀請會議成員成功"); } else { NSLog(@"邀請會議成員失敗"); } }]; 邀請成員(通訊賬號或者電話號),被邀請方需要處理的事件,在-(NSString*)onMeetingCallReceived:(NSString*)callid withCallType:(CallType)calltype withMeetingData:(NSDictionary*)meetingData;的方法中需要做處理。這個方法只有音視頻會議邀請成員才會調用。具體事例如下: 功能:有會議呼叫邀請 參數; callid 會話id calltype 呼叫類型 meetingData 會議的數據 -(NSString*)onMeetingCallReceived:(NSString*)callid withCallType:(CallType)calltype withMeetingData:(NSDictionary*)meetingData { if ([DemoGlobalClass sharedInstance].isCallBusy) {//當有邀請呼入或者正在通話過程中,需要告知對方,線路處于忙碌狀態需要等待。 [[ECDevice sharedInstance].VoIPManager rejectCall:callid andReason:ECErrorType_CallBusy]; return @""; } UIViewController *incomingCallView = nil; if (calltype == VIDEO) {//當多路視頻會議邀請時,需要處理的事件,彈出來電窗口 } else {// 當音頻會議邀請時,彈出來電窗口 } [DemoGlobalClass sharedInstance].isCallBusy = YES;//有來電呼入時,需要先把狀態置為忙碌狀態。 return nil; }
[[ECDevice sharedInstance].meetingManager exitMeeting];
功能:從語音、視頻會議移除成員 參數: meetingNo 會議號 type 會議的類型 、語音或者視頻。 Member 被移除成員的通訊賬號或者手機號碼 返回值:無. NSString* meetingNo =@”當前的會議id”; NSString* meetingnumber =@”要踢出的成員”; ECVoIPAccount *membervVoip = [[ECVoIPAccount alloc] init]; membervVoip.account = meetingnumber; membervVoip.isVoip = YES; [[ECDevice sharedInstance].meetingManager removeMemberFromMultMeetingByMeetingType:ECMeetingType_MultiVideo andMeetingNumber: meetingNo andMember: membervVoip completion: (ECError *error, ECVoIPAccount *membervVoip) { //member被移除會議成員的號碼 if (error.errorCode == ECErrorType_NoError) { NSLog(@"踢出會議成員"); } else { NSLog(@"踢出會議成員失敗"); } }];
-(void)onReceiveMultiVideoMeetingMsg:(ECMultiVideoMeetingMsg *)msg { ECVideoMeetingMsgType type= msg.type; if(msgType==Video_JOIN) { NSLog(@"有人加入"); } else if(msgType== Video_EXIT) { NSLog(@"有人退出"); } else if(msgType== Video_DELETE) { NSLog(@"房間被刪除退出"); } else if(msgType== Video_REMOVEMEMBER) { NSLog(@"有人被踢出會議"); } else if(type==Video_PUBLISH) { NSLog(@"發布視頻"); } else if(type==Video_UNPUBLISH) { NSLog(@"取消發布視頻"); } }
功能:獲取應用下面的語音或視頻會議列表。 參數: Keywords業務屬性 meetingType會議的類型 返回值:無 [[ECDevice sharedInstance].meetingManager listAllMultMeetingsByMeetingType: ECMeetingType_MultiVideo andKeywords:nil completion: (ECError *error, NSArray * meetingList) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"獲取列表成功"); } else { NSLog(@"獲取列表失敗"); } }];
功能:根據會議類型查詢當前會議的成員 參數: meetingNo,會議號 meetingType 會議的類型, 回調監聽 根據傳入的會議類型回調不同的方法。 返回值:無 NSString* meetingNo =@”當前的會議id”; [[ECDevice sharedInstance].meetingManager queryMeetingMembersByMeetingType: ECMeetingType_MultiVideo andMeetingNumber: meetingNo completion: (ECError *error, NSArray* member){ //members參與會議的成員數組 if (error.errorCode == ECErrorType_NoError) { NSLog(@"查詢會議成員成功"); } else { NSLog(@"查詢失敗"); } }];
NSString* meetingNo =@”當前的會議id”; [[ECDevice sharedInstance].meetingManager publishSelfVideoFrameInVideoMeeting:meetingNo completion:^(ECError *error, NSString *meetingNumber){ if (error.errorCode == ECErrorType_NoError) { NSLog(@"發布視頻成功"); } else { NSLog(@"發布失敗"); } }];
NSString* meetingNo =@”當前的會議id”; [[ECDevice sharedInstance].meetingManager cancelPublishSelfVideoFrameInVideoMeeting:meetingNo completion:^(ECError *error, NSString *meetingNumber){ if (error.errorCode == ECErrorType_NoError) { NSLog(@"取消發布成功"); } else { NSLog(@"取消發布失敗"); } }];
NSString* meetingNo =@”當前的會議id”; NSString* meetingPwd =@”所在的會議密碼”; NSString* memberNumber =@”John的通訊賬號”; XXXXXX displayView=當成功請求時,展示該成員的窗口 [[ECDevice sharedInstance].meetingManager requestMemberVideoWithAccount: memberNumber andDisplayView: displayView andVideoConference: meetingNo andPwd: meetingPwd andPort:port.integerValue completion:^(ECError *error, NSString *meetingNumber, NSString *member) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"請求成功"); } else { NSLog(@"請求失敗"); } }]; 說明: 視頻時(包含點對點和會議),設置遠端UIView的屬性contentMode:(DisplayView: displayView) UIViewContentModeScaleToFill //view默認值,圖像數據顯示,填充view,但不等比例拉伸 UIViewContentModeScaleAspectFit //圖像等比例拉伸,完全顯示內容 UIViewContentModeScaleAspectFill //圖像等比例拉伸,填充view,部分內容可能不顯示
NSString* meetingNo =@”當前的會議id”; NSString* meetingPwd =@”所在的會議密碼”; NSString* memberNumber =@”John的通訊賬號”; XXXXXX displayView=當成功請求時,展示該成員的窗口 [[ECDevice sharedInstance].meetingManager cancelConferenceMemberVideoWithAccount: memberNumber andVideoConference: meetingNo andPwd: meetingPwd completion:^(ECError *error, NSString *meetingNumber, NSString *member) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"取消成功"); } else { NSLog(@"取消失敗"); } }];
/** @brief 設置會議某成員是否可聽可講 @param memberVoip 成員通訊賬號 @param speakListen 是否可聽可講 1、禁言 2、可講 3、禁聽 4、可聽 @param meetingType 會議房間的類型 @param meetingNumber 房間號 @param completion 執行結果回調block */ ECVoIPAccount *account = “是否是通訊賬號” NSInteger speakListen = “是否可聽可講 1、禁言 2、可講 3、禁聽 4、可聽” ECMeetingType meetingType = “會議的類型” NSString *meetingNumber = “會議號” [[ECDevice sharedInstance].meetingManager setMember:account speakListen: speakListen ofMeetingType: meetingType andMeetingNumber: meetingNumber completion:^(ECError *error, NSString *meetingNumber) { }];
/** @brief 獲取音頻會議列表 @param multMeetingType 會議房間的類型 @param keywords 房間關鍵字 @param page 頁碼 @param pageSize 房間數 @param isAsc 是否升序 @param completion 執行結果回調block */ [[ECDevice sharedInstance].meetingManager listAllMultMeetingsByMeetingType: ECMeetingType_MultiVideo andKeywords:nil page:(NSInteger)page pageSize:(NSInteger)pageSize isAsc:(BOOL)isAsc completion: (ECError *error, NSArray * meetingList) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"獲取列表成功"); } else { NSLog(@"獲取列表失敗"); } }];
文檔更新時間:2016年12月4日