Topik ini menjelaskan cara mengintegrasikan ApsaraVideo Player SDK dengan Native RTS SDK pada Android untuk mengaktifkan RTS.
Integrasi SDK
Tambahkan dependensi ApsaraVideo Player SDK dan Native RTS SDK menggunakan salah satu metode berikut:
Penggunaan API SDK
Panggil API ApsaraVideo Player SDK untuk menggunakan fitur RTS. Untuk informasi lebih lanjut mengenai fitur lain dari ApsaraVideo Player SDK, lihat Fitur lanjutan dan Referensi API.
-
Potongan kode berikut hanya untuk demonstrasi. Untuk kode sumber lengkap, lihat proyek open-source kami.
-
Saat memutar aliran RTS dengan ApsaraVideo Player SDK, Anda tidak dapat memanggil metode
pause()untuk menjeda siaran langsung. Sebagai gantinya, Anda harus memanggilstop()untuk menghentikan pemutaran, lalu memanggilprepare()untuk memulainya kembali. -
Operasi
seektidak didukung.
-
Muat library
Tambahkan
System.loadLibrary("RtsSDK");ke Activity yang sesuai.static { System.loadLibrary("RtsSDK"); } -
Buat pemutar
Kelas
AliPlayerFactorymenyediakan dua jenis pemutar:AliPlayerdanAliListPlayer. Untuk memutar satu sumber media, gunakanAliPlayer. Kode berikut menunjukkan cara membuat instansAliPlayer:AliPlayer aliyunVodPlayer; ..... aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext()); -
Tetapkan pendengar pemutar
Pemutar menyediakan berbagai pendengar untuk menangani event, seperti
onPrepareddanonCompletion. Kode berikut menunjukkan cara menetapkan pendengar tersebut:aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() { @Override public void onError(ErrorInfo errorInfo) { // Dipanggil saat terjadi kesalahan. } }); aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() { @Override public void onPrepared() { // Dipanggil saat pemutar siap. } }); aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() { @Override public void onVideoSizeChanged(int width, int height) { // Dipanggil saat resolusi video berubah. } }); aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() { @Override public void onRenderingStart() { // Dipanggil saat frame pertama dirender. } }); aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() { @Override public void onInfo(int type, long extra) { // Dipanggil untuk event informasi pemutaran, seperti awal loop, progres buffering, atau posisi saat ini. } }); aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() { @Override public void onLoadingBegin() { // Dipanggil saat buffering dimulai. } @Override public void onLoadingProgress(int percent, float kbps) { // Progres buffering. } @Override public void onLoadingEnd() { // Dipanggil saat buffering selesai. } }); aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() { @Override public void onSubtitleShow(long id, String data) { // Dipanggil saat subtitle ditampilkan. } @Override public void onSubtitleHide(long id) { // Dipanggil saat subtitle disembunyikan. } }); aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() { @Override public void onChangedSuccess(TrackInfo trackInfo) { // Dipanggil saat pergantian track atau resolusi berhasil. } @Override public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { // Dipanggil saat pergantian track atau resolusi gagal. } }); aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() { @Override public void onStateChanged(int newState) { // Dipanggil saat status pemutar berubah. } }); aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() { @Override public void onSnapShot(Bitmap bm, int with, int height) { // Dipanggil saat snapshot diambil. } }); -
Buat sumber data
Pemutar mendukung empat jenis sumber pemutaran:
VidSts,VidAuth,VidMps, danUrlSource. Untuk menggunakan fitur RTS dalam pemutaran URL langsung, Anda harus menggunakan protokolartc://dalam URL saat menggunakanUrlSource.UrlSource urlSource = new UrlSource(); urlSource.setUri("artc://<your_streaming_url>"); aliyunVodPlayer.setDataSource(urlSource);</your_streaming_url> -
Tetapkan tampilan
Jika sumber pemutaran berisi video, Anda harus menetapkan tampilan untuk merender frame video. Baik
SurfaceViewmaupunTextureViewdidukung. Contoh berikut menggunakanSurfaceView:surfaceView = (SurfaceView) findViewById(R.id.playview); surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { aliyunVodPlayer.setDisplay(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { aliyunVodPlayer.surfaceChanged(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { aliyunVodPlayer.setDisplay(null); } }); -
Kontrol pemutaran
Anda perlu membuat UI sendiri untuk kontrol pemutaran dan memanggil metode pemutar yang sesuai dalam penanganan event tombol. Contoh berikut menunjukkan operasi kontrol dasar seperti putar dan henti:
// Siapkan pemutar. Dalam callback onPrepared, panggil start() untuk memulai pemutaran. aliyunVodPlayer.prepare(); // Mulai pemutaran. aliyunVodPlayer.start(); // Hentikan pemutaran. aliyunVodPlayer.stop(); // Reset pemutar. aliyunVodPlayer.reset(); // Lepaskan pemutar. Setelah dilepas, instans pemutar tidak dapat digunakan kembali. aliyunVodPlayer.release(); -
Konfigurasi parameter pemutaran
Konfigurasikan parameter pemutaran untuk mengoptimalkan kinerja RTS.
// Dapatkan konfigurasi saat ini. PlayerConfig config = mAliyunVodPlayer.getConfig(); // Tetapkan latensi maksimum menjadi 1.000 ms. Latensi dikelola oleh protokol ARTC. config.mMaxDelayTime = 1000; // Tetapkan durasi buffer awal dan buffer tinggi menjadi 10 ms. Buffering dikelola oleh protokol ARTC. config.mHighBufferDuration = 10; config.mStartBufferDuration = 10; ....// Pengaturan lainnya // Terapkan konfigurasi ke pemutar. mAliyunVodPlayer.setConfig(config); -
Pencatatan log
// Aktifkan pencatatan log Logger.getInstance(context).enableConsoleLog(true); Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_TRACE); // Nonaktifkan pencatatan log Logger.getInstance(context).enableConsoleLog(false); Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_NONE); -
Degradasi siaran langsung
Degradasi siaran langsung adalah strategi fallback yang mengubah URL pemutaran dengan awalan
artc://menjadi URL HTTP-FLV. Anda kemudian dapat memperbaruiUrlSourcepemutar dan memulai ulang pemutaran./** * Strategi degradasi */ private void willBeDemoted() { mRtsAliPlayer.stop(); if (mUrl.startsWith("artc://")) { setDataSource("http://xxxx.flv"); mRtsAliPlayer.prepare(); } } -
Mendapatkan TraceId
Event
InfoCode.DirectComponentMSGdalam callbackonInfomenunjukkan pesan transmisi langsung dari komponen RTS tingkat bawah. Untuk mendapatkanTraceId, uraikan stringextraMsgdari event ini. Saat pesan berisicode=104(event trace ID), Anda dapat mengekstrakTraceIddengan mengurai substring setelah pembatas-sub-.private static final int TRACE_ID_CODE = 104; // Dengarkan callback onInfo pemutar dan uraikan pesan event RTS. mRtsAliPlayer.setOnInfoListener(infoBean -> { if (infoBean.getCode() == InfoCode.DirectComponentMSG) { String extraMsg = infoBean.getExtraMsg(); parseDirectComponentMSG(extraMsg); } }); private void parseDirectComponentMSG(String msg) { if (msg.contains("code=" + TRACE_ID_CODE)) { parseTraceId(msg); } } /** * Mengurai TraceId. */ private void parseTraceId(String msg) { String[] split = msg.split("-sub-"); if (split.length >= 1) { mTraceId = "RequestId:" + (split[1].substring(0, split[1].length() - 1)); mTraceId = mTraceId.replace("\"", "").replace("\\", ""); } }
