PlayerKit 是火山引擎推出的开源 Android 播放器 UI 组件,封装播放器 SDK 核心功能并内置标准化 UI 组件,集成播放控制、多清晰度切换、小窗播放、播放质量监控、视频加密及极速高清等能力。该组件提供高可扩展的播放器架构设计和抖音同款播放策略实现,支持通过标准化 API 快速构建符合主流视频应用体验的播放功能,适配短视频、中视频、长视频等多种业务场景。
视频点播通过 License 管理播放器 SDK 及其增值服务的使用权限和时间。在项目测试阶段,您可以在视频点播控制台申请免费的测试 License。您需完成以下操作:
注意
测试 License 仅限项目测试阶段使用,不可续期。测试 License 到期会导致鉴权失败,进而影响业务的正常使用。项目上线前,请升级至正式 License。
PlayerKit 的项目地址是 PlayerKit_Android。执行以下 Git 命令下载项目工程:
git clone https://github.com/volcengine/VEVodDemo-android cd VEVodDemo-android
将以下文件夹复制到您的项目根目录下,层级结构与 VEVodDemo-Android
中保持一致:
gradle-config vod-playerkit
说明
复制操作完成后,建议执行一次 git commit
命令,并在提交信息中记录 VEVodDemo-iOS
当前的最新提交 ID。源代码可能会发生变动,本次提交有助于您进行追溯。
检查项目根目录下 build.gradle
文件中的 repositories
部分配置 google、mavenCentral 和火山引擎 maven 服务。
allprojects { repositories { google() mavenCentral() maven { url "https://artifact.bytedance.com/repository/Volcengine/" // 火山引擎 maven 服务 } } }
在 AndroidManifest.xml
文件中声明以下播放器需要的权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
说明
WRITE_EXTERNAL_STORAGE
为非必需权限,可根据您的实际需求设置:
WRITE_EXTERNAL_STORAGE
权限,请参考 Android 存储用例和最佳做法。consumer-rules.pro
中配置,您无需额外操作。在 settings.gradle
中添加以下代码引入 PlayerKit
模块:
include ':app' apply from: file("gradle-config/vod_playerkit_library_settings.gradle")
在 App module 的 build.gradle
中添加以下代码引入 PlayerKit
依赖:
// 在 app 的 build.gradle 文件添加 Java 8 支持 android { // ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { api project(":vod-playerkit:vod-player") api project(":vod-playerkit:vod-player-utils") api project(":vod-playerkit:vod-player-volcengine") }
在 gradle-config/constants.gradle
中修改播放器 SDK 的版本号并配置增值服务。
project.ext { bytedance = [ ttsdkPlayerEdition : "premium", // 支持设为:"premium", "standard" ttsdkPlayerExtensions: "super_resolution,abr", // supported value "super_resolution,abr" ttsdkVersion : "1.45.2.7", ] }
ttsdkPlayerEdition
。支持设为 premium
高级版和 standard
基础版。ttsdkPlayerExtensions
添加增值服务,如 super_resolution
(超分)、abr
(ABR 起播选档)。多个增值服务用逗号隔开。ttsdkVersion
设置 SDK 版本号。可前往播放器 SDK 发布历史获取最新版本。同步 Gradle,确保在 Android Studio 中正确引入 vod-playerkit
模块。没有报错则表示集成完成。
将申请的 License 文件复制到 App 的 assets 文件夹下。
在 App.java
文件里参考以下示例代码初始化 PlayerKit:
public class App extends Application { @Override public void onCreate() { super.onCreate(); // 1. 设置 Logcat & Asserts 开关 // 开启日志方便排查问题,release 版本一定要关闭 L.ENABLE_LOG = BuildConfig.DEBUG; // 开启断言在内部状态出错时会抛 crash,便于及时发现问题。release 版本一定要关闭。 Asserts.DEBUG = BuildConfig.DEBUG; // 2. 初始化配置 VolcPlayerInit.config(new VolcPlayerInitConfig.Builder() .setContext(context) .setAppInfo(new AppInfo.Builder() .setAppId("your app id") // 应用 ID,可在视频点播控制台应用管理页面 .setAppName("your app English name") // 应用英文名,可在视频点播控制台应用管理页面获取 .setAppChannel("your app channel") // 渠道号。由您自定义,如小米应用商店 (xiaomi)、华为应用市场 (huawei) 等 .setAppVersion(BuildConfig.VERSION_NAME) // App 版本号。合法版本号应包含大于或等于 2 个 . 分隔符,如 "1.3.2" .setLicenseUri("assets:///vod.lic") // License 文件路径。假设您的 License 文件路径为 /VEVodDemo-android/app/src/main/assets/vod.lic,则 LICENSE_URI 应为 assets:///vod.lic .build()) .build() ); // 3. 调用初始化方法 VolcPlayerInit.initSync(); } }
VideoView
为播放控件核心类,创建后即可播放视频。参考以下示例代码在布局文件创建 VideoView
:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000"> <com.bytedance.playerkit.player.playback.VideoView android:id="@+id/videoView" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
参考以下示例代码使用 DirectUrl 播放源进行播放。您仅需将示例代码中的 URL 替换成真实的视频播放地址,即可实现视频播放。
public class SampleVideoActivity extends AppCompatActivity { private VideoView videoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sample_video_activity); // 1. 创建 VideoView 实例 videoView = findViewById(R.id.videoView); // 2. 配置 VideoView videoView.selectDisplayView(DisplayView.DISPLAY_VIEW_TYPE_TEXTURE_VIEW); videoView.setDisplayMode(DisplayModeHelper.DISPLAY_MODE_ASPECT_FIT); // 3. 创建 PlaybackController 实例并绑定 VideoView PlaybackController controller = new PlaybackController(); controller.bind(videoView); // 4. 创建 MediaSource 实例并绑定 VideoView MediaSource mediaSource = createDirectUrlSimpleMediaSource(); // MediaSource mediaSource = createVidMediaSource(); videoView.bindDataSource(mediaSource); } /** * 创建单清晰度播放源 */ private MediaSource createDirectUrlSimpleMediaSource() { // 必传,您需要替换成真实的视频播放地址 String url = "http://example.volcengine.com/video_480p.mp4"; // media Id 和 cacheKey 若不指定,内部会自动生成 return MediaSource.createUrlSource(/*mediaId*/null, url, /*cacheKey*/null); } /** * 创建 Vid 播放源 */ private MediaSource createVidMediaSource() { String mediaId = "your video id"; // 必传 String playAuthToken = "your video id's playAuthToken"; // 必传 return MediaSource.createIdSource(mediaId, playAuthToken); } @Override protected void onResume() { super.onResume(); // 5. 开始播放 videoView.startPlayback(); } @Override protected void onPause() { super.onPause(); // 6. 暂停播放 videoView.pausePlayback(); } @Override protected void onDestroy() { super.onDestroy(); // 7. 停止播放 videoView.stopPlayback(); } }
至此,您已实现基础的播放功能。后续可参考以下文档了解 PlayerKit 的核心类以及进阶功能: