开发者在集成云之讯SDK前,需在云之讯官方网站注册开发者帐号,可参考新手指引。
前往云之讯官网下载云之讯SDK(下载地址), 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 (必须添加)
在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目录下,放置位置如下图所示:
把导入包勾选 如果执行了Add to Build Path 仍然无法使用jar包,请指向自己的工程,点击鼠标右键,选择Properties目录—>选择Java BuildPath目录—>Order and Export把导入的包勾选—>按下OK,效果如下图:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
<service android:name="com.yzxtcp.service.YzxIMCoreService" /> <receiver android:name="com.yzxtcp.tools.tcp.receiver.AlarmReceiver" > </receiver> <receiver android:name="com.yzxtcp.tools.tcp.receiver.MsgBackReceiver" > </receiver> <receiver android:name="com.yzx.tools.RtppReceiver" />
在整个应用中初始化只需要执行一次,建议在Application中执行,以下是建议的初始化形式:
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); //SDK初始化 UCSService.initAction(this); UCSService.init(this, true); } }
<application android:name=".MyApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
在使用音视频功能前请先添加好音视频状态接口,接口说明请参考音视频回调接口。
接口设置可参考下列代码:
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) { //对方振铃中回调 } });
依赖前提条件: SDK初始化完成。
token方式登入(所有关于云之讯IM的操作都必须在登入成功后才能使用) token 称为用户令牌, token 则是您 App 上的每一个用户的身份授权象征,使用这个 token 作为该用户的唯一身份凭证与其他用户进行通信。 token是从AS服务器(用户服务器,您必须拥有自己的服务器)获取,token由AS服务器按照一定规则生成。 注意:这个TOKEN不是注册开发者账号时获得的TOKEN, 具体可参考IM服务端API介绍及接入。
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 { //登陆失败 } } });
前提条件:以下所有功能的调用都必须满足以下条件:
/** * 发起一个呼叫 * @param mContext:上下文 * @param callType: VOIP:语音 VIDEO:视频 * @param calledNumner:用户clientId或者手机号码 * @param userdata: 自定义透传数据(用于需要借助PaaS平台透传数据给AS服务器或者被叫方,最大长度128字节) 可设置为”” */ UCSCall.dial(Context mContext,CallType callType,String calledNumner,String userdata)
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) { //呼叫失败 }
关键功能API说明
初始化视频设置
/** *初始化视频配置 * @param mActivity 用于显示视频的activity * @param remoteLinearLayout:显示对方视频的布局(LinearLayout) * @param localLinearLayout:显示自己视频的布局(LinearLayout) */ void initCameraConfig(Activity mActivity, LinearLayout remoteLinearLayout, LinearLayout localLinearLayout)
刷新摄像头参数参考UCSCameraType , UCSFrameType
/** 注意:必须在主线程才能调用 * 刷新摄像头 * @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);
在要显示视频的布局文件中加入如下代码 视频布局文件可参考:
<LinearLayout android:id="@+id/remotelayout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" > </LinearLayout> <LinearLayout android:id="@+id/locallayout" android:layout_width="96dip" android:layout_height="144dip" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:background="#7F7F7F" android:orientation="horizontal" > </LinearLayout>
void onIncomingCall(String callId, String callType, String callerNumber ,String nickName,String userdata)
/** * 拒接或挂断电话 * @param mContext:上下文 * @param callId:当前通话ID 可以设置为”” */ UCSCall.hangUp(Context mContext, String callId);