云信多人语音聊天室(iOS)

这个开源示例项目演示了如何快速集成NERTC SDK,快速实现多人语音聊天室功能。

功能介绍

该示例项目中包含了以下功能:

创建语音聊天室;

使用文字或语音进行多对多互动通信;

增加耳返功能;

自定义采集音量;

播放背景音乐和音效;

将聊天室内成员抱上麦;

加入已经创建好的语音聊天室;

非聊天室创建人申请上麦;

环境准备

Xcode 10.0+

iOS真机设备

支持模拟器运行,但是部分功能无法使用

运行示例项目

该部分主要讲解如何编译和运行实例程序。

获取appkey

在编译和启动实例程序前,您需要首先获取一个可用的appkey:

若您已经与专属客户经理取得联系,可直接向他获取appkey;

若您并未与专属客户经理取得联系那么请按后续步骤获取appkey;

首先在 网易云信 注册账号;

然后在「应用」一栏中创建您的项目;

等待专属客户经理联系您,并向他获取Appkey;

将AppKey填写进NTESDemoConfig.h

NSString *const AppKey = ;

集成实时音视频SDK

进入Demo根路径,执行 Pod install;

使用Xcode打开NEChatroom-iOS-ObjC.xcworkspace,连接iPhone/iPad测试设备,设置有效的开发者签名后即可运行;

功能实现

IM部分

初始化IM SDK

[[NIMSDK sharedSDK] registerWithAppID:

cerName:];IM登录

[[[NIMSDK sharedSDK] loginManager] login:

token:

completion:^(NSError *error) {

if (error == nil) {

// IM登录成功

} else {

// IM登录失败

}

}];进入聊天室,需要在IM登录成功且进入聊天室成功之后执行下述代码,才能在聊天室里实现语音功能

[[NIMSDK sharedSDK].chatroomManager enterChatroom:

completion:^(NSError * _Nullable error, NIMChatroom * _Nullable chatroom, NIMChatroomMember * _Nullable me) {

if (!error) {

// 进入聊天室成功

} else {

// 进入聊天室失败

}

}];离开聊天室

[[NIMSDK sharedSDK].chatroomManager exitChatroom: completion:nil];获取聊天室成员信息

[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:

completion:^(NSError * _Nullable error, NSArray * _Nullable members) {

if (!error) {

// 获取聊天室成员信息成功

} else {

// 获取聊天室成员信息失败

}

}];IM发送消息

[[NIMSDK sharedSDK].chatManager sendMessage: toSession: error:nil];收到消息

- (void)onRecvMessages:(NSArray *)messages

{

for (NIMMessage *message in messages) {

if (![message.session.sessionId isEqualToString:_roomId]

&& message.session.sessionType == NIMSessionTypeChatroom) {

//不属于这个聊天室的消息

return;

}

switch (message.messageType) {

case NIMMessageTypeText:

// 文本类型消息

break;

case NIMMessageTypeCustom:

{

// 自定义类型消息

break;

}

case NIMMessageTypeNotification:{

// 通知类型消息

break;

}

default:

break;

}

}

}

音视频SDK部分

初始化音视频SDK,配置音视频相关参数。

- (void)setupRTCEngine

{

NERtcEngineContext *context = [[NERtcEngineContext alloc] init];

context.appKey = [NTESDemoConfig sharedConfig].appKey;

context.engineDelegate = self;

NERtcEngine *coreEngine = [NERtcEngine sharedEngine];

[coreEngine setAudioProfile:kNERtcAudioProfileHighQualityStereo scenario:kNERtcAudioScenarioMusic];

[coreEngine setupEngineWithContext:context];

// 订阅音频音量回调(下句代码表示每隔1000ms调用一次音频音量代理方法)

[coreEngine enableAudioVolumeIndication:YES interval:1000];

}加入和离开房间。调用SDK接口加入和退出音视频房间。在本示例中,是在加入聊天室成功后,再加入音视频通道,进而实现音频通话能力;

注意: 非安全模式下, 加入音频房间接口中,token可以传空字符串。默认使用安全模式, 关于如何获取token, 请参照 安全认证签名。

[[NERtcEngine sharedEngine] joinChannelWithToken:

channelName:

myUid:

completion:^(NSError * _Nullable error, uint64_t channelId, uint64_t elapesd) {

if (error) {

// 加入房间失败

} else {

// 加入房间成功

}

}];本地用户的音乐文件播放状态改变回调。

- (void)onAudioMixingStateChanged:(NERtcAudioMixingState)state errorCode:(NERtcAudioMixingErrorCode)errorCode

{

//

}本地用户瞬时音量的回调。

- (void)onAudioMixingStateChanged:(NERtcAudioMixingState)state errorCode:(NERtcAudioMixingErrorCode)errorCode

{

//

}提示频道内谁正在说话及说话者音量的回调

-(void)onRemoteAudioVolumeIndication:(nullable NSArray *)speakers totalVolume:(int)totalVolume

{

//

}关于语音过程中伴音的设置

// 开始播放伴音

[[NERtcEngine sharedEngine] startAudioMixingWithOption:options];

// 停止播放伴音

[[NERtcEngine sharedEngine] stopAudioMixing];

// 设置伴音的发送音量

[[NERtcEngine sharedEngine] setAudioMixingSendVolume:value];

// 设置伴音的回放音量

[[NERtcEngine sharedEngine] setAudioMixingPlaybackVolume:value];关于语音过程中音效的设置

// 播放音效 eid-音效ID opt-音效配置项

[[NERtcEngine sharedEngine] playEffectWitdId:eid effectOption:opt];

// 停止播放所有音效

[[NERtcEngine sharedEngine] stopAllEffects];

// 设置音效的发送音量 eid-音效ID value-音效值

[[NERtcEngine sharedEngine] setEffectSendVolumeWithId:eid volume:value];

// 设置音效的回放音量 eid-音效ID value-音效值

[[NERtcEngine sharedEngine] setEffectPlaybackVolumeWithId:eid volume:value];

修改 Demo 源代码

以下表格列出了各个 ObjC 文件或文件夹及其所对应的 UI 界面或功能实现,以便于您进行二次调整:

文件或文件夹

功能描述

NTESDemoConfig

该文件用于配置 appKey, 证书名称, 请求host

NTESHomePageViewController

语音聊天室列表页面逻辑

NTESChatroomViewController

语音聊天室页面逻辑

NTESSettingPanelView

设置面板视图,包含设置耳返、采集音量

NTESChatroomHeaderView

语音聊天室头部视图

NTESAudioPlayerManager

伴音(音效)管理器

NTESChatroomHandler

语音聊天室 IM SDK 协议处理类

NTESMicInviteeListViewController

拉人上麦, 在聊天室内的待邀请的成员列表页

Logger文件夹

日志功能相关类

Service文件夹

Demo请求、数据中心、系统管理类

本篇文档内容是否对您有帮助?

有帮助

我要吐槽

如果遇到产品相关问题,您可 提交工单 或 在线客服 寻求帮助。

您的改进建议

×

问题类型

内容错误

内容没更新

描述不清

链接有误

步骤不完整

内容缺失(缺少代码/示例)

其他

更多建议

请输入您的建议或问题(至少5个字符,至多500个字符)

联系方式

标记内容

同时提交标记内容

提交

此文档对你是否有帮助

×

有帮助

我要吐槽

×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。

ios开发 多人语音聊天_iOS-实现多人语音聊天室-场景实践-音视频通话2.0-网易云信开发文档...相关推荐

  1. linux 视频电话,多人音视频通话-Linux开发集成-SDK开发集成-音视频通话-网易云信开发文档...

    多人音视频通话 本章节介绍多人实时音视频通话的相关功能.多人实时音视频通话顾名思义是支持多个人同时进行实时音视频通话,可以选择纯音频模式,或音视频模式.在这里需要明确几个概念: 房间:房间就是用户进行 ...

  2. linux sdk 封装,集成方式-Linux开发集成-SDK开发集成-IM即时通讯-网易云信开发文档...

    集成方式 SDK内容 目录结构 nim | |-- include | |-- api |-- export_headers |-- util |-- libs | |-- x86 |-- x86-x ...

  3. android怎么集成sdk,集成方式-Android开发集成-SDK开发集成-信令-网易云信开发文档...

    集成方式 网易云通信 SDK 支持两种方式集成. 1. 通过 Gradle 集成 SDK (推荐) 2. 通过类库配置集成 SDK 网易云通信 Android SDK 2.5.0 以上强烈推荐通过 G ...

  4. python软件开发-如何编写Python软件开发文档(7个技巧)

    开发文档是经常被程序员忽略的工作,有时也会被管理者忽略.这往往是由于在项目生命周期结束的后期缺乏时间,以及人们认为自己不擅长写作,其中一些人确实写不好,但他们中的大多数能够完成一个良好的文档. 在任何 ...

  5. python开发软件的实例-如何编写Python软件开发文档(7个技巧)

    开发文档是经常被程序员忽略的工作,有时也会被管理者忽略.这往往是由于在项目生命周期结束的后期缺乏时间,以及人们认为自己不擅长写作,其中一些人确实写不好,但他们中的大多数能够完成一个良好的文档. 在任何 ...

  6. 腾讯企业邮箱开发(非官方开发文档方式

    ** 之前项目系统中包含了一个邮箱下载模块,其中对接的是腾讯企业邮箱,这个模块前后也维护了不短时间,想写下这篇文章来聊聊具体问题,如果有需要对接腾讯企业邮箱的需求,同时官方给予的开发文档无法满足需求, ...

  7. 敏捷开发:编写开发文档的利与弊

    敏捷开发学习总结: 思考开发文档的利与弊 文档是个好东西,这是不可否认的,但是太依赖文档也有弊端,下面我从不同的度来分析一下文档的利与弊,然后思考在敏捷开发时,文档又是如何进行的. 从 公司的角度来看 ...

  8. anychat java开发文档_AnyChat视频云平台开发指南

    本帖最后由 佰锐科技-刘冬明 于 2017-9-13 11:59 编辑 简介: AnyChat视频云平台提供线上的音视频通信.多应用接入.即时通讯.全景录像.智能排队,直播.点播等服务.为您定制个性化 ...

  9. liferay开发文档_Liferay –简单主题开发

    liferay开发文档 实际上,Liferay的6.1版本已经走了很长一段路,该版本完全支持JSF和IceFaces. 我一直在努力学习它的绳索,因为我希望使其成为我们团队中的标准协作工具. 好的软件 ...

最新文章

  1. 再见乱码:5分钟读懂MySQL字符集设置
  2. 通过apt自动生成建造者模式单线程版代码(三)
  3. Rational Purify 使用及分析实例(转载)
  4. radware Alten系列的HA配置
  5. python获取设备硬件信息_Python实现读取机器硬件信息的方法示例
  6. Mac终端编c语言,【新手提问】有知道用mac终端编c语言的网络编程的人吗?
  7. SD-WAN技术的详细解析
  8. tensorflow2 目标检测_一文了解YOLO-v4目标检测
  9. 使用npm uninstall卸载express无效
  10. 不同项目的测试计划可以复用吗_【app测试计划】移动app测试项目实践.doc
  11. 怎样给word插入页码,点击进来有惊喜
  12. 还原氧化石墨烯(RGO)的结构电极-供应三维石墨烯结构体/高质量石墨烯/石墨烯铜基复合材料/基于碳化硅生长高质量石墨烯/片层厚度可调控高质量石墨烯定制
  13. 多模态预训练CLIP模型的强大为例
  14. Matlab似然比检验函数,似然比检验 LRT
  15. ps怎么把黑白照片变成彩色?ps把儿童黑白照变彩色教程
  16. mysql分组排列的查询语句_数据的排序与分组语句_MySQL
  17. 服务器前端机中转机制,『中高级前端面试』之终极知识点
  18. 5G NR — SA 与 NSA 组网
  19. IE浏览器下使用AJAX登陆接口请求缓存与登陆不了的问题解决
  20. 模拟电路2(二极管的模型与电路分析)

热门文章

  1. 挂科违纪,武汉大学清退92名外国留学生!
  2. 计算机导么是进制,计算机基础 进制简介和转换
  3. 蓝牙无线远程更换语音mp3方案 支持spiflash和TF卡或者U盘
  4. python第6-7轮作业--字符串,模块
  5. RL policy gradient 之 A2C, A3C,PPO小总结
  6. 也谈如何高效阅读源码
  7. VisualStudio2005简体中文版 下载地址
  8. JS实现轮播图特效(带二级导航)
  9. 博主介绍技术圈子博文整理
  10. 计算机平面设计必学英语,40个Fireworks学习英文教程