文档编号:17002B2-DD6-1
版权所有 CloudVoice技术部
版权申明
本文档包含了来自CloudVoice的机密技术和商业信息,这些信息作为CloudVoice专用。接受本文档即视为表示同意对其内容保密,并且未经CloudVoice书面许可,不得复制、泄露或散布本文档的全部或部分内容。
本文档及其描述的内容及产品的著作权和版权受有关法律保护,对本文档内容的任何形式的非法复制,泄露或散布,将导致承担相应的法律责任。
CloudVoice保留在不另行通知的情况下修改本文档的权利,并保留对本文档内容的全部解释权。
“CLOUDVOICE”标识是CloudVoice的注册商标。
This document contains confidential technical and commercial information from CLOUDVOICE Co., Ltd, and is intended for the use of Customers or CLOUDVOICE’s partners only for the purposes of related projects to CLOUDVOICE. No part of it may be reproduced or transmitted in any form or means without the written permission of CLOUDVOICE.
This document and the product it describes are protected by copyright according to the applicable laws.
The information in this document is subject to change without notice and describes only the product defined in the introduction of this documentation. CLOUDVOICE will, if necessary, explain issues, which may not be covered by the document.
“CLOUDVOICE” logo is a registered trademark of CLOUDVOICE Co., Ltd.
修订历史
日期 | 版本 | 说明 | 作者 |
---|---|---|---|
2017-03-24 | 1.0.0 | 文档编写 | 黄小龙 |
2017-04-12 | 1.0.1 | 文档更新 | 黄小龙 |
2017-04-21 | 1.0.2 | 文档更新 | 黄小龙 |
2017-12-04 | 1.0.3 | 文档更新 | 黄小龙 |
2018-01-03 | 1.0.3 | 文档更新 | 黄小龙 |
2018-07-11 | 1.0.4 | 文档更新 | 黄小龙 |
版本差异
版本 | 功能更新 | 说明 |
---|---|---|
1.0.0 | 语音直播,文字直播 | 包含语音直播,文字直播基本功能 |
1.0.1 | 增加获取语音房间在线人数 | 相关实现方法请看文档或Demo |
1.0.2 | 增加主播在线状态,增加开启,关闭语音直播声音功能 | 相关实现方法请看文档或Demo |
1.0.3 | 新增多人连麦功能 | 相关实现方法请看文档或Demo |
1.0.4 | 新增背景音乐播放功能 | 相关实现方法请看文档或Demo |
定义CloudVoice语音直播iOS SDK 客户端集成接口。
本文档发布于CloudVoice技术部技术部、产品部及此项目合作公司相关人员。本文档不属于客户契约性文档,不能发布予客户。
术语 | 定义 |
---|---|
appId | 应用编号(需向CloudVoice申请获取) |
(1)向CloudVoice申请appId,否则使用会失效;
将压缩包根目录下的文件夹:CloudVoiceVLSDK文件夹拖入到您的工程文件夹下,里面含有libCloudVoiceVLSDK.a静态库(含基本的语音直播,文字聊天功能)及include文件夹的头文件(CloudVoiceVLSDK.h,CloudVoiceVLProtocol.h),拖到工程中后弹出以下对话框,勾选”Copy items if needed”,与“Create groups”单选按钮组并点击“Finish“按钮, 如图:
在需要导入的framework,tdb,a请不要重复添加
最终效果图如下:
(1)由于SDK 静态库内部有Category 所以需要设置:
Build Settings->other linker flags 设置 -ObjC(区分大小写)
(2)注:由于声音录制只支持真机,故测试语音直播效果需要使用真机设备调试!
在objective-C 下使用SDK接口,在任何地方引用SDK,只需要包含CloudVoiceVLSDK.h、和CloudVoiceVLProtocol.h(模型)头文件,并遵循相应的监听回调协议(CloudVoiceVLSDKDelegate)即可。
所有所有登录,退出,发送消息,开始直播,结束直播接口均通过[CloudVoiceVLSDK shareInstance]对象来操作,所需用到模型全部在CloudVoiceVLProtocol.h里。
代码示例:
[[CloudVoiceVLSDK shareInstance] addDelegate:self];
[[CloudVoiceVLSDK shareInstance] userLoginWith:req];
如果不再使用请切记清除代理实例,避免在回调发生时实例已经不存在而已产生致命错误,在ARC开启时,这个引用会导致实例无法自动销毁,一般在- (void) viewWillDisappear:(BOOL)animated里销毁
代码示例:
[[CloudVoiceVLSDK shareInstance] removeDelegate:self];
简单介绍下各个主要文件的作用:
CloudVoiceVLSDK.h文件中主要是初始化,开始语音直播等功能接口
CloudVoiceVLProtocol.h文件含有所有需要使用到的model
+ (instancetype)shareInstance;
代码示例:
[CloudVoiceVLSDK shareInstance];
返回接口实例(单例模式),建议cp首先设置代理,然后初始化,登录,再调用其他接口。
代码示例:
[[CloudVoiceVLSDK shareInstance] addDelegate:self];
SDK内置的日志打印,为的是如果SDK有问题,可用打开日志看一下SDK内部打印。不设置默认是关闭的。
- (void)setLogLevel:(int)logLevel;
协议字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
logLevel | int | 是 | 日志级别,设置日志级别:0–关闭日志(不设置为默认该级别) 1–error 2–debug 3–warn 4–info 5–trace |
代码示例
[[CloudVoiceVLSDK shareInstance] setLogLevel:0];
SDK的初始化非常重要,请准确填写您的appId以及运行环境。appId是由用户提供 游戏名称、包名和公司名称给CloudVoice后,CloudVoice会分配一个唯一的appId来标示这个APP应用 Demo的appId为100000.运行环境分为测试环境和正式环境两种,测试环只是为境了把业务的逻辑全测试通过,发布版本要选为正式环境。
注意:初始化只需调用一次。请勿重复初始化。
*- (void)initWithAppId:(NSString )appId isTest:(BOOL)isTest audioType:(CloudVoiceVLSDKAudioType)audioType;
接口字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
appId | NSString | 是 | 应用编号(需向CloudVoice申请,统一由CloudVoice分配) |
isTest | BOOL | 是 | true:访问测试环境;false:访问正式环境; |
audioType | CloudVoiceVLSDKAudioType | 是 | AAC或者是OPUS |
** 代码示例:
[[CloudVoiceVLSDK sharedInstance] initWithAppId:@“100000” isTest:NO audioType:CloudVoiceVLSDKAudioType_OPUS]; **
-(void)userLoginWith:(CloudVoiceVLLiveUserLoginReq)voiceLiveUserLoginReq;*
协议字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
voiceLiveUserLoginReq | CloudVoiceVLUserLoginReq | 是 | 账号绑定验证码 |
代码示例:
CloudVoiceVLLiveUserLoginReq *voiceLiveUserLoginReq= [[CloudVoiceVLLiveUserLoginReqalloc] init];
voiceLiveUserLoginReq.appId = @”100000”;//此处填写申请的应用编号
voiceLiveUserLoginReq.roomId = @”100000”;//此处填写房间编号
voiceLiveUserLoginReq.userId = @”100000”;//此处填写用户编号
voiceLiveUserLoginReq.type = @”0”;//此处填写用户类型0为观众 1为主播
voiceLiveUserLoginReq.ext = @””;//此处填写扩展字段,可放空
voiceLiveUserLoginReq.nickname = @”我是大帅哥”;//用户昵称
[[CloudVoiceVLSDK sharedInstance] userLoginWith:voiceLiveUserLoginReq];//发起登录请求
-(void)voiceSDK :(CloudVoiceVLSDK )voiceSDK didLoadUserLoginResp:(CloudVoiceVLRoomLoginResp)voiceLiveUserLoginResp
CloudVoiceVLUserLoginResp是一个模型共有2个字段。
接口字段 | 类型 | 说明 |
---|---|---|
result | Int | 返回0表示登录成功 |
msg | NSString | 错误描述 |
anchorOnlive | Int | 返回0主播在线,返回1主播离线 |
代码示例:
- (void)voiceSDK:(CloudVoiceVLSDK )voiceSDK didLoadUserLoginResp:(CloudVoiceVLRoomLoginResp)voiceLiveUserLoginResp
{
if (voiceLiveUserLoginResp.result == 0)//登录成功
{
//登录成功,可以进行登录房间的操作
}
else//登录失败
{
//登录失败,请重新验证
}
if (voiceLiveRoomLoginResp.anchorOnlive == 1)
{
[CloudVoiceVLProgressHud showTextHUDMaintain2Seccond:@“主播当前离线”];
}
else if (voiceLiveRoomLoginResp.anchorOnlive == 0)
{
[CloudVoiceVLProgressHud showTextHUDMaintain2Seccond:@“主播当前在线”];
}
}
-(void)sendMessageWith:(CloudVoiceVLRoomSendRoomMsgReq *)voiceLiveRoomSendRoomMsgReq;
CloudVoiceVLRoomSendRoomMsgReq是一个模型,共5个字段。
协议字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
msg_type | NSString | 是 | 1.文字 2.图片 3.声音 4.视频(目前只支持文字消息,默认传注:客户可以自己自定义消息类型,比如说踢人,警告,送礼之类的,房间内其他用户会收到该消息通知,然后客户端根据msg_type类型做相应的处理即可(自定义msg_type建议从1000以后开始,防止和其他消息类型冲突!!!) |
payload | NSString | 是 | 消息内容 |
ext | NSString | 否 | 扩展字段 |
ext2 | NSString | 否 | 扩展字段2 |
代码示例:
CloudVoiceVLRoomSendRoomMsgReq *voiceLiveRoomSendRoomMsgReq = [[CloudVoiceVLRoomSendRoomMsgReq alloc] init];
voiceLiveRoomSendRoomMsgReq.msg_type = @“1”;
voiceLiveRoomSendRoomMsgReq.payload = @”消息内容”;
voiceLiveRoomSendRoomMsgReq.ext = @“”;
voiceLiveRoomSendRoomMsgReq.ext2 = @“”;
[[CloudVoiceVLSDK sharedInstance] sendMessageWith:voiceLiveRoomSendRoomMsgReq];
- (void)voiceSDK:(CloudVoiceVLSDK *)voiceSDK didLoadLiveRoomSendMsgResp:(CloudVoiceVLRoomSendMsgResp *)voiceLiveRoomSendMsgResp;
CloudVoiceVLRoomSendRoomMsgReq是一个模型,共5个字段。
接口字段 | 类型 | 说明 |
---|---|---|
result | Int | 返回0表示登录房间成功 |
msg | NSString | 错误描述 |
代码示例:
- (void)voiceSDK:(CloudVoiceVLSDK *)voiceSDK didLoadLiveRoomSendMsgResp:(CloudVoiceVLRoomSendMsgResp *)voiceLiveRoomSendMsgResp
{
if (voiceLiveRoomSendMsgResp.result == 0)
{
NSLog(@“消息发送成功”);
}
else
{
NSLog(@“消息发送失败”);
}
}
- (void)voiceSDK:(CloudVoiceVLSDK *)voiceSDK didLoadLiveRoomReceiveMsg:(CloudVoiceVLRoomReceiveMsg *)voiceLiveRoomReceiveMsg;
CloudVoiceVLRoomReceiveMsg是一个模型,共9个字段。
协议字段 | 类型 | 说明 |
---|---|---|
appId | NSString | 应用编号 |
roomId | NSString | 房间编号 |
userId | NSString | 用户编号 |
msgId | NSString | 消息编号 |
msg_type | NSString | 1为text,2为pictrue,3为voice,4为video,5为推送消息,6为主播在线/离线消息 |
payload | NSString | 消息内容,当msg_type为6时,payload = 0(主播在线),payload = 1(主播离线) |
ext | NSString | 扩展字段 |
ext2 | NSString | 扩展字段2 |
nickname | NSString | 用户昵称 |
协议字段 | 类型 | 说明 |
---|---|---|
appId | NSString | 应用编号 |
roomId | NSString | 房间编号 |
users | UInt64 | 用户数 |
协议字段 | 类型 | 说明 |
---|---|---|
targetId | NSString | 被申请操作方 |
msgType | CloudVoiceVLSDK MicActionType | 消息类型:0上麦,1下麦,2禁麦,3解除禁麦,4强制下麦,5主播上麦,6主播下麦 |
ext | NSString | 扩展字段(可为空) |
代码示例:
[[CloudVoiceVLSDK sharedInstance] micActionWithTargetId:model.userId msgType: CloudVoiceVLSDK MicActionType_Up
ext:nil];
接口字段 | 类型 | 说明 |
---|---|---|
result | Int | 返回0表示成功,其他为失败 |
msg | NSString | 错误描述 |
-(void)micActionResultWithMicActionResultModel:(CloudVoiceVLRoomReceiveMicActionResultNotify *)model;
CloudVoiceVLRoomReceiveMicActionResultNotify 是一个模型,共3个字段。
协议字段 | 类型 | 说明 |
---|---|---|
userId | NSString | 被申请操作方 |
resType | int8_t | 回复类型:0同意 1拒绝 |
nickname | NSString | 昵称 |
代码示例:
CloudVoiceVLRoomReceiveMicActionResultNotify *model = [[CloudVoiceVLRoomReceiveMicActionResultNotify alloc] init];
model.userId = “100000”;
model.resType = 0;
model.nickname = “大帅哥”;
[[CloudVoiceVLSDK sharedInstance] micActionResultWithMicActionResultModel:model];
协议字段 | 类型 | 说明 |
---|---|---|
msgType | CloudVoiceVLSDK MicQueryType | msgType 查询类型:0连麦用户,1申请列表 |
代码示例:
[[CloudVoiceVLSDK sharedInstance] micQueryWithMsgType: CloudVoiceVLSDK MicQueryType_UserMic
];
协议字段 | 类型 | 说明 |
---|---|---|
userId | NSString | 用户id |
代码示例:
[[CloudVoiceVLSDK sharedInstance] openVoiceWithUserId:”100000”];
协议字段 | 类型 | 说明 |
---|---|---|
userId | NSString | 用户id |
代码示例:
[[CloudVoiceVLSDK sharedInstance] pasueVoiceWithUserId:”100000”];
协议字段 | 类型 | 说明 |
---|---|---|
userId | NSString | 被申请操作方 |
resType | int8_t | 回复类型:0同意 1拒绝 |
nickname | NSString | 昵称 |
协议字段 | 类型 | 说明 |
---|---|---|
userId | NSString | 被申请操作方 |
resType | int8_t | 回复类型:0同意 1拒绝 |
nickname | NSString | 昵称 |
协议字段 | 类型 | 说明 |
---|---|---|
userId | NSString | 用户id |
lever | int | 音量等级 |
协议字段 | 类型 | 说明 |
---|---|---|
paths | NSArray <NSString > | 文件路径数组 |
代码示例:
[[CloudVoiceVLSDK sharedInstance] initAudioFileWithPaths:@[]];
协议字段 | 类型 | 说明 |
---|---|---|
index | int | 音频列表索引 |
代码示例:
[[CloudVoiceVLSDK sharedInstance] setPlayAudioWithIndex:0];
协议字段 | 类型 | 说明 |
---|---|---|
block | 函数指针 | 回调函数 |
代码示例:
[[CloudVoiceVLSDK sharedInstance] setAudioPlayerSliderBlock: block];
CloudVoiceVLProtocol类属性说明
接口字段 | 类型 | 说明 |
---|---|---|
result | Int | 0表示发送成功 |
msg | NSString | 消息内容 |
appId | NSString | 应用编号 |
roomId | UInt32 | 房间编号 |
userId | NSString | 用户编号 |
type | NSString | 1.文字 2.图片 3.声音 4.视频(目前只支持文字消息,默认传1) |
ext | 扩展字段 | |
ext2 | NSString | 扩展字段2 |
osType | NSString | 操作系统类型, 1为Android 2为iOS 7为PC端 |
msg_type | NSString | 1.文字 2.图片 3.声音 4.视频(目前只支持文字消息,默认传1) |
payload | UInt32 | 文字内容 |
nickname | UInt32 | 昵称 |
文档正标题 | CloudVoice语音直播iOS SDK集成说明书 |
---|---|
文档版本 | 1.0 |
文档编号 | 17002B2-DD6-1 |
文档主体 | DOC |
绑定类型 | DOC |
VSD | |
常见问题 | 可能引起的原因 | 解决方法 |
---|---|---|
不能编译 | 1、未设置-ObjC | other linker flags 设置 -ObjC |
2、没有导入完整的引用库 | 检测库是否导入完整 | |
模拟器崩溃 | 1、音频录制不支持模拟器 | 换用真机调试 |