Android
主要介绍如何在 Android 系统上集成芒果TV播放器SDK,按照步骤即可完成芒果TV播放器SDK的集成,以实现基本播放功能、高级播放功能等业务
集成环境¶
- 环境要求:java JDK(推荐使用11版本及以上)、Android sdk (最高下载到app端编译版本,建议下载Android14-33 sdk版本)
- 开发工具:Android Studio
集成步骤¶
步骤1:与开发人员沟通,建立芒果自研播放器接入记录¶
- 关键功能对齐
如:长视频、短视频、直播流、支持的媒资范围等基础信息,或者p2p、drm等功能需求,或者大屏、小屏、phone/pad端等运行设备信息,或者其他类似包体精简等特殊需求。
- 独立app还是SDK
如:业务方是需要开发一个独立app,或者是要开发一个播放芒果媒资的sdk集成到其他第三方软件中
- 包名授权
SDK开发场景的demo包名可命名 com.hunantv.playertest.xx
直接通过授权;独立app的开发场景请提供应用市场上架的正式包名
- 播放器功能控制远程开关接口
config/play
SDK开发场景为默认开关数据;独立app开发场景可根据需求定义相关开关字段参数
步骤2:集成指引¶
本步骤可指导您如何集成播放器,您可选择使用 Gradle 自动加载的方式,手动下载 aar 再将其导入到您当前的工程或导入 jar 和 so 库的方式集成项目。
第一种:maven仓库 + 远程aar (推荐)¶
- 在工程目录的build.gradle 配置芒果maven 库
repositories {
//内部库
maven {
url "http://host/nexus/content/groups/public/"
}
}
- 在
app/build.gradle defaultConfig
中,指定 App 使用的 CPU 架构(目前支持armeabi
、armeabi-v7a
和arm64-v8a
,可根据项目需求配置,有其他架构需求如x86等请反馈给播放器开发人员)
ndk {
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
}
- 在
app/build.gradle
中,引用播放器sdk、及其他相关组件sdk
//需引用支持广播
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
//p2p模块
implementation 'com.hunantv.imgo:p2p-sdk:{$开发人员提供的版本号}'
//流量上报
implementation 'com.hunantv.imgo:flowreporter:{$开发人员提供的版本号}'
//自研播放器
implementation 'com.hunantv.imgo:playercore:{$开发人员提供的版本号}'
第二种:本地aar¶
- 下载aar
可在 maven仓库浏览播放器版本,建议和播放器开发人员沟通需求后下载指定版本。
- 导入aar
导入 aar 到 app 下面的 libs
文件夹中并配置 app/build.gradle
api fileTree(include: ['*.aar'], dir: 'libs')
-
在 app/build.gradle defaultConfig 中,指定 App 使用的 CPU 架构(目前支持 armeabi 、 armeabi-v7a 和 arm64-v8a,可根据项目需求配置,有其他架构需求如x86等请反馈给播放器开发人员)
ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8a" }
-
在app/build.gradle 中,引用其他相关组件sdk
//需引用支持广播
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
//p2p模块
implementation 'com.hunantv.imgo:p2p-sdk:{$开发人员提供的版本号}'
//流量上报
implementation 'com.hunantv.imgo:flowreporter:{$开发人员提供的版本号}'
第三种:jar+so¶
- 获取jar+so文件
和播放器开发人员沟通。
- 导入jar+so文件
导入 文件到 app 下面的 libs 文件夹中,并配置 app/build.gradle
sourceSets{
main{jniLibs.srcDirs = ['libs']}
}
api fileTree(include: ['*.jar'], dir: 'libs')
- 在 app/build.gradle defaultConfig 中,指定 App 使用的 CPU 架构(目前支持 armeabi 、 armeabi-v7a 和 arm64-v8a,可根据项目需求配置,有其他架构需求如x86等请反馈给播放器开发人员)
ndk {
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
}
- 在app/build.gradle 中,引用其他相关组件sdk
//需引用支持广播
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
//p2p模块
implementation 'com.hunantv.imgo:p2p-sdk:{$开发人员提供的版本号}'
//流量上报
implementation 'com.hunantv.imgo:flowreporter:{$开发人员提供的版本号}'
步骤3:配置播放需要的相关权限¶
播放器sdk需要的权限,可根据功能需求裁剪,比如播放不涉及网络播放只有本地播放则不需要申请网络权限、不涉及录屏则不需要申请Manifest.permission.RECORD_AUDIO。以下权限列表按功能划分:
- 读取手机状态信息(基本必须)
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
- 网络请求、非本地资源播放(基本必须)
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
-
本地文件播放、录制gif功能
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-
录屏
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
- 蓝牙耳机监听,用于音效切换
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH" />
步骤4:设置混淆规则¶
-keep class com.hunantv.media.player.libnative.** {*;}
-keep class com.hunantv.media.drm.protoc.** { *;}
-keep class com.hunantv.media.**.entity.**{*;}
-keepclassmembers class com.hunantv.media.config.NetPlayConfigV3 {
!static !transient <fields>;
}
-keepclassmembers class com.hunantv.media.config.NetPlayConfigWrapperV3 {
!static !transient <fields>;
}
-keepclassmembers class com.hunantv.media.drm.utils.MgtvDrmUtils$WisePlayPsshJson {
!static !transient <fields>;
}
步骤5:开始编码¶
初始化播放器本地log模块(必须!),在app/Application.java 中实现以下initLog()并在oncreate()中调用
private void initLog() {
MgtvPlayerLogger.openDebugMode(true);
MgtvPlayerLogger.setLogCallback(new MgtvPlayerLogger.OnLogCallback() {
@Override
public void onLogCb(int level, String modelId, String tag, String msg) {
switch (level) {
case MgtvPlayerLogger.REPORT_LOG_LEVEL_DEBUG:
if (true) {
Log.d(tag, msg);
}
break;
case MgtvPlayerLogger.REPORT_LOG_LEVEL_INFO:
Log.i(tag, msg);
break;
case MgtvPlayerLogger.REPORT_LOG_LEVEL_WARN:
Log.w(tag, msg);
break;
case MgtvPlayerLogger.REPORT_LOG_LEVEL_ERROR:
Log.e(tag, msg);
break;
}
}
});
}
动态获取部分权限,参考权限说明部分,可按功能需求申请需要的权限
ActivityCompat.requestPermissions(
this,
new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
Manifest.permission.BLUETOOTH_CONNECT
},
REQUEST_NEEDED_PERMISSION
);
demo参考¶
- 与播放器团队负责人沟通,申请demo工程权限
- 本工程主要实现的业务场景及对应代码模块: 1、feed流极速起播 ../feed/FeedActivity -- 仿抖音极速起播主页面 ../feed/FeedSettingActivity -- 芒果自研极速起播播放器 MgtvSuperVideoView配置页面
2、多窗口直播 ../multi/MultiVodActivity -- 多播放窗口页面 ../multi/MultiSettingActivity -- 多播放窗口起播流配置页面
3、常规点播 ../vod/VodActivity -- MgtvVideoView基础点播实现页面 ../vod/VodConfigActivity -- 点播配置页面
4、透明通道播放 ../alpha/TransparentActivity.java -- 透明通道广告、透明通道开屏动画等
5、vr播放器 ../vr/VrActivity.java
6、音效播放 ../vividaudio/AudioEfectConfigActivity.java -- 音效播放页面 ../vividaudio/AudioEfectPlayActivity.java -- 音效流媒资设置页面