音视频

一.      Android版本环境集成说明

1.  引用插件

1、开发者主Module的build.gradle配置文件中添加如下代码
  • android {
  •     //.........
  •     repositories {
  •         flatDir {
  •             dirs 'libs'
  •         }
  •     }

  • }
2、在开发者主Module的libs里面添加需要的aar文件(如下图所示)
3、在开发者主Module的build.gradle配置文件中依赖导入的aar文件
注意事项:若之前集成过其他插件,已依赖如下某个aar文件,如
Yuntx_Android_Common_Plugin_v1.1.x,则无需再次依赖
  • dependencies {
  •     // ........
  •     compile(name: 'Yuntx_Android_Voip_Plugin_v1.1.x', ext: 'aar')
  •     compile(name: 'Yuntx_Android_Common_Plugin_v1.1.x', ext: 'aar')
  •     // ........
  • }
4、在开发者主Module的build.gradle配置文件中依赖如下第三方包
注意事项:如果之间已有以下某个第三方库,可使用原有的,也可以根据自己需求更换新的版本
  • dependencies {
  •     // ........
  •     compile 'com.github.bumptech.glide:glide:3.7.0'
  •     compile 'org.jsoup:jsoup:1.10.1'
  •     compile 'io.reactivex:rxjava:1.1.1'
  •     compile 'io.reactivex:rxandroid:1.1.0'
  •     compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'
  •     compile('com.squareup.retrofit2:converter-gson:2.1.0') {
  •         transitive = true
  •     }
  •     compile 'com.alibaba:fastjson:1.2.17'

2.  配置工程

1.3.1 清单文件中权限申请

  • // SDK 权限申明, 第三方 APP 接入时,请将 com.yuntongxun.voipdemo 替换为自己的包名
  • // 和下面的 uses-permission 一起加入到你的 AndroidManifest 文件中。
  • <permission
  •     android:name="com.yuntongxun.voipdemo.permission.RECEIVE_MSG"
  •     android:protectionLevel="signature" />
  • <permission
  •     android:name="com.yuntongxun.voipdemo.permission.INCOMING_CALL"
  •     android:protectionLevel="signature" />
  • <uses-permission android:name="com.yuntongxun.voipdemo.permission.RECEIVE_MSG" />
  • <uses-permission android:name="com.yuntongxun.voipdemo.permission.INCOMING_CALL" />

1.3.2 复制指定的文件

1) 复制指定的类
请把下面的自定义广播类YuntxNotifyReceiver.java文件粘贴到开发者的module中(完整版 包含IM和Voip)
2) 复制指定的声频文件
开发者需要把demo中的assert目录文件中拷贝在自己的主module资产目录里,文件如下图箭头所指,开发者也可以使用自己的声频文件,只需要把名字改为一样的就可以。 

1.3.3 注册自定义通知的广播接收者

注意事项:
1、如果之前集成过容联云的其他插件,已经注册过自定义YuntxNotifyReceiver,那么可以使用已注册过的,也可以重新按照以下流程注册
2、本配置是属于application的属性,需要复制到AndroidManifest 清单文件的application节点内。
3、声明自定义通知的广播接收器,开发者需要把action 中的 com.yuntongxun.imdemo替换为自有项目APP的包名
  • // 声明自定义通知的广播接收器(需要替换包名,详见注意事项)
  • <receiver
  •     android:name="YuntxNotifyReceiver在开发者module中的位置"
  •     android:exported="false">
  •     <intent-filter>
  •         // 接收push消息
  •         // action匹配规则{packageName + ".action" + "功能"}
  •         // com.yuntongxun.imdemo 替换成自己的报名
  •         // 以下三条action 可以根据自己需求来进行增删
  •         // 用于电话会议
  •         <action android:name="com.yuntongxun.imdemo.action.VOIP_CALL" />
  •         // 用于IM消息
  •         <action android:name="com.yuntongxun.imdemo.action.MESSAGE" />
  •         // 用于通知点击
  •         <action android:name="com.yuntongxun.imdemo.action.NOTIFICATION_CLICK" />
  •     </intent-filter>

  • </receiver>
  • // 应用处理程序逻辑服务 name为YuntxNotifyReceiver的位置加 $NotifyService
  • <service android:name="YuntxNotifyReceiver的位置$NotifyService" />

二、初始化及登录

注意事项:
如果接入前已经使用容联云的其他插件,如plugin_voip等,已配置过登录,那么无需再次登录,请直接跳转到可接入界面
如果要使用私有云,那么服务器的地址书写格式请参考IMDemo的assets目录下的文件(位置如下图所示)

2.1 插件集成初始化

以下代码是Applicaiton onCreate中调用
  • @Override
  • public void onCreate() {
  •     super.onCreate();
  •     LogUtil.e(TAG, "App onCreate");
  •     // 云通讯SDK上下文对象,必选
  •     SDKCoreHelper.setContext(this);
  •     // 音视频通话插件初始化(可选)
  •     Voip.VoIPPluginParams.Builder builder = new Voip.VoIPPluginParams.Builder();
  •     // 设置VoIP回掉接口
  •     builder.setVoipCallback(VoipImpl.getInstance());
  •     Voip.initVoIPPlugin(builder.build());
  • }

2.2 登录

2.1.1 登录

登录分两种模式:
1)强制登入
2)自动登入
两个接口区别是强制登入需要传用户信息,自动登入的是使用上一次的用户信息登入
 
强制登入:一般用于App首次使用填写完用户账号密码之后使用 如下接口
 
  • SDKCoreHelper.login(builder.build());
 
自动登入:一般用于不需要进行用户账号密码填写应用主页地方使用 如下接口
 
  • if (AppMgr.getClientUser() != null) {
  •     LogUtil.d(TAG, "SDK auto connect...");
  •     SDKCoreHelper.init(getApplicationContext());
  • }
完整登入逻辑代码如下(强制登入):
  • ClientUser.UserBuilder builder = new ClientUser.UserBuilder(account, name);
  • SDKCoreHelper.login(builder.build());
 

2.1.2 获取登录状态

1) 注册获取登录状态的广播接收者
  • /IntentFilter intentFilter = new IntentFilter();
  • intentFilter.addAction(SDKCoreHelper.ACTION_SDK_CONNECT);
  • intentFilter.addAction(RongXInUtils.ACTION_KICK_OFF);
  • intentFilter.addAction(SDKCoreHelper.ACTION_LOGOUT);
  • registerReceiver(mSDKNotifyReceiver, intentFilter);
  •  
  • private BroadcastReceiver mSDKNotifyReceiver = new BroadcastReceiver() {
  •     @Override
  •     public void onReceive(Context context, Intent intent) {
  •         if (SDKCoreHelper.isLoginSuccess(intent)) {
  •             Intent action = new Intent(LoginActivity.this, MainActivity.class);
  •             action.putExtra("userid", et_account.getText().toString());
  •             startActivity(action);
  •             finish();
  •         } else {
  •             int error = intent.getIntExtra("error", 0);
  •             if (error == SdkErrorCode.CONNECTING) return;
  •             LogUtil.e(TAG, "登入失败[" + error + "]");
  •             ToastUtil.showMessage("登入失败 == " + error);
  •             proBar.setVisibility(View.GONE);
  •         }
  •     }
  • };
 
2) 注销获取登录状态的广播接收者
  • unregisterReceiver(mSDKNotifyReceiver);

2.3 登出

  • /**
  •  * 此方法为退出当前登录账户
  •  */
  • SDKCoreHelper.logout();
 

三、Voip通话

效果图如下:

3.1 音视频插件初始化(Application onCreate方法中)

  • @Override
  • public void onCreate() {
  •     super.onCreate();
  •     LogUtil.e(TAG, "App onCreate");
  •     // 云通讯SDK上下文对象,必选
  •     SDKCoreHelper.setContext(this);
  •     // 音视频通话插件初始化(可选)
  •     Voip.VoIPPluginParams.Builder builder = new Voip.VoIPPluginParams.Builder();
  •     // 设置VoIP回掉接口
  •     builder.setVoipCallback(VoipImpl.getInstance());
  •     Voip.initVoIPPlugin(builder.build());
  • }  

3.2 语音通话( ECVoIPCallManager.CallType.VOICE )

  • /**
  •   * 发起语音通话
  •  * @param Context
  •  * @param callType    呼叫类型 ECVoIPCallManager.CallType.VOICE or ECVoIPCallManager.CallType.VIDEO
  •  * @param nickname    被叫者昵称 也可以通过IVoipCallBack接口 设置
  •  * @param contactId   被叫者userID
  •  * @param phoneNumber 对方手机号 如果 isCallBack设置为ture,那么该参数必须要传
  •  * @param isCallBack  true表示回拨 false表示不回拨
  •  */
  • Voip.startCallAction(
  •         MainActivity.this,
  •         ECVoIPCallManager.CallType.VOICE,
  •         "姓名-"+toAccountVoice,
  •         toAccountVoice,
  •         "手机号",
  •         false);

3.3 视频通话( ECVoIPCallManager.CallType.VIDEO )

  • /**
  •   * 发起语音通话
  •  * @param Context
  •  * @param callType    呼叫类型 ECVoIPCallManager.CallType.VOICE or ECVoIPCallManager.CallType.VIDEO
  •  * @param nickname    被叫者昵称 也可以通过IVoipCallBack接口 设置
  •  * @param contactId   被叫者userID
  •  * @param phoneNumber 对方手机号 如果 isCallBack设置为ture,那么该参数必须要传
  •  * @param isCallBack  true表示回拨 false表示不回拨
  •  */
  • Voip.startCallAction(
  •         MainActivity.this,
  •         ECVoIPCallManager.CallType.VOICE,
  •         "姓名-"+toAccountVoice,
  •         toAccountVoice,
  •         "手机号",
  •         false
  • );

3.4 IVoipCallBack接口

  • /**
  •  * 通话状态信息
  •  * @param voIPCall 通话状态信息
  •  */
  • @Override
  • public void onCallEvents(ECVoIPCallManager.VoIPCall voIPCall) {
  •     LogUtil.d(TAG, "[onCallEvents] call:" + voIPCall);
  • }

  • /**
  •  * 通话页面信息绑定接口
  •  *
  •  * @param userId 传出的id 开发者可根据此id来从自己数据库等中查询对应的名字和头像
  •  * @param avater 头像的imageview控件
  •  */
  • @Override
  • public void onVoipBindView(Context context, String userId, ImageView avater) {
  •     //代码示例
  •     LogUtil.e(TAG, "onVoipBindView userId=" + userId + " avater=" + avater);
  •     avater.setImageResource(R.mipmap.ic_launcher);
  • }