網(wǎng)易互動(dòng)直播聊天室(包含用戶上麥下麥踢出聊天室)

1.先前準(zhǔn)備

1).http://netease.im/im-sdk-demo附上sdk下載鏈接

2).導(dǎo)入sdk 建議手動(dòng)導(dǎo)入 并添加相應(yīng)的依賴庫(kù)文檔都有

2.寫(xiě)代碼

1).在網(wǎng)易云信登錄獲取到信息AppDelegate導(dǎo)入#import<NIMSDK/NIMSDK.h>

NSString *appKey = @"30**************6e";

NSString *cerName = @"https://*********api";

[[NIMSDK sharedSDK] registerWithAppID:appKey cerName:cerName];

并獲取到云信id這是必須的,先根據(jù)用戶ID獲取到token,獲取后調(diào)取方法[[[NIMSDK sharedSDK]loginManager] login:用戶ID token:在后臺(tái)綁定的登錄token completion:^(NSError * _Nullable error) {

if (error) {

NSLog(@"登錄失敗%ld", error.code);

} else {

NSLog(@"登錄成功%d", 200);

}

}]

2).實(shí)現(xiàn)該功能頁(yè)面導(dǎo)入#import<NIMSDK/NIMSDK.h>

2.0).創(chuàng)建一個(gè)會(huì)議NIMNetCallMeeting *_currentMeeting;

2.1).判斷是否是主持人或者用戶實(shí)現(xiàn)不同的方法

2.2)主持人創(chuàng)建會(huì)議-(void)createVideoAndAudio

{

NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];

meeting.name = 聊天室ID;

[self joinNetCallWithRMeeting:meeting];

}

- (void)joinNetCallWithRMeeting:(NIMNetCallMeeting *)rMeeting

{

if ([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)]) {

[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {

if (granted) {

NIMNetCallOption *callOption =[[NIMNetCallOption alloc]init];

// 發(fā)送視頻質(zhì)量(SDK會(huì)處理 有可能無(wú)效)

//? ? ? ? ? ? ? ? callOption.preferredVideoQuality =NIMNetCallVideoQualityDefault;

// 禁止剪裁

//? ? ? ? ? ? ? ? callOption.disableVideoCropping =NO;

// 自動(dòng)旋轉(zhuǎn)遠(yuǎn)端畫(huà)面

callOption.autoRotateRemoteVideo =YES;

// 期望的視頻編碼器

callOption.preferredVideoEncoder =NIMNetCallVideoCodecDefault;

// 期望的視頻解碼器

callOption.preferredVideoDecoder =NIMNetCallVideoCodecDefault;

// 是否使用后置攝像頭

//? ? ? ? ? ? ? ? callOption.startWithBackCamera =NO;

// 啟用互動(dòng)直播

callOption.enableBypassStreaming =YES;

// 互動(dòng)直播推流地址

callOption.bypassStreamingUrl = self.url;

// 是否在服務(wù)器錄制音頻

callOption.serverRecordAudio =YES;

callOption.autoDeactivateAudioSession = NO;

// 是否在服務(wù)器錄制視頻

callOption.serverRecordVideo =YES;

// 加入會(huì)議的類(lèi)型->音頻/視頻

rMeeting.type = NIMNetCallMediaTypeAudio;

// 是否發(fā)送音視頻數(shù)據(jù)

rMeeting.actor = YES;

// 網(wǎng)路電話配置

rMeeting.option = callOption;

//? ? ? ? ? ? ? ? NSLog(@"錯(cuò)那了%@",rMeeting);

//進(jìn)入房間聊天

[[NIMAVChatSDK sharedSDK].netCallManager joinMeeting:rMeeting completion:^(NIMNetCallMeeting * _Nonnull meeting, NSError * _Nonnull error) {

if (!error) {

[[FbwHttpClient shareInstance]startRequestMethod:POST parameters:@{@"userId":用戶ID,@"chatRoomId":聊天室ID} url:UrL_JoinChatRoom success:^(id responseObject) {

if ([[responseObject objectForKey:@"errcode"]integerValue] != 0) {

[SVProgressHUD showErrorWithStatus:[responseObject objectForKey:@"msg"]];

}else{

}

} failure:^(NSError *error) {

}];

NSLog(@"進(jìn)入成功");

//默認(rèn)關(guān)閉所有人視頻

[[NIMAVChatSDK sharedSDK].netCallManager setCameraDisable:YES];

[[NIMAVChatSDK sharedSDK].netCallManager setMute:YES];

} else {

NSLog(@"進(jìn)入失敗");

[self reserveMeetingWithRoomId:self.LiaoTianSId];

}

}];

}else{

[self canRecord];

}

}];

}

}

- (void)reserveMeetingWithRoomId:(NSString *)roomId{

NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];

meeting.name = roomId;

meeting.type = NIMNetCallMediaTypeAudio;

meeting.actor = NO;

[[NIMAVChatSDK sharedSDK].netCallManager reserveMeeting:meeting completion:^(NIMNetCallMeeting * _Nonnull meeting, NSError * _Nonnull error) {

if (!error) {

NSLog(@"預(yù)定成功 ,進(jìn)入房間");

[self joinNetCallWithRMeeting:meeting];

} else {

if (error.code == 417) {

[self joinNetCallWithRMeeting:meeting];

NSLog(@"meeting exists, %@",meeting);

error = nil;

} else {

NSLog(@"預(yù)定房間失敗");

}

}

}];

}

2.3)用戶加入會(huì)議

-(void)AddMeeting

{

NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];

meeting.name = 聊天室ID;

meeting.type = NIMNetCallMediaTypeAudio;

meeting.actor = NO;

[[FbwHttpClient shareInstance]startRequestMethod:POST parameters:@{@"userId":用戶ID,@"chatRoomId":聊天室ID} url:UrL_JoinChatRoom success:^(id responseObject) {

if ([[responseObject objectForKey:@"errcode"]integerValue] != 0) {

[SVProgressHUD showErrorWithStatus:[responseObject objectForKey:@"msg"]];

}else{

//進(jìn)入房間聊天

[[NIMAVChatSDK sharedSDK].netCallManager joinMeeting:meeting completion:^(NIMNetCallMeeting * _Nonnull meeting, NSError * _Nonnull error) {

if (!error) {

NSLog(@"進(jìn)入成功");

[[NIMAVChatSDK sharedSDK].netCallManager setMute:YES];

[[NIMAVChatSDK sharedSDK].netCallManager setSpeaker:YES];//看需求是否開(kāi)啟擴(kuò)音器

}else{

}

}];

}

} failure:^(NSError *error) {

}];

}

2.4)離開(kāi)聊天室(踢出也如此)

[self quitConversationViewAndClear];

//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [self createOutRoom];

NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];

meeting.name = self.LiaoTianSId;

[[NIMAVChatSDK sharedSDK].netCallManager leaveMeeting:meeting];

2.5).主持人可以讓用戶上麥也可以讓用戶下麥以及旁聽(tīng)一看便知,很簡(jiǎn)單

2.6)到這里差不多也結(jié)束了,有幾個(gè)注意的地方是你要區(qū)分主持人和用戶,一抱麥用戶即可說(shuō)話,一下麥及不可,主持人一直可以,我們的需求你們可以看下圖,我們聊天室用的融云,互動(dòng)直播用的網(wǎng)易,當(dāng)房間還有用戶存在時(shí),主持人退出聊天室還在,在麥用戶還可以說(shuō)話,當(dāng)只有主持人一人時(shí),退出聊天室,即關(guān)閉.

2.7)排版可能有點(diǎn)亂,看官們將就著看,做下來(lái)一開(kāi)始確實(shí)有點(diǎn)麻煩,還好有位朋友指點(diǎn)就順利多了,現(xiàn)在想想還挺簡(jiǎn)單的哈哈,互相學(xué)習(xí),不斷進(jìn)步.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容