本文档描述了 Android 开发者如何集成 Video SDK(后面简称为 VideoSdk),通过集成 VideoSdk 为 App 引入类似抖音的短视频服务。
如果需要在视频流中展示广告,则需集成 AdSdk。本文档默认需要展示广告,展示广告可以创造收益。
CDN 加速域名配置请参考 CDN 加速域名配置文档。
AppId:应用 id,18位 hex 字符串。【注意】调试时请使用测试 appId:ba0063bfbc1a5ad878;外发版本请替换成正式 appId,否则不会产生收益。
UserId:用户 id,接入方定义的用户唯一标识,传入时可以哈希脱敏,主要用于排查问题。
通过在 Android Studio 工程的 build.gradle 配置脚本中添加 maven 依赖,导入最新版本 VideoSdk。
allprojects {
repositories {
maven {
credentials {
username 'iqLuKm'
password 'pomH01oYcR'
}
url 'https://repo.rdc.aliyun.com/repository/117933-release-sPkE7F/'
}
}
}
【注意】加在 allprojects 中,不要加在 buildscript 中哦。
dependencies {
implementation 'com.mob.sdk:oaid-sdk:1.0.27' // 依赖 oaid
implementation 'com.mob.sdk:adsdk:2.7.24'
implementation 'com.mob.sdk:videosdk:2.1.4'
}
将 VideoSdk 的 aar 包复制到 Application Module 的 libs 目录下(无此目录需手动创建), 并在工程的 build.gradle 中添加如下配置:
repositories {
flatDir {
dirs 'libs'
}
}
depedencies {
implementation(name: 'oaid-sdk', ext: 'aar') // 依赖 oaid
implementation(name: 'adsdk-2.7.24', ext: 'aar')
implementation(name: 'videosdk-2.1.4', ext: 'aar')
}
开发者需要在 Application 实例的 onCreate() 方法中调用以下代码来初始化 VideoSdk。
public class DemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 初始化 AdSdk,视频流中可以展现广告
AdSdk.getInstance().init(getApplicationContext(),
new AdConfig.Builder()
.appId(APP_ID)
.userId(userId) // 未登录可不设置 userId,登录时再设置
.debug(BuildConfig.DEBUG)
.build(),
null);
VideoSdk.getInstance().init(getApplicationContext(),
new VideoConfig.Builder()
.appId(APP_ID)
.userId(userId) // 未登录可不设置 userId,登录时再设置
.debug(BuildConfig.DEBUG)
.build(),
null);
}
}
初始化配置参数说明:
private String appId; // 应用程序 id
private String userId; // 用户 id
private boolean debug; // 是否 debug 模式,是则输出日志
登录时请设置 userId:
AdSdk.getInstance().setUserId(userId);
VideoSdk.getInstance().setUserId(userId);
退出登录请重置 userId:
AdSdk.getInstance().setUserId(null);
VideoSdk.getInstance().setUserId(null);
VideoSdk 将视频流封装成了 DrawVideoFragment,接入方只需将 DrawVideoFragment 放置在对应的 container 容器中即可,具体调用方式可以参考 Demo 中的 MainActivity。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawVideoFragment = DrawVideoFragment.newInstance();
getSupportFragmentManager() // fragment 嵌套替换成 getChildFragmentManager()
.beginTransaction()
.replace(R.id.container, mDrawVideoFragment)
.commitNowAllowingStateLoss();
}
}
视频播放事件监听:
mDrawVideoFragment.setVideoListener(new VideoSdk.VideoListener() {
@Override
public void onVideoShow(String id, int videoType) { // 视频切换展示
}
@Override
public void onVideoStart(String id, int videoType) { // 视频播放开始
}
@Override
public void onVideoPause(String id, int videoType) { // 视频播放暂停
}
@Override
public void onVideoResume(String id, int videoType) { // 视频播放恢复
}
@Override
public void onVideoComplete(String id, int videoType) { // 视频播放完成
}
@Override
public void onVideoError(String id, int videoType) { // 视频播放出错
}
});
视频类型包括:VideoType.VIDEO,VideoType.AD。
视频点赞监听,返回是否阻止事件继续传播:
mDrawVideoFragment.setOnLikeClickListener(new VideoSdk.OnLikeClickListener() {
@Override
public boolean onLikeClick(String id, int videoType, boolean like) { // 点赞或取消点赞
return false;
}
});
视频分享监听,返回是否阻止事件继续传播:
mDrawVideoFragment.setOnShareClickListener(new VideoSdk.OnShareClickListener() {
@Override
public boolean onShareClick(String id, int videoType, String videoUrl, String author, String title) {
return false;
}
});
视频播放进度监听:
mDrawVideoFragment.setProgressListener(new VideoSdk.ProgressListener() {
@Override
public void onProgressUpdate(String id, int videoType, int position, int duration) {
}
});
【注意】Fragment 嵌套 DrawVideoFragment 的情况下,请在外层 Fragment 重写以下方法:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
mDrawVideoFragment.setUserVisibleHint(isVisibleToUser);
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
mDrawVideoFragment.onHiddenChanged(hidden);
}
开发者可调用 DrawVideoFragment 实例的方法自定义视频控件:
public void setControllerViewClass(
Class<? extends AbstractVideoControllerView> controllerViewClass // 自定义视频控件 View 类
)
可以参考 Demo 中的 VideoControllerView 类,请根据需求修改此类。自定义的视图类必须继承 AbstractVideoControllerView,实现构造方法和以下抽象方法:
public void onBind(String id, int videoType);
public void onProgressUpdate(String id, int videoType, int position, int duration);
// 点赞、分享请勿监听点击事件,请使用下方回调;其他 UI 事件可以自行处理
public void onLikeClick(String id, int videoType, boolean like);
public void onShareClick(String id, int videoType, String videoUrl, String author, String title);