====== Android SDK 开发指南 ====== 本指南一共包含以下七块信息:
1、前言
2、集成前准备
3、快速集成
=====第一节. 前言=====
在您阅读此文档时,我们假定您已经具备了基础的Android应用开发经验,并能够理解相关基础概念以及会使用eclipse等开发工具。 在讲解VideoSDK的集成过程中,我们会以云之讯Demo 为例进行讲解。云之讯Demo是VideoSDK和IMSDK的集成示例demo,开发者可以参考demo的集成用法,我们也鼓励开发者根据自己的需求进行调整。
云之讯Video SDK为开发者提供基础的Video通讯能力,开发者使用SDK快速接入通讯能力。云之讯Demo是VideoSDK与IMSDK的示例Demo, 我们强烈建议开发者在使用VideoSDK之前,先体验云之讯Demo。
=====第二节. 集成前准备===== ====2.1. 注册开发者账号==== 开发者在集成云之讯SDK前,需在云之讯官方网站注册开发者帐号,可参考[[http://docs.ucpaas.com/doku.php?id=%E6%96%B0%E6%89%8B%E6%8C%87%E5%BC%95|新手指引]]。 ====2.2. 下载SDK==== 前往云之讯官网下载云之讯SDK([[http://www.ucpaas.com/product_service/im#item4|下载地址]]), SDK包括2个jar包和5个so库: 1) 音视频核心功能 jar包:yunzhixun_video_SDK_ver_x.x.x.x.jar (必须添加) 2) TCP连接jar包:yunzhixun_TCP_SDK_ver_x.x.x_release.jar (必须添加) 3) 音视频处理库:libUGo.so (必须添加) 4) 加解密序列号库:libpack.so (必须添加) 5) 视频解码库:libH264Decoder.so (可选 只使用音频功能可不添加) 6) 视频编码库:libH264Encoder.so (可选 只使用音频功能可不添加) 7) libOpenSLES.so (必须添加) ====2.3. 导入SDK库==== ===2.3.1=== 在eclipse中新建一个Android工程将SDK包中提供的yunzhixun_video_SDK_ver_x.x.x.x.jar、 yunzhixun_TCP_SDK_ver_x.x.x_release.jar包拷贝到android工程的libs目录下,将armeabi文件夹下的所有so文件拷贝到android工程libs目录下的armeabi目录下,放置位置如下图所示: {{:video_sdk:android_导入sdk_01.png}} ===2.3.2=== Jar包加入到Build Path中,如下图: {{:video_sdk:android_导入sdk_02.png}} ===2.3.3=== 把导入包勾选 如果执行了Add to Build Path 仍然无法使用jar包,请指向自己的工程,点击鼠标右键,选择Properties目录—>选择Java BuildPath目录—>Order and Export把导入的包勾选—>按下OK,效果如下图: {{:video_sdk:android_导入sdk_03.png|}} ====2.4. 添加SDK权限和核心控制器==== *  将下列权限配置添加到Android工程中的AndroidManifest文件中 *  将下表Service与Receiver配置到工程中的AndroidManifest文件中 ===== 第三节. 快速集成 ===== 前提依赖条件 : 1. 下载的云之讯库放到工程的指定位置。 2. SDK权限和核心控制器在AndroidManifest.xml中正确配置。 ====3.1 SDK初始化==== 在整个应用中初始化只需要执行一次,建议在Application中执行,以下是建议的初始化形式: *  新建MyApplication.java 并继承自Application public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); //SDK初始化 UCSService.initAction(this); UCSService.init(this, true); } } *  在AndroidManifest.xml文件中添加MyApplication android:name=”.MyApplication” ====3.2 添加监听器==== 在使用音视频功能前请先添加好音视频状态接口,接口说明请参考音视频回调接口。 接口设置可参考下列代码: UCSCall.addCallStateListener(new CallStateListener() { @Override public void singlePass(int reason) { //单通发生时回调 } @Override public void onRemoteCameraMode(UCSCameraType cameraType) { //对端视频模式回调 } @Override public void onNetWorkState(int reason, String message) { //通话中网络状态上报 } @Override public void onIncomingCall(String callId, String callType, String callerNumber, String nickName, String userdata) { //有新的来电 } @Override public void onHangUp(String callId, UcsReason reason) { //呼叫被释放 } @Override public void onDialFailed(String callId, UcsReason reason) { //呼叫失败 } @Override public void onDTMF(int dtmfCode) { //dtmf回调 } @Override public void onCameraCapture(String videoCapFilePath) { //视频会话截屏回调 } @Override public void onAnswer(String callId) { //接通时回调 } @Override public void onAlerting(String callId) { //对方振铃中回调 } }); ====3.3 连接云之讯服务器==== 依赖前提条件SDK初始化完成。 * 获取TOKEN token方式登入(所有关于云之讯IM的操作都必须在登入成功后才能使用) token 称为用户令牌, token 则是您 App 上的每一个用户的身份授权象征,使用这个 token 作为该用户的唯一身份凭证与其他用户进行通信。 token是从AS服务器(用户服务器,您必须拥有自己的服务器)获取,token由AS服务器按照一定规则生成。 注意:这个TOKEN不是注册开发者账号时获得的TOKEN, 具体可参考[[http://docs.ucpaas.com/doku.php?id=im_服务端开发文档#创建帐号|IM服务端API介绍及接入]]。 * 获取到TOKEN后就可以使用下面方法接入服务器了: UCSManager.connect(token, new ILoginListener() { @Override public void onLogin(UcsReason reason) { if (reason.getReason() == UcsErrorCode.NET_ERROR_CONNECTOK) { //登陆成功 } else { //登陆失败 } } }); * 账户密码方式登入(仅限老平台用户继续使用,新接入者无需关心这种登入方式) UCSManager.connent(String sid, String sidPwd,String clientId,String clientPwd,new ILoginListener() { @Override public void onLogin(UcsReason reason) { if (reason.getReason() == UcsErrorCode.NET_ERROR_CONNECTOK) { //登陆成功 } else { //登陆失败 } } }); ====3.4 拨打VOIP语音电话==== 前提条件:以下所有功能的调用都必须满足以下条件: - SDK初始化完成。 - SDK监听器添加完成。 - 连接服务器成功(调用UCSManager.connect()并返回UcsErrorCode.NET_ERROR_CONNECTOK)。 * 关键功能API说明: /** * 发起一个呼叫 * @param mContext:上下文 * @param callType: VOIP:语音 VIDEO:视频 * @param calledNumner:用户clientId或者手机号码 * @param userdata: 自定义透传数据(用于需要借助PaaS平台透传数据给AS服务器或者被叫方,最大长度128字节) 可设置为”” */ UCSCall.dial(Context mContext,CallType callType,String calledNumner,String userdata) * 拨打VOIP语音电话实例代码调用 UCSCall.dial(mContext,UCSCall.CallType.VOIP, “15845678988”,””); * 响应回调 public void onAlerting(String callId) { //对方振铃中回调 } public void onAnswer(String callId) { //对方接通时回调 } public void onHangUp(String callId, UcsReason reason) { //对方拒接或挂断电话 } public void onDialFailed(String callId, UcsReason reason) { //呼叫失败 } ====3.5 拨打视频电话==== 关键功能API说明 初始化视频设置 /** *初始化视频配置 * @param mActivity 用于显示视频的activity * @param remoteLinearLayout:显示对方视频的布局(LinearLayout) * @param localLinearLayout:显示自己视频的布局(LinearLayout) */ void initCameraConfig(Activity mActivity, LinearLayout remoteLinearLayout, LinearLayout localLinearLayout) 刷新摄像头参数参考UCSCameraTypeUCSFrameType /** 注意:必须在主线程才能调用 * 刷新摄像头 * @param cameraType:要刷新摄像头的枚举 * @param frameType: 是否加上边框的枚举 * @return */ int refreshCamera(UCSCameraType cameraType, UCSFrameType frameType) UCSCall.dial()函数说明参考函数说明参考 * 拨打视频电话实例 mBtnCallVideo.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //开启免提 UCSCall.setSpeakerphone(MainActivity.this, true); //初始化视频配置 必须调用 UCSCall.initCameraConfig(MainActivity.this, remotelayout, locallayout); //发起视频呼叫 UCSCall.dial(MainActivity.this, CallType.VIDEO, "13428702535", ""); } }); 当对方响铃后就可以调用 //开启本地视频显示 该方法必须在主线程调用 UCSCall.refreshCamera(UCSCameraType.LOCALCAMERA, UCSFrameType.FRAME); 当对方接通后就可以调用 //刷新本地和远端视频显示 该方法必须在主线程调用 UCSCall.refreshCamera(UCSCameraType.ALL, UCSFrameType.FRAME); 布局参数定义 private LinearLayout remotelayout, locallayout; remotelayout = (LinearLayout) findViewById(R.id.remotelayout); locallayout = (LinearLayout) findViewById(R.id.locallayout); 在要显示视频的布局文件中加入如下代码 视频布局文件可参考 ====3.6 有新的来电==== void onIncomingCall(String callId, String callType, String callerNumber ,String nickName,String userdata) ====3.7 拒接或挂断电话==== /** * 拒接或挂断电话 * @param mContext:上下文 * @param callId:当前通话ID 可以设置为”” */ UCSCall.hangUp(Context mContext, String callId); ====3.8 接通电话==== /** * 接通电话 * @param mContext:上下文 * @param callId:当前通话ID 可以设置为”” */ UCSCall.answer(Context mContext, String callid);