All Products
Search
Document Center

:Android

Last Updated:Jun 21, 2026

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:

  • Metode 1: Integrasi Maven

    1. Pada file app/build.gradle proyek Anda, tambahkan dependensi untuk ApsaraVideo Player SDK dan Native RTS SDK.

      implementation 'com.aliyun.sdk.android:AlivcArtc:5.4.4.0'
      implementation 'com.aliyun.rts.android:RtsSDK:2.1.0'
      implementation 'com.aliyun.sdk.android:AliyunPlayer:5.4.4.0-full'
      Catatan
      • Setelah Anda menambahkan dependensi AlivcArtc dan RtsSDK, ApsaraVideo Player SDK secara otomatis memuat RTS SDK sebagai plug-in.

      • Versi dependensi Maven yang disediakan di sini hanya sebagai referensi. Untuk versi terbaru ApsaraVideo Player SDK, lihat Riwayat Rilis SDK Android. Untuk versi terbaru SDK RTS, lihat Streaming RTS pada Android.

      • Pastikan versi ApsaraVideo Player SDK dan Native RTS SDK kompatibel. Untuk informasi selengkapnya, lihat Kompatibilitas Versi SDK.

    2. Tambahkan URL repositori Maven.

      Tambahkan URL tersebut ke file build.gradle di direktori root proyek Anda.

      // Repositori Maven untuk MPChart. Anda dapat menghapus ini jika tidak memerlukan grafik.
      maven { url 'https://jitpack.io' }
      // Repositori Maven untuk SDK Alibaba Cloud (ApsaraVideo Player SDK, RTS SDK).
      maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' }
  • Metode 2: Integrasi AAR manual

    1. Salin file .aar yang diperlukan ke direktori app/libs.aar文件

    2. Pada file app/build.gradle, tambahkan kode berikut:

      dependencies{
          implementation fileTree(dir: 'libs', include: ['*.aar'])
      }

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.

Catatan
  • 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 memanggil stop() untuk menghentikan pemutaran, lalu memanggil prepare() untuk memulainya kembali.

  • Operasi seek tidak didukung.

  • Muat library

    Tambahkan System.loadLibrary("RtsSDK"); ke Activity yang sesuai.

    static {
        System.loadLibrary("RtsSDK");
    }
  • Buat pemutar

    Kelas AliPlayerFactory menyediakan dua jenis pemutar: AliPlayer dan AliListPlayer. Untuk memutar satu sumber media, gunakan AliPlayer. Kode berikut menunjukkan cara membuat instans AliPlayer:

    AliPlayer aliyunVodPlayer;
    .....
    aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());
  • Tetapkan pendengar pemutar

    Pemutar menyediakan berbagai pendengar untuk menangani event, seperti onPrepared dan onCompletion. 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, dan UrlSource. Untuk menggunakan fitur RTS dalam pemutaran URL langsung, Anda harus menggunakan protokol artc:// dalam URL saat menggunakan UrlSource.

    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 SurfaceView maupun TextureView didukung. Contoh berikut menggunakan SurfaceView:

    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 memperbarui UrlSource pemutar 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.DirectComponentMSG dalam callback onInfo menunjukkan pesan transmisi langsung dari komponen RTS tingkat bawah. Untuk mendapatkan TraceId, uraikan string extraMsg dari event ini. Saat pesan berisi code=104 (event trace ID), Anda dapat mengekstrak TraceId dengan 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("\\", "");
        }
    }