Android接入说明文档

接入临境直播观看 SDK 首先遵循以下步骤:

  • 配置 SDK 集成环境
  • 按照以下接入文档集成代码

SDK 集成环境配置

开发与运行环境

  • Android Studio
  • 支持 Android 5.0 及以上系统版本; 支持 armeabi/armeabi-v7a/arm64-v8a 运行。

配置工程

  • 配置maven仓库

    1. //在项目主工程的 build.gradle 引入融云maven仓库
    2. maven { url "https://maven.rongcloud.cn/repository/maven-releases/" }
  • 引入直播SDK版本:

    1. //版本见上面
    2. implementation 'com.yxt.opensdk.library_live:live_pull:x.x.x'
    3. implementation 'com.yxt.opensdk.library:library_baidu_player:x.x.x'
    4. implementation 'com.yxt.opensdk.library:library_rongyun_chat:x.x.x'

声明SDK需要的权限

  • 在AndroidManifest.xml中设置权限和适配参数:
  1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  3. <uses-permission android:name="android.permission.INTERNET" />
  4. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  7. <meta-data
  8. android:name="design_width"
  9. android:value="1080" />
  10. <meta-data
  11. android:name="design_height"
  12. android:value="1920" />

SDK集成步骤

1、Application中配置代码

  • 初始化临境直播
  1. /**
  2. * 初始化临境直播SDK
  3. * @param context
  4. * @param isTestEnvironment 是否为测试环境;true:测试环境;false:正式环境
  5. */
  6. public static void initPull(Context context, boolean isTestEnvironment) {
  7. LivePullOptions options = new LivePullOptions();//设置初始化参数
  8. options.setTestEnvironment(false);//**重要**: 是否为测试环境;true:测试环境;false:正式环境
  9. options.setThirdParty(true);
  10. options.setSDK(false);
  11. options.setShowDisconnectedAlert(true);//是否提示断网提示,true:提示;false:不提示
  12. options.setShowMobileAlert(true);//是否提示正在使用4G网络提示,true:提示;false:不提示
  13. options.setShowBindTip(false);//是否显示绑定微信或手机号码view,true:显示;false:不提示 默认不显示, 当设置为显示时,需要参考 第三项 "绑定微信功能接入"
  14. /**
  15. *视频裁剪模式(可选)
  16. *DEFAULT
  17. * 默认方式,此模式会按照直播自身需求设置VideoType
  18. * 1) 竖屏推流时,按照CENTER_CROP模式
  19. * 2) 横屏推流时,按照CENTER_INSIDE模式
  20. *
  21. *CENTER_CROP
  22. *裁剪,保持视频内容的宽高比。视频与屏幕宽高不一致时,会裁剪部分视频内容
  23. *
  24. *CENTER_INSIDE
  25. *填充,保持视频内容的宽高比。视频与屏幕宽高不一致时,会留有黑边
  26. *
  27. */
  28. options.setVideoScaleType(VideoScaleType.DEFAULT);
  29. //可选,设置Toolbar颜色,高度,背景,字体大小
  30. LiveUiConfig liveUiConfig = new LiveUiConfig();
  31. liveUiConfig.setStatusBarColor(R.color.appStatusBarColor);
  32. liveUiConfig.setToolbarHeight(R.dimen.appToolbarHeight);
  33. liveUiConfig.setToolbarColor(R.color.appToolbarColor);
  34. liveUiConfig.setToolbarBackIcon(R.mipmap.ic_launcher_live_pull);
  35. liveUiConfig.setToolbarTitleSize(R.dimen.appToolbarTitleSize);
  36. liveUiConfig.setToolbarTitleColor(R.color.appToolbarTitleColor);
  37. options.setLiveUiConfig(liveUiConfig);
  38. LivePullManager.init(context, options);
  39. //可选: 直播互踢时,回调
  40. LivePullManager.registerOtherClientEnterLiveListener(new OtherClientEnterLiveListener() {
  41. @Override
  42. public void onOtherClientEnter(Activity activity) {
  43. if (activity != null) {
  44. activity.finish();
  45. }
  46. }
  47. });
  48. }

2、跳转直播播放页面

  1. //设置跳转到临境直播时对应的参数
  2. LivePullIntentDataOptions options = new LivePullIntentDataOptions();
  3. options.setLiveLjCode("");//可选: 设置ljCode
  4. options.setLiveRoomCode("");//设置直播室roomCode
  5. options.setLivePlayPwd("");//设置直播观看密码
  6. options.setUserId("");//设置用户userId
  7. options.setUserName("");//设置用户名
  8. options.setUserAvatar("");//设置用户头像url
  9. options.setUserLoginName("");//可选: 设置用户登录名
  10. options.setUserPoint(0);//设置用户积分
  11. //跳转到相应临境直播播放页面,context为Activity的实例
  12. LivePullManager.intentToLjLive(context, options);

3、绑定微信功能接入

设置微信绑定功能需要添加以下操作:

注:若不需要微信绑定功能,不需要接入改板块内容。

1. 在微信开放平台申请相应appId;
2. 在Application中初始化微信

  1. public static void initWXLogin(Context context) {
  2. WXLoginManager.initWXAppId(context, AppConfig.WX_APP_ID);
  3. }

3. 在项目包名的根目录下添加包名wxapi,并在包名下添加 WXEntryActivity.java;如图:

4. WXEntryActivity.java代码如下:

  1. package com.yxt.live.pull.wxapi;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import com.tencent.mm.opensdk.constants.ConstantsAPI;
  7. import com.tencent.mm.opensdk.modelbase.BaseReq;
  8. import com.tencent.mm.opensdk.modelbase.BaseResp;
  9. import com.tencent.mm.opensdk.modelmsg.SendAuth;
  10. import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
  11. import com.yxt.sdk.live.pull.manager.WXLoginManager;
  12. public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
  13. private static final int RETURN_MSG_TYPE_LOGIN = 1;
  14. @Override
  15. public void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. WXLoginManager.getWXApi().handleIntent(getIntent(), this);
  18. }
  19. @Override
  20. protected void onNewIntent(Intent intent) {
  21. super.onNewIntent(intent);
  22. setIntent(intent);
  23. WXLoginManager.getWXApi().handleIntent(intent, this);
  24. }
  25. @Override
  26. public void onReq(BaseReq req) {
  27. switch (req.getType()) {
  28. case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
  29. break;
  30. case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
  31. break;
  32. default:
  33. break;
  34. }
  35. }
  36. @Override
  37. public void onResp(BaseResp resp) {
  38. switch (resp.errCode) {
  39. case BaseResp.ErrCode.ERR_OK:
  40. processCode(resp.getType(), resp);
  41. break;
  42. case BaseResp.ErrCode.ERR_USER_CANCEL:
  43. case BaseResp.ErrCode.ERR_AUTH_DENIED:
  44. case BaseResp.ErrCode.ERR_UNSUPPORT:
  45. afterLoginFailed();
  46. break;
  47. default:
  48. afterLoginFailed();
  49. break;
  50. }
  51. }
  52. private void afterLoginFailed() {
  53. WXLoginManager.afterWXLoginFailed();
  54. WXEntryActivity.this.finish();
  55. }
  56. private void processCode(int type, BaseResp resp) {
  57. switch (type) {
  58. case RETURN_MSG_TYPE_LOGIN:
  59. String code = ((SendAuth.Resp) resp).code;
  60. WXLoginManager.getWXLoginInfo(code);
  61. WXEntryActivity.this.finish();
  62. break;
  63. }
  64. }
  65. }

5. 主项目的 AndroidManifest.xml 中添加以下代码:

  1. <!--注册微信回调 WXEntryActivity -->
  2. <activity
  3. android:name=".wxapi.WXEntryActivity"
  4. android:exported="true"
  5. android:label="@string/app_name"
  6. android:launchMode="singleTop"
  7. android:theme="@android:style/Theme.Translucent" />

混淆配置

  1. -keep class com.yxt.**{ *; }
  2. -dontwarn com.yxt.**
  3. -dontwarn com.baidu.**
  4. -keep class com.baidu.** { *;}
  5. -dontwarn io.rong.**
  6. -keep class io.rong.** { *;}
  7. -keep class skin.support.**{ *; }
  8. -dontwarn skin.support.**

常见问题

1、直播SDK 可以按需初始化,不必要在Application里初始化, 可以在用时初始化,但是一定要确保在进入直播观看页面时初始化过

  • 建议方案:
    添加一个flag: isLiveInitted = false
    然后 进入直播页面前,都调用一次initLive()

    1. private static boolean isLiveInitted = false;
    2. public static void initLive() {
    3. if (!isLiveInitted) {
    4. isLiveInitted = true
    5. }
    6. //按照上面文档初始化
    7. // xxx
    8. }

关于作者

江苏云学堂网络科技有限公司开发人员,如有问题请发送邮件至
cuiqq@yxt.com
lingy@yxt.com