开发者中心

CLVoice语音直播Android SDK接口集成说明书

版 本 号:V502
编制部门:技术部
拟 制 人:邓军
日    期:2017年12月14日
产品名称:CLVoice语音直播 SDK
平台:android
文档编号:17002B1-DD6-1

版权申明
本文档包含了来自CLVoice的机密技术和商业信息,这些信息作为北京瑞文博凡信息技术有限公司专用。接受本文档即视为表示同意对其内容保密,并且未经北京瑞文博凡信息技术有限公司书面许可,不得复制、泄露或散布本文档的全部或部分内容。
本文档及其描述的内容及产品的著作权和版权受有关法律保护,对本文档内容的任何形式的非法复制,泄露或散布,将导致承担相应的法律责任。
CLVoice保留在不另行通知的情况下修改本文档的权利,并保留对本文档内容的全部解释权。
 
This document contains confidential technical and commercial information from CLVOICE Co., Ltd, and is intended for the use of Customers or CLVOICE’s partners only for the purposes of related projects to CLVOICE. No part of it may be reproduced or transmitted in any form or means without the written permission of CLVOICE.
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. CLVOICE will, if necessary, explain issues, which may not be covered by the document.
“CLVOICE” logo is a registered trademark of CLVOICE Co., Ltd. 
 
隐私政策说明

类型 建议方案 处理方
数据说明 隐私政策中说明收集的数据类型、存储目录和使用场景 CP
数据类型:音频数据 CLVoice
存储目录:应用本身data分区files文件夹,Gt_Voice服务器存储(时长一个月)
使用场景:发送录音文件,实时对讲
数据加密 SDK采集和传输的所有音视频数据已进行Https加密 CLVoice
权限弹框 调用麦克风或摄像头时弹框提示,用户点确认按钮后方可使用 CP
隐私弹框 隐私政策弹框,用户点确认方可使用 CP
隐私条款 在开发平台指定字段和应用内张贴隐私政策 CP


修订历史

日期 版本 说明 作者
2017-4-6 1.0.0 文档 起草 荆玉林
2017-6-6 1.0.3 优化,修改接口 杨奔
2017-6-26 1.0.4 新增接口类型 李博
2017-12-12 1.0.5 新需求 邓军

1.概述 ( Overview )

1.1 范围 ( Scope )

定义CLVoice语音直播android sdk 客户端集成接口。

1.2 发布 ( Issue )

本文档发布于CLVoice技术部、产品部及此项目合作公司相关人员。本文档不属于客户契约性文档,不能发布予客户

1.3 综述 ( Brief )

2.定义 ( Definition )

2.1 术语 ( Terminologies )

术语 定义
appId 应用编号(需向CLVoice申请获取)

表格 1  术语表

2.2 约束 ( Constraints )

3.运行环境

Android2.3及以上

4.集成步骤(必读)

4.1 申请appId

(1)向GT申请appId,否则使用会失效;

4.2 导入依赖jar包 和so库

(1)添加jar包到工程目录,例如android studio,将jar包文件放至主工程libs目录下。
 
(2)将armeabi-v7a文件夹里所有的so文件放至工程armeabi-v7a目录下,例如android studio的so文件目录通常为jniLibs/armeabi-v7a/。
注意:如果应用本身libs目录里还有armeabi或x86的,需要将armeabi/x86的so文件放到相应的目录。

4.3 配置AndroidManifest

(1)添加权限

<uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

4.4 初始化SDK

/**
* 初始化 *
* @param context  //上下文 * @param appId    //应用编号,有CL分配给CP方 * @param isTest   //是否是测试环境  false:正式环境   true:测试环境 * @voiceParam voiceParam //语音参数 */
public void init(Context context, String appId, boolean isTest, VoiceParam voiceParam)

_VoiceParam_说明:

streamType
播放器流类型:AudioManager.STREAM_MUSIC; AudioManager.STREAM_VOICE_CALL(默认)
audioEncodeFormat
编码格式:
AUDIO_FORMAT_AAC(默认)
AUDIO_FORMAT_OPUS
sendSampleSizeInHz
发送的编码音频采样率,如果需要和微信互通,需设置48k(默认),此值目前只对aac编码方式有效
SAMPLE_SIZE_IN_HZ_48000
SAMPLE_SIZE_IN_HZ_16000(默认)

4.5 开始播放

/**
* 开始播放 */
public void startPlay()

4.6 停止播放

/**
* 停止播放 */
public void stopPlay()

4.7 开始推流

/**
* 开始推流 */
public void startPush()

4.8 停止推流

_/**
* 停止推流 */public void stopPush()

4.9 是否正在播放

/**
* 是否正常播放语音 * @return
*/
public boolean isPlaying()

4.10 释放资源

/**
* 释放资源 */
public void release()

4.11 设置log开关

/**
* 设置log开关 *
* @param enable
*/
public void setLogEnable(boolean enable)

4.12 获取用户信息

/**
* 获取用户信息 * @return
*/
public UserInfo getUserInfo()

4.13 登录

/**
* 登录 *
* @param userInfo
*/
public void login(UserInfo userInfo)

_UserInfo_说明:

userId 用户id
roomId 房间id
userName
用户名
type
发起方角色,0普通用户,1主播
ext 扩展字段
anchorId 主播id  初始化时无需设置
anchorPushUrl 主播推流地址 初始化时无需设置
anchorPullUrl 拉主播地址  初始化时无需设置
streamType
播放器流类型:AudioManager.STREAM_MUSIC;(默认)
AudioManager.STREAM_VOICE_CALL

4.14 登出

/**
* 登出 */
public void logout()

4.15 查询房间在线人数

/**
* 查询房间在线人数 */
public void queryOnlineUserNum()
 

4.16 发送消息

/**
* 发送消息接口 * @param message   message都是继承TlvSignal
*/
public void sendMessage(TlvSignal message)

4.17 麦查询接口

_/**
* 麦查询接口 * @param micQueryReq
*/
public void micQuery(MicQueryReq micQueryReq) _

4.18 麦操作接口

/**
* 麦操作接口 * @param micActionReq
*/
public void micAction(MicActionReq micActionReq)

4.19 麦操作结果接口

/**
* 麦操作结果接口 * @param micActionResultReq
*/
public void micActionResult(MicActionResultReq micActionResultReq)

4.20 加消息回调接口

/**
* 加消息回调接口 * @param messageCallback
*/
public void addMessageCallback(MessageCallback messageCallback)

4.21 移除消息回调接口

/**
* 移除消息回调接口 * @param messageCallback
*/
public void removeMessageCallback(MessageCallback messageCallback)
 

4.22 初始化流

/**
* 初始化流 * @param userId
* @param type
* @param urlStream
*/
public void initStream(String userId, String type, String urlStream)

4.23 开启流

/**
* 开启流 * @param userId
* @param type
*/
public void openStream(String userId, String type)

4.24 关闭流

/**
* 关闭流 * @param userId
* @param type
*/
public void closeStream(String userId, String type)

4.25 释放流

/**
* 释放流 * @param userId
* @param type
*/
public void releaseStream(String userId, String type)

4.26 消息类型常量

_public enum MessageType {
  LoginInReq(MSGCODE_LOGININREQ, “登录请求”),
  LoginInResp(MSGCODE_LOGININRESP, “登录请求响应”),

LoginOutReq(MSGCODE_LOGINOUTREQ, “登出请求”),
  LoginOutResp(MSGCODE_LOGINOUTRESP, “登出请求响应”),

HeartBeatReq(MSGCODE_HEARTBEATREQ, “心跳请求”),
  HeartBeatResp(MSGCODE_HEARTBEATRESP, “心跳请求响应”),

QueryRoomUserCountReq(MSGCODE_QUERYUSERSEQ, “查询房间人数请求”),
  QueryRoomUserCountResp(MSGCODE_QUERYUSERSRESP, “查询房间人数请求响应”),

SendMsgReq(MSGCODE_SENDMSGREQ, “发送消息请求”),
  SendMsgResp(MSGCODE_SENDMSGRESP, “发送消息请求响应”),

MsgNotice(MSGCODE_MSGNOTIC, “消息通知”),

MicQueryReq(MSGCODE_MICQUERYREQ, “麦查询请求”),
  MicQueryResp(MSGCODE_MICQUERYRESP, “麦查询响应”),

MicActionResultReq(MSGCODE_MICACTIONRESULTREQ, “麦操作结果请求”),
  MicActionResultResq(MSGCODE_MICACTIONRESULTRESP, “麦操作结果响应”),

MicActionReq(MSGCODE_MICACTIONREQ, “麦操作请求”),
  MicActionResp(MSGCODE_MICACTIONRESP, “麦操作响应”),

MicActionNotify(MSGCODE_MICACTIONNOTIFY, “麦操作通知”),
  MicActionResultNotify(MSGCODE_MICACTIONRESULTNOTIFY, “麦操作结果通知”);
}_

4.27 消息编码,含义对应消息类型常量中的

_public class MessageCode {
   public static final byte RESULT_OK = 0;//返回成功    public static final byte RESULT_FAIL= 1;//返回失败
   public static final int MODULEID_ALL = 0x0000;
   public static final int MSGCODE_REGISTRESP = 0x0002;

public static final int MSGCODE_LOGININREQ = 0x0001;
   public static final int MSGCODE_LOGININRESP = 0x0002;
   public static final int MSGCODE_LOGINOUTREQ = 0x0007;
   public static final int MSGCODE_LOGINOUTRESP = 0x0008;
   public static final int MSGCODE_HEARTBEATREQ = 0x0009;
   public static final int MSGCODE_HEARTBEATRESP = 0x0010;
   public static final int MSGCODE_QUERYUSERSEQ = 0x0011;
   public static final int MSGCODE_QUERYUSERSRESP = 0x0012;
   public static final int MSGCODE_SENDMSGREQ = 0x0003;
   public static final int MSGCODE_SENDMSGRESP = 0x0004;
   public static final int MSGCODE_MSGNOTIC = 0x0005;

public static final int MSGCODE_MICQUERYREQ = 0x0023;
   public static final int MSGCODE_MICQUERYRESP = 0x0024;
   public static final int MSGCODE_MICACTIONRESULTREQ = 0x0025;
   public static final int MSGCODE_MICACTIONRESULTRESP = 0x0026;
   public static final int MSGCODE_MICACTIONREQ = 0x0021;
   public static final int MSGCODE_MICACTIONRESP = 0x0022;
   public static final int MSGCODE_MICACTIONNOTIFY = 0x0027;
   public static final int MSGCODE_MICACTIONRESULTNOTIFY = 0x0029;
}_

4.28 语音相关常量

public class VoiceConstants {
   //拉流类型
   public final static String PULL = “pull”;
   //推流类型
   public final static String PUSH = “push”;

//在线标志
   public final static int ONLINE_STATE_LIVE = 0;
   //离线标志
   public final static int ONLINE_STATE_NOT_LIVE = 1;

//查询类型:0连麦用户,1申请列表
   public static final byte MIC_QUERY_CONNECT_USER = 0;
   public static final byte MIC_QUERY_APPLY_USER = 1;

//结果类型:0同意,1拒绝
   public static final byte MIC_ACTION_AGREE = 0;
   public static final byte MIC_ACTION_REFUSE = 1;

//发起方角色,0普通用户,1主播
   public final static byte MIC_TYPE_SPEAKER = 1;
   public final static byte MIC_TYPE_LISTENER = 0;

//0上麦,1下麦,2禁麦,3解除禁麦,4强制下麦,5主播上麦,6主播下麦, 7 上麦自动同意
public final static byte MIC_TYPE_UP= 0;
public final static byte MIC_TYPE_DOWN = 1;
public final static byte MIC_TYPE_FORBID = 2;
public final static byte MIC_TYPE_CANCER_FORBID = 3;
public final static byte MIC_TYPE_HARD_DOWN = 4;
public final static byte MIC_TYPE_SPEAKER_UP = 5;
public final static byte MIC_TYPE_SPEAKER_DOWN = 6;
public final static byte MIC_TYPE_DOWN_AUTO_AGREE = 7;
__    public final static byte[] MicSpeakerPermission1 = {
           MIC_ACTION_AGREE,
           MIC_ACTION_REFUSE};

public final static byte[] MicSpeakerPermission2 = {
           MIC_TYPE_FORBID,
           MIC_TYPE_CANCER_FORBID,
           MIC_TYPE_HARD_DOWN};

public final static byte[] MicSpeakerPermission3= {
           MIC_TYPE_UP,
           MIC_TYPE_DOWN,
           MIC_TYPE_FORBID,
           MIC_TYPE_CANCER_FORBID,
           MIC_TYPE_HARD_DOWN};

public final static byte[] MicListenerType= {
           MIC_TYPE_UP,
           MIC_TYPE_DOWN};
 _
public final static byte[] MicListenerRoomType= {
       MIC_TYPE_DOWN_AUTO_AGREE,
       MIC_TYPE_DOWN};

public final static byte[] MicSpeakType= {
           MIC_TYPE_SPEAKER_UP,
           MIC_TYPE_SPEAKER_DOWN};

public final static String[] MicAudioPullStream= {
           “open”,
           “close”};

//已经初始化
   public final static int STATUS_INITED = 0;
   //没有初始化
   public final static int STATUS_HAVE_NOT_INIT = 1;
  //推流断开
public final static int STATUS_PUSH_STREAM_DISCONNECT = 2;
//推流开启
public final static int STATUS_PUSH_STREAM_OPEN = 3;
//推流关闭
public final static int STATUS_PUSH_STREAM_CLOSE = 4;

//拉流连接断开
public final static int STATUS_PULL_STREAM_DISCONNECT = 5;
//拉流打开,
public final static int STATUS_PULL_STREAM_OPEN= 6;
//拉流关闭,
public final static int STATUS_PULL_STREAM_CLOSE = 7;
_
   //1 text,2pictrue,3voice,4video,5是开放平台推送的消息类型 6是主播上下线的消息通知 7为客户定制消息 8 房员登录通知 9 禁言通知    /
    * text
    */
   public final static String PUSH_TYPE_TEXT = “1”;
   /

    * pictrue
    */
   public final static String PUSH_TYPE_PIC = “2”;
   /
    * voice
    */
   public final static String PUSH_TYPE_VOICE = “3”;
   /

    * video
    */
   public final static String PUSH_TYPE_VIDEO = “4”;
   /
    * 开放平台推送的消息类型     */
   public final static String PUSH_TYPE_OPEN_PLATFORM = “5”;
   /

    * 主播上/下线的消息通知     */
   public final static String PUSH_TYPE_ANCHOR_DOWN = “6”;
   /
    * 客户定制消息     */
   public final static String PUSH_TYPE_CUSTOMI = “7”;
   /

    * 房员登录通知     */
   public final static String PUSH_TYPE_LOGIN_ROOM = “8”;
   /**
    * 禁言通知     */
   public final static String PUSH_TYPE_BAN_SPEAK = “9”;

//登录登出    public final static String LISTENER_LOGIN = “0”;
   public final static String LISTENER_LOGOUT = “1”;

//发送消息成功    public final static  boolean SEND_MSG_SUCCESS = true;
   ////发送消息成功    public final static  boolean SEND_MSG_FAIL = false;
 
/音乐播放声音大小/
public final static int VOLUME_TYPE_PLAY_MUSIC = 0;
/音乐发送声音大小/
public final static int VOLUME_TYPE_SEND_MUSIC = 1;
}_

4.29 消息回调接口

public interface MessageCallback {
   //状态回调方法    void onStatus(int status , String msg);
   //接收消息回调方法    void onMessage(int msgCode,Object msg);
   //发送消息回调方法    void onSend(boolean status,int msgCode,Object msg);
}

说明:使用方法见demo

4.30 消息类型


说明:红色框中的类,都是继承TlvSignal,使用方法见demo

4.31 音量调节

/**
* 调节音量 * @param volumeType
* @param volume  范围浮点0到1.0
*/
public void adjustVolume(int volumeType,float volume)

4.32 获取音量

/**
* 获取音量 * @param volumeType
* @return
*/
public float getVolume(int volumeType)

4.33 是否开启了麦克风

/**
* 是否开启了麦克风 * @return
*/
public boolean isMicEnable()

4.34 麦克风开关

/**
* 麦克风开关 * @param micEnable
*/
public void setMicEnable(boolean micEnable)

4.35 是否开启了扬声器

/**
* 是否开启了扬声器 * @return
*/
public boolean isTrumpetEnable()

4.36 扬声器开关

/**
* 扬声器开关 * @param trumpetEnable
*/
public void setTrumpetEnable(boolean trumpetEnable)

4.37 设置音量等级监听

/**
* 设置音量等级监听 * @param volumeCallback
*/
public void setVolumeCallback(VolumeCallback volumeCallback)

4.38 获取音乐播放器

/**
* 获取音乐播放器 * @return
*/
public MusicPlayer getMusicPlayer()

4.39 MusicPlayer接口

_public interface MusicPlayer {
   /**
    * 设置音乐文件路径     * @param filePath
    */
   void setDataSource(String filePath);

/**
    * 开始播放音乐     */
   void start();

/**
    * 停止播放音乐     */
   void stop();

/**
    * 是否正在播放音乐     * @return
    */
   boolean isPlay();

/**
    * 是否暂停了播放     * @return
    */
   boolean isPause();

/**
    * 暂停播放     */
   void pause();

/**
    * 恢复暂停播放     */
   void resume();

/**
    * 重置播放器,暂未实现     */
   void reset();

/**
    * 设置播放状态监听     * @param playStatusListener
    */
   void setStatusListener(PlayStatusListener playStatusListener);

/**
    * 设置同步状态监听     * @param playStatusListener
    */
   void setListener(PlayStatusListener playStatusListener);

/
    * 设置数据回调接口     * @param audioDataCallback
    */
   void setAudioDataCallback(AudioDataCallback audioDataCallback);
 
/

* 快进快退 * @param timeUs
*/
void seekTo(long timeUs);

/**
* 获取音乐时长 us
* @return
*/
long getDuration();

/**
* 获取已播放音乐时长 us
* @return
*/
long getPlayedDuration();

/**
* 获取未播放音乐时长 us
* @return
*/
long getRemainDuration();

void setPlayProgressCallback(PlayProgressCallback playProgressCallback);
}_

4.40 设置语音输出通道回调

/**
* 设置语音输出通道回调 * @param audioRouteCallback
*/
public void setAudioRouteCallback(AudioRouteCallback audioRouteCallback)

 
}

4.41 设置语音输出通道回调

/**
* 设置语音输出通道回调 * @param audioRouteCallback
*/
public void setAudioRouteCallback(AudioRouteCallback audioRouteCallback)

4.42 语音路由切换的回调;

public interface AudioRouteCallback {
   /* 扬声器*/
   int ROUTE_LOUD_SPEAKER = 0;
   /* 听筒*/
   int ROUTE_TELEPHONE_RECEIVER = 1;
   /* 耳机*/
   int ROUTE_HEADPHONE = 2;
   /* 蓝牙*/
   int ROUTE_BLUETOOTH = 3;
   void onRoute(int route,String info);
}

4.43 播放进度回调

public interface PlayProgressCallback {
   /**
    *
    * @param musicPlayer
    * @param durationUs
    * @param playedDurationUs
    * @param remainDurationUs
    */
   void onProgress(final MusicPlayer musicPlayer,long durationUs, long playedDurationUs,long remainDurationUs);
}

5.混淆

5.1 混淆配置

-keep class com.chuanglan.{*;}
-keep class com.cloudvoice.
{;}
-keep class com.cloud.**{
;}
-keep class org.apache.mina.** { ;}
-keep class org.slf4j.
* { ;}
-keep class com.third.google.gson.**{
;}
-keep class com.network.okhttp.**{*;}