IVS Android 回放器 SDK 入门
本文档将引导您完成 Amazon IVS Android 回放器 SDK 入门所涉及的步骤。
安装库
要将 Amazon IVS Android 播放器库添加到您的 Android 开发环境中,请将该库添加到您模块的 build.gradle
文件(如此处所示,适用于最新版本的 Amazon IVS 播放器)。
repositories { mavenCentral() } dependencies { implementation 'com.amazonaws:ivs-player:1.42.0' }
如要手动安装 SDK,也可从以下位置下载最新版本:
使用带有调试符号的 SDK
我们还发布了包含调试符号的 Android 播放器 SDK 版本。如果在 IVS 播放器 SDK 中遇到崩溃,则可以使用此版本来提高 Firebase Crashlytics 中调试报告(堆栈跟踪)的质量;即 libplayercore.so
。当您向 IVS SDK 团队报告这些崩溃时,堆栈跟踪质量越高,修复问题越轻松。
要使用此版本的 SDK,请在 Gradle 构建文件中替换此行:
implementation "com.amazonaws:ivs-player:$version@aar"
替换为:
implementation "com.amazonaws:ivs-player:$version:unstripped@aar"
将符号上传到 Firebase Crashlytics
确保已为 Firebase Crashlytics 设置 Gradle 构建文件。请按照此处的 Google 说明进行操作:
https://firebase.google.com/docs/crashlytics/ndk-reports
请务必将 com.google.firebase:firebase-crashlytics-ndk
作为依赖项包括在内。
在构建要发布的应用程序时,Firebase Crashlytics 插件应自动上传符号。要手动上传符号,请运行以下命令之一:
gradle uploadCrashlyticsSymbolFileRelease
./gradlew uploadCrashlyticsSymbolFileRelease
[如果符号上传两次(自动和手动上传)也无妨。]
防止您的版本 .apk 变得越来越大
在打包版本 .apk
文件之前,Android Gradle 插件会自动尝试从共享库(包括 IVS 播放器 SDK 的 libplayercore.so
库)中剥离调试信息。但是,有时这种情况不会发生。在这种情况下,.apk
文件可能会变大,您可能会收到来自 Android Gradle 插件的警告消息,告知无法剥离调试符号并将按原样打包 .so
文件。如果发生这种情况,则请执行以下操作:
-
安装 Android NDK。任何最新版本都可以使用。
-
将
ndkVersion <your_installed_ndk_version_number>
添加到应用程序的build.gradle
文件中。即使您的应用程序本身不包含原生代码,也要这样做。
有关更多信息,请参阅此问题报告
创建播放器并设置事件侦听器
播放器接口是 com.amazonaws.ivs.player.Player
。将其初始化,如下所示:
// Create a player instance // <this> refers to the current Android Activity player = Player.Factory.create(this); // Set up to receive playback events and errors player.addListener(this);
或者,通过使用 PlayerView
初始化:
// Create a player instance // <this> refers to the current Android Activity PlayerView playerView = new PlayerView(this); Player player = playerView.getPlayer(); // Set up to receive playback events and errors player.addListener(this);
注意:在 Android 应用程序的主线程中执行侦听器回调方法。
设置视频的 Surface View
如果未使用 PlayerView
,请将 SurfaceView
添加到您的 Android UI 布局以显示视频。此 Surface
必须可用,然后才能播放任何视频流。您可以通过 SurfaceHolder
接口访问基础 Surface,该接口可通过调用 getHolder()
进行检索。(请参阅 Android 开发人员参考中的 SurfaceViewSurfaceHolder.Callback
接收有关 Surface 变化的事件(请参阅 SurfaceHolder.Callback
surfaceView = (SurfaceView) findViewById(R.id.surfaceView); surfaceView.getHolder().addCallback(this); @Override public void surfaceCreated(SurfaceHolder holder) { this.surface = holder.getSurface(); if (player != null) { player.setSurface(this.surface); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { this.surface = null; if (player != null) { player.setSurface(null); } }
播放视频流
由于视频流是异步加载的,因此播放器必须处于 READY
状态,然后您的应用程序才可以调用 play
方法开始播放。使用 Player.Listener
接口来确定播放器何时处于就绪状态。
请看下面的示例代码:
player.load(Uri.parse(url)); @Override public void onStateChanged(Player.State state) { switch (state) { case BUFFERING: // player is buffering break; case READY: player.play(); break; case IDLE: break; case PLAYING: // playback started break; } }
释放播放器
当不再使用播放器时,必须调用 player.release()
方法,以释放库使用的资源。通常,这是在播放器的 Activity 或 Fragment 的 onDestroy
回调中完成的。
@Override protected void onDestroy() { super.onDestroy(); player.removeListener(this); player.release(); }
调用 player.release()
方法后,将无法再使用播放器。
权限
Android 播放器开发工具包需要以下权限:
<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" />
线程安全
播放器 API 不是线程安全的。对播放器实例发起的所有调用都应来自同一个线程。
开发工具包大小
Amazon IVS 播放器开发工具包设计为尽可能轻便。有关开发工具包大小的最新信息,请参阅发布说明。
重要提示:在评估大小影响时,Android Studio 生成的 AAB/APK 的大小并不代表您下载到用户设备的应用程序的大小。Google Play 商店会执行优化以减小应用程序的大小。建议使用 Android 应用程序包