You need to enable JavaScript to run this app.
导航
快速开始
最近更新时间:2024.06.28 18:22:44首次发布时间:2022.05.13 17:10:55

本文介绍如何用点播 SDK 以最简单快捷的方式让视频播放起来。

适用版本

本文适用于点播 SDK 1.27.1.3 及之后的版本,旧版本文档请参考快速开始(旧版)

前提条件

您已完成点播 SDK 的集成准备

开源示例项目

Github 地址:Demo-Android

实现步骤

步骤 1:开启日志调试

初始化点播 SDK 之前,开启日志,便于调试和排查问题。

注意

Release 线上版本请务必关闭日志,减少性能开销。

示例代码如下:

// (1.41.2.10 及之后版本)开启 SDK 全部模块日志
VodSDK.openAllVodLog();

// (1.41.2.10 之前版本)开启 SDK 各个模块的日志
// 开启 ttsdk 模块日志
// TTVideoLog.turnOn(TTVideoLog.LOG_DEBUG, 1);
// 开启 CacheModule 模块日志
// CmLog.turnLogLevel(CmLog.LogLevel.D, true);
// 开启 Engine 模块日志
// TTVideoEngineLog.turnOn(TTVideoEngineLog.LOG_DEBUG, 1);
// 开启数据加载模块日志
// AVMDLLog.turnOn(AVMDLLog.LOG_DEBUG, 1);
// 开启 License 模块日志
// LicenseManager.turnOnLogcat(true);

步骤 2:初始化点播 SDK

初始化操作是轻量的,建议放到 Application#onCreate 中执行,保障初始化顺序。

File videoCacheDir = new File(context.getCacheDir(), "video_cache");
if (!videoCacheDir.exists()) videoCacheDir.mkdirs();
VodConfig.Builder vodBuilder = new VodConfig.Builder(context)
        .setCacheDirPath(videoCacheDir.getAbsolutePath())
        .setMaxCacheSize(300 * 1024 * 1024);
        
Env.init(new Config.Builder()
        .setApplicationContext(context)
        .setAppID("your app id")
        .setAppName("your app English name")
        // 合法版本号应大于、等于 2 个分隔符,如:"1.3.2"
        .setAppVersion(BuildConfig.VERSION_NAME)
        .setAppChannel("channel name")
        // 将 license 文件拷贝到 app 的 assets 文件夹中,并设置 LicenseUri  
        // 下面 LicenseUri 对应工程中 assets 路径为:assets/license/vod.lic
        .setLicenseUri("assets:///license/vod.lic")
        // 可不设置,默认值见下表
        .setVodConfig(vodBuilder.build())
        .build());

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

参数

类型

是否必填

说明

AppId

String

必填

应用 ID,可在视频点播控制台应用管理页面获取。详情请见创建应用

AppName

String

必填

应用英文名,可在视频点播控制台应用管理页面获取。详情请见创建应用

AppVersion

String

必填

App 版本号。可设为 BuildConfig.VERSION_NAME。合法版本号应包含大于或等于 2 个分隔符,如 "1.3.2"。

AppChannel

String

必填

渠道号。由您自定义,如小米应用商店 (xiaomi)、华为应用市场 (huawei) 等。

LicenseUri

String

必填

License 文件路径。详情请见 License 使用说明

CacheDirPath

String

选填

视频缓存路径,默认值为 /data/user/0/包名/cache/video_cache。

MaxCacheSize

Integer

选填

视频缓存文件夹大小,默认值为 300 * 1024 * 1024 (300MB)。

步骤 3:自定义设备 ID

初始化点播 SDK 后,您可以自定义设备 ID,用于实现单点追查功能。自定义设备 ID 后,您可在视频点播控制台质量平台的单点追查页面,查看单设备的播放数据。详细信息请见单点追查
示例代码如下:

// 初始化自定义 ID
private void initVodSDK(Context context, String userUniqueId) {
    // 1. 根据步骤二初始化点播 SDK
    Env.init(new Config.Builder()
        // ... 省略
        .build());
    // 2. 获取 AppLog 实例设置 userUniqueId
    IAppLogInstance applog = AppLogWrapper.getAppLogInstance();
    if (applog != null && !TextUtils.isEmpty(userUniqueId)) {
        applog.setUserUniqueID(userUniqueId); 
    }
}

// 您的用户注销登录时调用
private void onUserLogout() {
    IAppLogInstance applog = AppLogWrapper.getAppLogInstance();
    if (applog != null) {
        applog.setUserUniqueID(null);
    }
}

// 登录成功/切换后调用
private void onUserLogin(String userUniqueId) {
    IAppLogInstance applog = AppLogWrapper.getAppLogInstance();
    if (applog != null) {
        applog.setUserUniqueID(userUniqueId);
    }
}

步骤 4:创建播放器

参考以下示例代码创建 TTVideoEngine 播放器实例。

注意

为确保播放效果,建议每次播放时创建新的 Engine 实例,而非复用 Engine 实例。

// context 建议传入 application context
TTVideoEngine ttVideoEngine = new TTVideoEngine(context, TTVideoEngine.PLAYER_TYPE_OWN);

步骤 5:设置显示视图

播放器支持设置显示画面的视图。支持 2 种视图的关联:

在布局文件中声明 TextureView :
<TextureView
    android:id="@+id/textureView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@null" />
    

说明

如果 targetSDKVersion >= API 24,在 layout xml 中声明的 TextureView 必须将背景设置为 null 或不设置 background,否则会 crash。

代码示例如下所示。
TextureView textureView = findViewById(R.id.textureView);
// 设置 SurfaceTexture 监听
textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
        // TextureView 的 SurfaceTexture 创建完成回调
        ttVideoEngine.setSurface(new Surface(surfaceTexture));
    }
    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width, int height) { 
    }
    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
        return true;
    }
    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
    }
});
    
将 TextureView 中的 SurfaceTexture 对象,包装成 Surface 对象设置给 TTVideoEngine 即可完成关联。TTVideoEngine 播放的视频数据,就可以通过 TextureView 显示出来。

步骤 5:设置播放源

TTVideoEngine 支持播放本地视频,也支持网络流媒体视频。针对不同的使用场景,我们提供了相应的播放源设置接口。
基础版不支持 H.265 编码、DASH 视频格式等功能,详情请见点播 SDK 介绍中的功能列表。

如果您购买并接入了火山引擎点播服务,可使用 Vid 方式播放视频。您需要将播放器的 vid 属性设置为音视频 ID,将 playAuthToken 属性设置为音视频播放凭证,详情请见客户端播放。集成点播 SDK 的 App,VideoID 和 PlayAuthToken 是由 AppServer 下发的,App 无需关心,调用 AppServer 的接口获取即可。
// enable 缓存 video model
ttVideoEngine.setIntOption(PLAYER_OPTION_USE_VIDEOMODEL_CACHE, 1);

final String vid = "your video id"; // appServer 下发
final String playAuthToken = "your video id's play auth token"; // appServer 下发

final String encodeType = TTVideoEngine.CODEC_TYPE_H264;
// final String encodeType = TTVideoEngine.CODEC_TYPE_h265;
// final String encodeType = TTVideoEngine.CODEC_TYPE_h266;

// 1.组装 vid 播放源
StrategySource vidSource = new VidPlayAuthTokenSource.Builder()
        .setVid(vid)
        .setPlayAuthToken(playAuthToken)
        // 设置 Codec 类型(h264,h265、h266),不传则使用默认值 h264
        .setEncodeType(encodeType)
        // 启播清晰度设置,这里演示设置为 480P。不传使用默认值 360P
        .setResolution(Resolution.High)
        .build();
// 2.设置播放源
ttVideoEngine.setStrategySource(vidSource);
// 3.播放
ttVideoEngine.play()
    
通过 setEncodeType 来设置 Codec 类型:H.264、H.265、H.266;不传则使用默认值 H.264。

步骤 6:释放播放器

如果视频播放结束,或者用户离开了视频播放页面,就要及时停止播放,并释放 TTVideoEngine 实例。调用 releaseAsync 方法,可以释放 TTVideoEngine 的硬件解码器占用、内存占用、网络占用,能有效帮助用户节省电量。

ttVideoEngine.releaseAsync();

步骤 7:接入 Debug 工具

为了提升接入和调试效率,您可以根据需要进行接入可视化的 Debug 工具,直观方便地观察 SDK 相关信息。支持查看播放日志、视频信息和初始化信息,在接入过程中,展示当前播放视频的详细信息,以及在异常或错误状态下的相应提示。详细操作请参见 Debug 工具说明
图片

后续操作

至此,我们已经可以让视频播放起来了。虽然只有简单的开始播放与结束播放,还不能满足产品需求,但我们已经基本掌握了点播 SDK 的核心使用方式。下面我们演示如何实现更多的播放功能。详见基础功能

注意

我们强烈推荐您使用最佳策略,能够快速实现零首帧体验的短视频播放效果。详情请见Android 短视频场景