Topik ini menjelaskan cara menggunakan kit pengembangan perangkat lunak (SDK) ApsaraVideo Player untuk Android guna mengimplementasikan RTS.
Integrasi SDK
Tambahkan dependensi SDK ApsaraVideo Player sebagai berikut:
Integrasi Maven
Tambahkan alamat repositori Maven.
Tambahkan alamat repositori Maven ke file build.gradle di direktori root proyek Anda.
// Alamat repositori Maven untuk Alibaba Cloud SDK (ApsaraVideo Player) maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' }Tambahkan file dependensi ApsaraVideo Player SDK ke file app/build.gradle proyek Anda.
def player_sdk_version = "x.x.x" // Gunakan versi terbaru. def rts_sdk_version = "7.11.0" // Nomor versi independen. Ini adalah versi terbaru. // Library utama pemutar. implementation "com.aliyun.sdk.android:AliyunPlayer:$player_sdk_version-full" // Lapisan jembatan (AlivcArtc) antara pemutar dan komponen RTS. Nomor versi harus sama dengan nomor versi pemutar. Harus diintegrasikan bersama komponen RTS. implementation "com.aliyun.sdk.android:AlivcArtc:$player_sdk_version" // Komponen RTS. implementation "com.aliyun.rts.android:RtsSDK:$rts_sdk_version"PentingNomor versi lapisan jembatan (AlivcArtc) harus sama dengan nomor versi pemutar. Anda harus mengintegrasikan lapisan jembatan bersama komponen RTS.
Untuk informasi lebih lanjut tentang versi pemutar, lihat SDK download. Kami menyarankan menggunakan versi terbaru. Pemutar harus V7.11.0 atau lebih baru, dan versi minimum yang didukung adalah V5.4.5.0.
Untuk jawaban atas pertanyaan umum, lihat FAQ Pemutar Android.
Gunakan API ApsaraVideo Player SDK
Panggil API SDK ApsaraVideo Player untuk mengimplementasikan fitur RTS. Untuk informasi lebih lanjut tentang fitur SDK ApsaraVideo Player, lihat Advanced features dan API reference.
Kode berikut hanya sebagai contoh. Untuk kode lengkap, lihat modul RTS Playback dalam proyek API-Example. Proyek sampel Android berbasis Java ini membantu developer mengintegrasikan fitur inti SDK ApsaraVideo Player dengan cepat.
Saat menggunakan ApsaraVideo Player untuk penarikan aliran RTS, jangan panggil metode pause untuk menjeda siaran langsung. Sebagai gantinya, panggil metode stop untuk menghentikan pemutaran, lalu panggil metode prepare untuk memulai ulang pemutaran.
Operasi seek (seret) tidak didukung.
Muat pustaka RTS
Jika diperlukan, tambahkan System.loadLibrary("RtsSDK"); ke Activity yang sesuai.
static {
System.loadLibrary("RtsSDK");
}Buat player
Buat pemain.
Buat instans AliPlayer menggunakan kelas
AliPlayerFactory.// Buat instans pemutar. AliPlayer mAliPlayer = AliPlayerFactory.createAliPlayer(context); // Teruskan traceId. // Opsional: Kami menyarankan Anda menggunakan fitur Tracing Analysis. Saat terjadi exception selama pemutaran video dengan SDK ApsaraVideo Player, Anda dapat menggunakan fitur ini untuk melacak seluruh tautan untuk pengguna atau session pemutaran tertentu. Hal ini membantu Anda mendiagnosis masalah dengan cepat dan meningkatkan efisiensi administrasi pengalaman pemutaran. // Tentukan nilai traceId. Nilainya harus merupakan pengenal unik untuk pengguna atau perangkat mereka. Misalnya, teruskan ID pengguna bisnis Anda, atau ID perangkat seperti International Mobile Equipment Identity (IMEI) atau identifier for advertisers (IDFA). mAliPlayer.setTraceId("traceId");CatatanFitur Playback Quality Monitoring (yang memungkinkan Anda melihat data kualitas pemutaran secara keseluruhan), fitur Tracing Analysis (yang memungkinkan Anda melokalisasi pengguna atau perangkat tertentu, menganalisis perilaku pemutaran mereka, dan mengidentifikasi masalah seperti anomali pemutaran dengan cepat), serta fitur Video Playback Statistics semuanya bergantung pada fitur pelaporan log instrumentasi.
Saat membuat pemutar, fitur yang tersedia bergantung pada cara Anda mengatur parameter
setTraceId:Jika Anda tidak meneruskan parameter
setTraceId(default): Fitur pelaporan log instrumentasi diaktifkan. Anda dapat menggunakan fitur playback quality monitoring dan video playback statistics. Fitur Tracing Analysis tidak tersedia.Jika Anda meneruskan traceId ke parameter
setTraceId: Anda harus menentukan nilai traceId tersebut. Nilainya harus merupakan pengenal unik untuk pengguna atau perangkat mereka, seperti ID pengguna bisnis, IMEI, atau IDFA. Setelah meneruskan traceId, fitur pelaporan log instrumentasi diaktifkan. Anda kemudian dapat menggunakan fitur playback quality monitoring, Tracing Analysis, dan video playback statistics.Jika Anda mengatur parameter
setTraceIdkeDisableAnalytics: Fitur pelaporan log instrumentasi dinonaktifkan. Anda tidak dapat menggunakan fitur pemantauan kualitas pemutaran, Tracing Analysis, atau statistik pemutaran video.
Atur tampilan layar.
Pemutar mendukung AliDisplayView (disarankan), SurfaceView, dan TextureView. Anda dapat memilih salah satu tampilan berikut.
Deklarasikan tampilan dalam file XML.
AliDisplayView (disarankan)
<!-- Tampilan rendering pemain --> <com.aliyun.player.videoview.AliDisplayView android:id="@+id/ali_display_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" />SurfaceView
<!-- Tampilan rendering pemain --> <SurfaceView android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" />TextureView
<!-- Tampilan rendering pemain --> <TextureView android:id="@+id/texture_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" />Atur tampilan layar.
AliDisplayView (disarankan)
Panggil metode
setDisplayViewdari pemutar untuk menyambungkan tampilan pemutar.AliDisplayView mAliDisplayView = findViewById(R.id.display_view); // Atur jenis tampilan pemutar menggunakan setPreferDisplayView(). mAliDisplayView.setPreferDisplayView(AliDisplayView.DisplayViewType.SurfaceView); mAliPlayer.setDisplayView(mAliDisplayView);SurfaceView
Panggil metode
setSurfacedari pemutar untuk menyambungkan tampilan pemutar.SurfaceView mSurfaceView = findViewById(R.id.surface_view); mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(@NonNull SurfaceHolder holder) { mAliPlayer.setSurface(holder.getSurface()); } @Override public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) { mAliPlayer.surfaceChanged(); } @Override public void surfaceDestroyed(@NonNull SurfaceHolder holder) { mAliPlayer.setSurface(null) } });TextureView
Panggil metode
setSurfacedari pemutar untuk menyambungkan tampilan pemutar.TextureView mTextureView = findViewById(R.id.texture_view); mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surface, int width, int height) { mAliPlayer.setSurface(new Surface(surface)); } @Override public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surface, int width, int height) { mAliPlayer.surfaceChanged(); } @Override public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surface) { mAliPlayer.setSurface(null); return true; } @Override public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surface) { } });
Atur sumber pemutaran.
Pemutar mendukung empat jenis sumber pemutaran: VidSts, VidAuth, VidMps, dan UrlSource. UrlSource digunakan untuk pemutaran URL langsung. Untuk menggunakan layanan RTS, Anda harus mengatur protokol URL ke
artc://.UrlSource urlSource = new UrlSource(); urlSource.setUri("artc://<URL streaming>"); mAliPlayer.setDataSource(urlSource);CatatanUntuk informasi selengkapnya tentang cara menetapkan sumber pemutaran, lihat Fitur dasar.
Konfigurasikan parameter pemutaran.
Konfigurasikan parameter pemutaran untuk meningkatkan performa RTS.
CatatanSDK Pemutar V6.3.0 dan versi lebih baru mendukung konfigurasi optimal otomatis untuk latensi rendah. Jika URL pemutaran dimulai dengan "artc://" dan Anda belum mengubah secara manual nilai
PlayerConfig,mMaxDelayTime,mHighBufferDuration, ataumStartBufferDuration, SDK secara otomatis menggunakan nilai 1000, 10, dan 10 untuk pemutaran.Untuk menyesuaikan kontrol, lihat contoh berikut:
// 1. Dapatkan dan ubah konfigurasi. PlayerConfig config = mAliPlayer.getConfig(); if (playUrl.startWith("artc://")) { // Delay maksimum adalah 1000 ms. config.mMaxDelayTime = 1000; // Durasi buffer awal adalah 10 ms. config.mStartBufferDuration = 10; // Durasi buffer untuk pemulihan tersendat adalah 10 ms. config.mHighBufferDuration = 10; } else { // Gunakan konfigurasi default untuk config atau sesuaikan sendiri. } // 2. Terapkan konfigurasi. mAliPlayer.setConfig(config);Mulai Pemutaran.
// Persiapkan pemutaran. mAliPlayer.prepare(); // Mulai pemutaran. mAliPlayer.start();
Kontrol pemutaran
ApsaraVideo Player SDK untuk Android mendukung operasi seperti memulai dan menghentikan pemutaran.
Mulai Pemutaran.
Mulai pemutaran video menggunakan metode
start. Contoh berikut menunjukkan cara melakukannya:mAliPlayer.start();Hentikan Pemutaran.
Hentikan pemutaran video menggunakan metode
stop. Contoh berikut menunjukkan cara melakukannya:mAliPlayer.stop();Hapus Pemain.
Hapus instans pemutar. Anda dapat menghapus instans tersebut dalam mode sinkron atau asinkron. Contoh berikut menunjukkan cara melakukannya:
// Hapus secara sinkron. Metode stop dipanggil secara otomatis. mAliPlayer.release(); // Hapus secara asinkron. Metode stop dipanggil secara otomatis. mAliPlayer.releaseAsync();CatatanMetode hapus sinkron hanya mengembalikan nilai setelah semua sumber daya pemutar dilepas. Jika antarmuka Anda memerlukan respons cepat, kami menyarankan menggunakan metode hapus asinkron. Perhatikan hal berikut:
Jangan melakukan operasi lain pada objek pemutar selama proses penghapusan asinkron.
Anda tidak perlu menghentikan pemutar secara manual sebelum memanggil metode hapus asinkron karena proses tersebut sudah mencakup alur penghentian asinkron.
Fitur tambahan
Aktifkan atau Nonaktifkan Pencatatan.
// Aktifkan pencatatan. Logger.getInstance(context).enableConsoleLog(true); Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_TRACE); // Nonaktifkan pencatatan. Logger.getInstance(context).enableConsoleLog(false); Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_NONE);Fallback aliran RTS.
CatatanFallback pemutaran hanya berlaku untuk skenario timeout. Dalam skenario timeout pemutaran, jika solusi fallback dikonfigurasi, pemutar akan mencoba melakukan fallback. Jika tidak, callback onError pemutar akan dipicu. Exception seperti error 404 atau 403 atau pemutusan koneksi streamer tidak memicu fallback.
Fallback RTS otomatis menggunakan nama domain yang sama untuk melakukan fallback dari RTS ke FLV. Jika nama domain RTS dan FLV Anda berbeda, Anda harus mengonfigurasi solusi fallback RTS kustom untuk menentukan nama domain FLV tujuan.
Fallback RTS otomatis (diaktifkan secara default)
Saat Anda memutar aliran dari URL RTS, jika fallback RTS kustom tidak dikonfigurasi dan penarikan aliran RTS gagal, pemutar secara otomatis melakukan fallback ke URL FLV default yang sesuai untuk pemutaran. Contoh berikut menunjukkan cara melakukannya:
// 1: diaktifkan, 0: dinonaktifkan. Diaktifkan secara default. AliPlayerGlobalSettings.setOption(AliPlayerGlobalSettings.ALLOW_RTS_DEGRADE, 1);Fallback RTS kustom
Saat Anda memutar aliran dari URL RTS, Anda dapat mengatur URL fallback, seperti URL HLS atau FLV. Jika penarikan aliran RTS gagal, pemutar secara otomatis melakukan fallback ke URL ini untuk pemutaran. Contoh berikut menunjukkan cara melakukannya:
PlayerConfig config = mAliPlayer.getConfig(); // Opsional. Konfigurasikan item lain dalam config. UrlSource urlSource = new UrlSource(); urlSource.setUri(downgradeUrl); // Atur URL fallback. mAliPlayer.enableDowngrade(urlSource, config);
Dapatkan TraceID.
Setiap sesi pemutaran latensi rendah memiliki traceId yang dapat Anda gunakan untuk troubleshooting. Anda dapat memperoleh traceId melalui callback event pemutar.
// Dengarkan callback onInfo pemutar dan urai pesan DemuxerTraceID. mAliPlayer.setOnInfoListener(infoBean -> { if (infoBean.getCode() == InfoCode.DemuxerTraceID) { String traceId = infoBean.getExtraMsg(); });