Topik ini menjelaskan cara mengimplementasikan RTS menggunakan ApsaraVideo Player SDK di Android.
Integrasikan SDK
Tambahkan dependensi ApsaraVideo Player SDK sebagai berikut:
Maven integration
Tambahkan alamat repositori Maven.
Tambahkan alamat repositori Maven ke file build.gradle pada direktori root.
// Alamat repositori Maven untuk SDK terkait Alibaba Cloud (ApsaraVideo Player) maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' }Tambahkan dependensi ApsaraVideo Player SDK ke file app/build.gradle dalam proyek Anda.
def player_sdk_version = "x.x.x" // Kami merekomendasikan penggunaan versi terbaru. def rts_sdk_version = "7.12.0" // Nomor versi independen, saat ini merupakan 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 konsisten dengan versi pemutar, dan harus diintegrasikan bersamaan dengan komponen RTS. implementation "com.aliyun.sdk.android:AlivcArtc:$player_sdk_version" // Komponen RTS implementation "com.aliyun.rts.android:RtsSDK:$rts_sdk_version"PentingLapisan jembatan (AlivcArtc) antara pemutar dan komponen RTS harus konsisten dengan nomor versi pemutar dan harus diintegrasikan bersamaan dengan komponen RTS.
Untuk informasi versi pemutar, lihat Unduh SDK. Kami merekomendasikan penggunaan versi terbaru. Versi minimum yang didukung adalah V5.4.5.0.
Untuk FAQ, lihat FAQ Pemutar Android.
Gunakan antarmuka ApsaraVideo Player SDK
Panggil metode yang disediakan oleh ApsaraVideo Player SDK untuk menggunakan fitur RTS. Untuk informasi tentang fitur lain dari ApsaraVideo Player SDK, lihat Fitur lanjutan dan Referensi API.
Berikut adalah contoh kode. Untuk kode lengkap, lihat modul RTS Real-Time Streaming playback dalam proyek API-Example. Proyek ini merupakan proyek sampel Android berbasis Java untuk ApsaraVideo Player SDK yang membantu developer menguasai integrasi fitur inti SDK dengan cepat.
Saat mengimplementasikan penarikan aliran RTS menggunakan ApsaraVideo Player SDK, Anda tidak dapat memanggil metode pause untuk menjeda siaran langsung. Sebagai gantinya, panggil stop untuk menghentikan pemutaran, lalu panggil prepare untuk memutar ulang.
Seeking (seret) tidak didukung.
Memuat library RTS
Tambahkan System.loadLibrary("RtsSDK"); ke Activity yang sesuai sesuai kebutuhan.
static {
System.loadLibrary("RtsSDK");
}Buat pemutar
Buat pemutar.
Anda dapat membuat AliPlayer menggunakan kelas
AliPlayerFactory.// Buat instans pemutar AliPlayer mAliPlayer = AliPlayerFactory.createAliPlayer(context); // Masukkan traceId // Opsional: Kami merekomendasikan penggunaan fitur 'Pelacakan titik tunggal pemutar'. Saat terjadi pengecualian selama pemutaran video menggunakan ApsaraVideo Player SDK, gunakan fitur pelacakan titik tunggal untuk melakukan pelacakan end-to-end atas perilaku pemutaran abnormal untuk pengguna atau sesi pemutaran tertentu. Hal ini membantu Anda mendiagnosis penyebab masalah dengan cepat dan meningkatkan efisiensi administrasi pengalaman pemutaran secara efektif. // Tentukan sendiri nilai traceId. Nilai tersebut harus berupa pengenal unik untuk pengguna atau perangkat pengguna Anda, seperti ID pengguna bisnis Anda, IMEI, atau IDFA. mAliPlayer.setTraceId("traceId");CatatanPemutar menyediakan fitur Pemantauan Kualitas Pemutaran (untuk melihat data kualitas pemutaran secara keseluruhan), fitur Troubleshooting Titik Tunggal (untuk menemukan pengguna atau perangkat tertentu, menganalisis perilaku pemutaran mereka, dan mengidentifikasi kelainan pemutaran dengan cepat), serta fitur Statistik Pemutaran Video—semuanya bergantung pada fitur pelaporan log instrumentasi.
Saat Anda membuat pemutar, fitur-fitur yang tersedia ditentukan oleh pengaturan parameter
setTraceId, sebagai berikut:Jika parameter
setTraceIdtidak diberikan (default): Fitur pelaporan log instrumentasi diaktifkan. Anda kemudian dapat menggunakan fitur pemantauan kualitas pemutaran dan statistik pemutaran video, tetapi fitur pelacakan titik tunggal tidak tersedia.Jika Anda memberikan parameter
setTraceIddengan trace ID, Anda menentukan sendiri nilai trace ID tersebut. Nilai tersebut harus berupa pengenal unik untuk pengguna atau perangkat pengguna Anda, seperti ID pengguna bisnis Anda, IMEI, atau IDFA. Setelah Anda memberikan trace ID, fitur pelaporan log instrumentasi diaktifkan. Anda kemudian dapat menggunakan pemantauan kualitas pemutaran, pelacakan titik tunggal, dan statistik pemutaran video.Jika Anda mengatur parameter
setTraceIdkeDisableAnalytics, pelaporan log instrumentasi dinonaktifkan. Anda tidak dapat menggunakan fitur pemantauan kualitas pemutaran, pelacakan titik tunggal, atau statistik pemutaran video.
Atur tampilan.
Pemutar mendukung AliDisplayView (direkomendasikan), SurfaceView, dan TextureView. Pilih salah satu sesuai kebutuhan.
Deklarasikan tampilan dalam file XML.
AliDisplayView (direkomendasikan)
<!-- Tampilan rendering pemutar --> <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 pemutar --> <SurfaceView android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" />TextureView
<!-- Tampilan rendering pemutar --> <TextureView android:id="@+id/texture_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" />Atur tampilan.
AliDisplayView (direkomendasikan)
Panggil antarmuka
setDisplayViewpemutar untuk mengikat tampilan pemutar.AliDisplayView mAliDisplayView = findViewById(R.id.display_view); // Atur jenis tampilan pemutaran menggunakan setPreferDisplayView() mAliDisplayView.setPreferDisplayView(AliDisplayView.DisplayViewType.SurfaceView); mAliPlayer.setDisplayView(mAliDisplayView);SurfaceView
Panggil antarmuka
setSurfacepemutar untuk mengikat 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 antarmuka
setSurfacepemutar untuk mengikat 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 sumber pemutaran: VidSts, VidAuth, VidMps, dan UrlSource. UrlSource digunakan untuk pemutaran URL langsung. Atur URL ke protokol
artc://untuk menggunakan layanan RTS.UrlSource urlSource = new UrlSource(); urlSource.setUri("artc://<Streaming URL>"); mAliPlayer.setDataSource(urlSource);CatatanUntuk informasi lebih lanjut tentang metode pengaturan sumber pemutaran, lihat Fitur Dasar.
Konfigurasikan parameter pemutaran.
Konfigurasikan parameter pemutaran untuk meningkatkan performa RTS.
CatatanApsaraVideo Player SDK V6.3.0 dan versi lebih baru mendukung konfigurasi latensi rendah optimal otomatis. Jika URL pemutaran dimulai dengan "artc://" dan Anda belum mengubah secara manual nilai
mMaxDelayTime,mHighBufferDuration, danmStartBufferDurationdalamPlayerConfig, SDK secara otomatis menggunakan nilai 1000, 10, dan 10 berturut-turut untuk pemutaran aktual.Untuk kontrol kustom, lihat contoh berikut:
// 1. Dapatkan dan ubah konfigurasi PlayerConfig config = mAliPlayer.getConfig(); if (playUrl.startWith("artc://")) { // Delay maksimum: 1000 milidetik config.mMaxDelayTime = 1000; // Durasi buffer saat startup pemutaran: 10 milidetik config.mStartBufferDuration = 10; // Durasi buffer untuk pemulihan tersendat: 10 milidetik config.mHighBufferDuration = 10; } else { // Gunakan konfigurasi default atau sesuaikan ke konfigurasi lain } // 2. Terapkan konfigurasi mAliPlayer.setConfig(config);Mulai pemutaran.
// Siapkan untuk pemutaran mAliPlayer.prepare(); // Mulai pemutaran mAliPlayer.start();
Kontrol pemutaran
ApsaraVideo Player SDK untuk Android mendukung operasi seperti memutar dari titik waktu tertentu, memulai, dan menghentikan pemutaran.
Mulai pemutaran.
Ini mengacu pada memulai pemutaran video, diimplementasikan melalui antarmuka
start. Contohnya:mAliPlayer.start();Hentikan pemutaran.
Ini mengacu pada menghentikan pemutaran video, diimplementasikan melalui antarmuka
stop. Contohnya:mAliPlayer.stop();Hancurkan pemain.
Hancurkan instans pemutar menggunakan metode penghancuran sinkron atau asinkron, sebagai berikut:
// Penghancuran sinkron. Sistem secara otomatis memanggil antarmuka stop. mAliPlayer.release(); // Penghancuran asinkron. Sistem secara otomatis memanggil antarmuka stop. mAliPlayer.releaseAsync();CatatanMetode penghancuran sinkron hanya mengembalikan setelah semua sumber daya pemutar sepenuhnya dilepas. Jika Anda memiliki persyaratan tinggi terhadap kecepatan respons UI, gunakan metode penghancuran asinkron dan perhatikan hal berikut:
Hindari melakukan operasi lain apa pun pada objek pemutar selama proses penghancuran asinkron.
Anda tidak perlu menghentikan pemutar secara manual sebelum memanggil metode penghancuran asinkron, karena proses tersebut secara internal mencakup alur penghentian asinkron.
Fitur Tambahan
Log switch.
// Aktifkan logging Logger.getInstance(context).enableConsoleLog(true); Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_TRACE); // Nonaktifkan logging Logger.getInstance(context).enableConsoleLog(false); Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_NONE);Degradasi Live RTS.
CatatanDegradasi kegagalan pemutaran hanya berlaku untuk skenario timeout. Jika salah satu skema degradasi berikut dikonfigurasi dalam skenario timeout pemutaran, pemrosesan pemutaran terdegradasi akan terjadi; jika tidak, callback onError pemutar akan dipicu. Misalnya, pengecualian seperti 404, 403, atau koneksi streamer terputus tidak memicu degradasi.
Degradasi otomatis RTS menggunakan nama domain yang sama untuk mencapai degradasi dari RTS ke FLV. Jika nama domain RTS dan FLV Anda berbeda, konfigurasikan skema degradasi kustom RTS untuk menentukan nama domain FLV tujuan.
Degradasi otomatis RTS (diaktifkan secara default)
Dalam skenario di mana alamat Real-Time Streaming (RTS) digunakan untuk pemutaran, jika degradasi kustom RTS tidak dikonfigurasi dan penarikan aliran RTS gagal, sistem secara otomatis menurunkan spesifikasi ke alamat FLV default yang sesuai dengan RTS untuk pemutaran. Contohnya:
// 1 berarti diaktifkan, 0 berarti dinonaktifkan. Diaktifkan secara default. AliPlayerGlobalSettings.setOption(AliPlayerGlobalSettings.ALLOW_RTS_DEGRADE, 1);Degradasi kustom RTS
Dalam skenario di mana alamat Real-Time Streaming (RTS) digunakan untuk pemutaran, dengan mengatur alamat degradasi RTS (seperti alamat HLS atau FLV), jika penarikan aliran RTS gagal, sistem secara otomatis menurunkan spesifikasi ke alamat tersebut untuk pemutaran. Contohnya:
PlayerConfig config = mAliPlayer.getConfig(); // Opsional: Konfigurasikan item lain dalam config UrlSource urlSource = new UrlSource(); urlSource.setUri(downgradeUrl); // Atur URL degradasi mAliPlayer.enableDowngrade(urlSource, config);
Dapatkan TraceID.
Setiap pemutaran latensi rendah memiliki traceId, yang digunakan untuk troubleshooting. Dapatkan traceId melalui callback event pemutar.
// Dengarkan callback onInfo pemutar dan uraikan pesan DemuxerTraceID mAliPlayer.setOnInfoListener(infoBean -> { if (infoBean.getCode() == InfoCode.DemuxerTraceID) { String traceId = infoBean.getExtraMsg(); });