You need to enable JavaScript to run this app.
导航

Android 接入

最近更新时间2023.07.11 11:03:48

首次发布时间2023.02.13 20:44:30

本文介绍集成 veVOS 解决方案相关 SDK 的方法,根据文档提供的操作步骤进行配置,您可以将 veVOS 解决方案下的 SDK 集成到 Android App 工程中。

开发环境要求

  • Android 5.0 及以上系统。
  • armv7a、arm64 架构。

前提条件

  • 请获取 AppLog 的在线集成地址
  • 获取 ttsdk-ttlivepush_rtcttsdk-ttlivepull_rtceffectsdkRangersAppLog-Lite-cn版本号

操作步骤

Step 1:获取 License

veVOS 互动直播场景下,您需要获取视频直播 License、实时音视频(RTC)Licnese 和智能美化特效(CV)License。

产品对应功能模块获取方式
视频直播直播推流、直播拉流获取视频直播 License
实时音视频连麦请联系您的商务经理
智能美化特效贴纸特效、美化滤镜、人像智能、手势与人体检测等请联系您的商务经理

Step 2:配置 Maven 仓库

  1. 打开根目录下的 build.gradle。
  2. 定义 Maven 仓库。并配置仓库服务器的 URL。URL 为 https://artifact.bytedance.com/repository/Volcengine/。集成代码示例如下所示。
allprojects {
    repositories {
        google()
        mavenCentral()
        maven {
            url "https://artifact.bytedance.com/repository/Volcengine/" // volc public maven repo
        }
    }
}

apply from: 'https://ve-vos.volccdn.com/script/vevos-repo-rtc.gradle'
apply from: 'https://ve-vos.volccdn.com/script/vevos-repo-cv-ck.gradle'

Step 3:配置环境和依赖

  1. 打开主工程下的 build.gradle。
  2. 在 defaultConfig 中配置 App 使用的 CPU 架构。支持 armv7a 和 arm64 架构。
  3. 在依赖 dependencies 中添加 TTSDK 和 AppLog 的在线集成地址。
android {
   defaultConfig {
       ndk {
           //设置 SO 库架构,支持 armv7a 和 arm64 架构。
           abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
   }
}

dependencies {
    ......
    //最新版本号获取方式请参考[前提条件]章节
    
    //直播推流互动版本,例如,1.33.2.102.onekit
   implementation 'com.bytedanceapi:ttsdk-ttlivepush_rtc:x.x.x.x'
   
    //直播拉流互动版本,例如,1.33.2.102.onekit
   implementation 'com.bytedanceapi:ttsdk-ttlivepull_rtc:x.x.x.x'
   
    //智能美化特效
    implementation 'com.bytedance:effectsdk:xxxx'
    
    //日志上报 SDK,用于直播日志上传
    implementation 'com.bytedance.applog:RangersAppLog-Lite-global:xxxx'
   
    //添加第三方依赖。
   implementation 'commons-net:commons-net:3.6'
   
   // 开启 HTTPDNS 解析
    implementation 'com.squareup.okhttp3:okhttp:4.2.1'
}
  1. 单击 Sync Now 按钮同步 SDK,SDK 将自动下载集成到工程。如果出现集成失败,请检查您与 jcenter 仓库的网络连接。

Step 4:配置权限

在 AndroidManifest.xml 文件中声明应用间交互的权限。

<!-- 使用权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />

添加动态申请权限代码。

private boolean checkPermission(int request) {
        String permissions[] = new String[]{
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.CAMERA,
                Manifest.permission.RECORD_AUDIO,
                Manifest.permission.MODIFY_AUDIO_SETTINGS,
                Manifest.permission.INTERNET
        };
        List<String> permissionList = new ArrayList<>();
        for (String permission : permissions) {
            boolean granted = ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED;
            if (granted) continue;
            permissionList.add(permission);
        }
        if (permissionList.isEmpty()) return true;

        String permissionsToGrant[] = new String[permissionList.size()];
        permissionList.toArray(permissionsToGrant);
        ActivityCompat.requestPermissions(this, permissionsToGrant, request);
        return false;
}

Step 5:添加 License

拷贝 License 文件到工程目录下。例如下图所示,将 License2_test.lic 文件拷贝到 assets 目录下。

alt

Step 6:配置混淆规则

在 proguard-rules.pro 文件中,将 SDK 相关类加入不混淆名单。

//直播混淆规则
-keep class com.pandora.**{*;}
-keep class com.ss.**{*;} 
-keep class com.bytedance.**{*;}
-keep class com.pandora.ttlicense2.**{*;}

//CV 混淆规则
-keep class com.bytedance.labcv.effectsdk.** {;}
-keep class com.bef.effectsdk.* {*;} 
-keep class com.bytedance.labcv.licenselibrary.** {*;}


Step 7:初始化 SDK

调用ENV.init初始化 TTSDK。

//TTSDK 环境初始化。
   Env.init(new Config.Builder()
   .setApplicationContext(sApplicationContext)
   .setAppID(填写申请的AppID);
   .setAppName(填写申请的应用名称)
   .setAppVersion(BuildConfig.VERSION_NAME) // 合法版本号应大于、等于 2 个分隔符,如:"1.3.2"
   .setAppChannel("veVOSLiveDemo")
   .setLicenseUri("assets:///license/live.lic")
   .setLicenseCallback(mLicenseCallback)//License 加载的状态回调
   .build());

//开启 License 模块 logcat 输出。建议排查问题时开启,发包时关闭。
//LicenseManager.turnOnLogcat(true);

//License 回调对象
LicenseManager.Callback mLicenseCallback =new LicenseManager.Callback() {
        @Override
        public void onLicenseLoadSuccess(@NonNull String licenseUri, @NonNull String licenseId) {
            licenseID = licenseId;//License ID,用于获取License的信息
        }

        @Override
        public void onLicenseLoadError(@NonNull String licenseUri, @NonNull Exception e, boolean retryAble) {
           
        }

        @Override
        public void onLicenseLoadRetry(@NonNull String licenseUri) {
           
        }

        @Override
        public void onLicenseUpdateSuccess(@NonNull String licenseUri, @NonNull String licenseId) {
          licenseID = licenseId;
        }

        @Override
        public void onLicenseUpdateError(@NonNull String licenseUri, @NonNull Exception e, boolean retryAble) {
           
        }

        @Override
        public void onLicenseUpdateRetry(@NonNull String licenseUri) {
          
        }
    };
    
//License 信息获取。
License license = LicenseManager.getInstance().getLicense(licenseID);//licenseID 从mLicenseCallback 回调函数中获取
if (license != null) {
    StringBuilder builder = new StringBuilder();
    builder.append("License id:" + license.getId()).append("\n")
           .append("License package:" + license.getPackageName()).append("\n")
           .append("License test:" + license.getType()).append("\n")
           .append("License version:" + license.getVersion()).append("\n");

    if (license.getModules() != null) {
        String names = "";
        for (License.Module module : license.getModules()) {
            names = "module name:" + module.getName() + ", start time:" +
            TimeUtil.format(module.getStartTime(), Times.YYYY_MM_DD_KK_MM_SS)
                    + ", expire time:" + TimeUtil.format(module.getExpireTime(), Times.YYYY_MM_DD_KK_MM_SS) + "\n";
            builder.append("License modules:" + names);
        }
    }
}

初始化详细的参数说明如下表所示。

参数类型说明
AppIdStringApp ID,必填,从控制台 SDK 管理获取。
AppNameString必填, App 英文名,从控制台 SDK 管理获取。
AppVersionString必填,App 版本号,使用 BuildConfig.VERSION_NAME,合法版本号应包含大于、等于 2 个分隔符,如:"1.3.2"
AppChannelString必填,渠道号;业务自定义,如:小应用商店 (xiaomi)、华为应用市场 (huawei) 等。
LicenseUriString必填,License 路径。

Step 8:日志上报

线上问题的排查和质量平台的数据展示都依赖 SDK 上报的日志,因此,日志上报功能默认开启。如有特殊的数据保密要求,您可以在初始化环境前,设置 Env.openAppLog(false),关闭日志上报。

Step 9:功能接入

实现连麦功能