准备工作
帐号申请
点此注册一个账号,或者联系商务代为开通,或在网站咨询客服。
创建项目
可以在管理平台中创建新的项目(系统有一个默认项目,可以直接使用)。
项目信息页内可得到此项目的App ID及App Secret。如下图:
防火墙开通
在使用云屋SDK提供的相关服务之前,您需要打开下面这些特定的端口:
端口 | 功能说明 | Windows, Android, iOS,web插件版 SDK | H5 SDK | 小程序SDK | 直播观看SDK | 后台管理页面 |
---|---|---|---|---|---|---|
TCP 2725 | 后台管理服务端口 | √ | ||||
TCP 2726 | https服务端口 (SDK缺省使用https) | √ | √ | √ | √ | |
TCP 2728 | 信令服务端口 | √ | √ | √ | √ | |
TCP 1935 | 直播观看端口 | √ | √ | |||
UDP 2698 | 服务器音视频流端口 | √ | ||||
UDP 2699 | 服务器音视频流端口(H5) | √ |
SDK集成准备
内容简介
- 开发者使用SDK进行业务开发前,请先按照如下步骤配置开发环境。
- 此部分内容包括: 开发工具、SDK下载、SDK导入的支持说明等部分。
开发工具
推荐使用Android Studio或者Eclipse作为Android开发工具。
SDK下载
- 点此下载 Android SDK
SDK导入及集成注意事项
注意: 以Android Stuido作为集成SDK实例工具, 集成流程如下:
创建一个Android项目
找到解压后的SDK根目录中,找到libs文件夹,将其拷贝到工程项目的app/libs目录中 ,如图所示:
在app目录下的build.gradle文件中android块中配置相关的sourceSets标签,如果没有使用该标签则新增,代码如下
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
- 添加权限声明到AndroidManifest.xml文件
<!-- 为了能使用OpenGLES 2.0 API,你必须在你的manifest中添加以下声明: -->
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<!-- 如果你的应用要使用纹理压缩功能,你必须还要声明设备需要支持什么样的压缩格式 -->
<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
<supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
- 添加动态权限
开发环境中设置的compileSdkVersion高于23(Android6.0)时以上时,请注意添加相机,录音和内部存储空间的动态权限
Manifest.permission.CAMERA
Manifest.permission.RECORD_AUDIO
Manifest.permission.WRITE_EXTERNAL_STORAGE
Manifest.permission.READ_PHONE_STATE
- 检查是否开启动态权限
/**
* 查看是否权限 返回值为true代表权限已经全部开启
*/
public boolean checkPermission(String... permissions) {
//如果android版本低于Android6.0,默认为开启权限(无危险权限)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true;
PackageManager pm = contextWeakReference.get().getPackageManager();
for(String permission : permissions) {
if (PackageManager.PERMISSION_GRANTED !=
pm.checkPermission(permission, contextWeakReference.get().getPackageName())) {
return false;
}
}
return true;
}
- 添加缺省的动态权限
/**
* 获取需要申请权限的列表
*/
private List<String> findDeniedPermissions(String[] permissions) {
List<String> needRequestPermissionList = new ArrayList<>();
for (String perm : permissions) {
if (ContextCompat.checkSelfPermission(contextWeakReference.get(), perm) != PackageManager.PERMISSION_GRANTED) {
needRequestPermissionList.add(perm);
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(
activityWeakReference.get(), perm)) {
needRequestPermissionList.add(perm);
}
}
}
return needRequestPermissionList;
}
- 编写混淆文件,打开app目录下的proguard-rules.pro文件,添加如下代码。
-keep class * { native <methods>; }
-keep class com.cloudroom.cloudroomvideosdk.** { *; }
-keep class com.cloudroom.cloudroomvideosdk.model.** { *; }
-keep class com.cloudroom.tool.** { *; }
-keep class com.cloudroom.screencapture.** { *; }
-keep class org.crmedia.** { *; }
-keep class org.crmedia.clearvoice.** { *; }
-keep class org.crmedia.crvedemo.** { *; }
-keep class org.qtproject.qt5.android.** { *; }
-keep class org.qtproject.qt5.android.bearer.** { *; }
-keep class org.qtproject.qt5.android.accessibility.** { *; }