短视频 Video Android SDK 接入文档

概述

本文档描述了 Android 开发者如何集成 Video SDK(后面简称为 VideoSdk),通过集成 VideoSdk 为 App 引入类似抖音的短视频服务。

如果需要在视频流中展示广告,则需集成 AdSdk。本文档默认需要展示广告,展示广告可以创造收益。

CDN 加速域名配置请参考 CDN 加速域名配置文档

术语介绍

AppId:应用 id,18位 hex 字符串。【注意】调试时请使用测试 appId:ba0063bfbc1a5ad878;外发版本请替换成正式 appId,否则不会产生收益。

UserId:用户 id,接入方定义的用户唯一标识,传入时可以哈希脱敏,主要用于排查问题。

SDK 集成

方法一:自动集成 (推荐)

通过在 Android Studio 工程的 build.gradle 配置脚本中添加 maven 依赖,导入最新版本 VideoSdk。

步骤一:添加 Maven 仓库地址

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.25' // 依赖 oaid
    implementation 'com.mob.sdk:adsdk:2.7.19'
    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.19', ext: 'aar')
    implementation(name: 'videosdk-2.1.4', ext: 'aar')
}

SDK 初始化

开发者需要在 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);