All Products
Search
Document Center

:Native RTS SDK untuk Android

Last Updated:Mar 19, 2026

Dokumen ini menjelaskan cara mengintegrasikan Native RTS SDK untuk Android dengan ApsaraVideo Player SDK guna menggunakan fitur RTS (Real-Time Streaming).

Integrasi SDK

Gunakan salah satu metode berikut untuk menambahkan dependensi ApsaraVideo Player SDK dan Native RTS SDK.

  • Metode 1: Gunakan Maven

    1. Tambahkan dependensi ApsaraVideo Player SDK dan Native RTS SDK ke file app/build.gradle proyek Anda.

      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 menambahkan dependensi AlivcArtc dan RtsSDK, ApsaraVideo Player SDK secara otomatis memuat Native RTS SDK sebagai Plugin.

      • Versi SDK yang ditentukan dalam kode dependensi Maven di atas hanya untuk referensi. Untuk versi terbaru ApsaraVideo Player SDK, lihat Catatan Rilis. Untuk versi terbaru SDK RTS, lihat Unduhan SDK dan catatan rilis.

      • Pastikan persyaratan terpenuhi saat mengintegrasikan Native RTS SDK dengan ApsaraVideo Player SDK. Untuk informasi lebih lanjut, lihat Unduhan SDK dan Catatan Rilis.

    2. Tambahkan URL repositori Maven.

      Tambahkan URL repositori Maven ke file build.gradle di direktori root.

      // URL repositori Maven untuk MPChart. Jika Anda tidak memerlukan MPChart, Anda dapat menghapus baris kode ini.
      maven { url 'https://jitpack.io' }
      // URL repositori Maven untuk ApsaraVideo Player SDK dan RTS SDK.
      maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' }
  • Metode 2: Tambahkan file AAR secara manual

    1. Salin file .aar yang sesuai ke direktori app/libs. AAR files

    2. Tambahkan kode berikut ke file app/build.gradle:

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

Panggil metode ApsaraVideo Player SDK

Gunakan metode ApsaraVideo Player SDK untuk mengakses fitur RTS. Untuk detail lebih lanjut tentang fitur ApsaraVideo Player SDK, lihat Fitur Lanjutan dan Referensi API.

Catatan
  • Kode contoh berikut memberikan ilustrasi. Untuk kode lengkap, kunjungi halaman Proyek Sumber Terbuka.

  • Saat menggunakan ApsaraVideo Player SDK untuk menarik aliran melalui RTS, Anda tidak dapat memanggil metode pause untuk menjeda pemutaran. Namun, Anda dapat memanggil metode stop untuk menghentikan pemutaran dan prepare untuk memutar ulang aliran.

  • Pencarian tidak didukung.

  • Muat pustaka

    Tambahkan System.loadLibrary("RtsSDK"); ke aktivitas yang relevan sesuai kebutuhan bisnis Anda.

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

    Gunakan kelas AliPlayerFactory untuk membuat pemain. Dua jenis pemain tersedia: AliPlayer dan AliListPlayer. Gunakan AliPlayer untuk memutar satu aliran. Berikut adalah contoh kode untuk membuat AliPlayer:

    AliPlayer aliyunVodPlayer;
    .....
    aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());
  • Atur pendengar pemain

    ApsaraVideo Player SDK menyediakan berbagai pendengar, seperti onPrepared dan onCompletion. Gunakan kode berikut untuk mengatur pendengar:

    aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
        @Override
        public void onError(ErrorInfo errorInfo) {
            // Mendengarkan terjadinya kesalahan.
        }
    });
    aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        @Override
        public void onPrepared() {
            // Mendengarkan persiapan yang berhasil.
        }
    });
    aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
        @Override
        public void onVideoSizeChanged(int width, int height) {
            // Mendengarkan perubahan resolusi video.
        }
    });
    aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() {
        @Override
        public void onRenderingStart() {
            // Mendengarkan tampilan frame pertama.
        }
    });
    aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(int type, long extra) {
            // Mendengarkan peristiwa lainnya, seperti mulai putar ulang berulang, posisi buffer, posisi pemutaran saat ini, dan mulai putar otomatis.
        }
    });
    aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
        @Override
        public void onLoadingBegin() {
            // Mendengarkan mulai buffering.
        }
        @Override
        public void onLoadingProgress(int percent, float kbps) {
            // Mendengarkan kemajuan buffering.
        }
        @Override
        public void onLoadingEnd() {
            // Mendengarkan akhir buffering.
        }
    });
    aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {
        @Override
        public void onSubtitleShow(long id, String data) {
            // Mendengarkan tampilan subtitle.
        }
        @Override
        public void onSubtitleHide(long id) {
            // Mendengarkan penghilangan subtitle.
        }
    });
    aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
        @Override
        public void onChangedSuccess(TrackInfo trackInfo) {
            // Mendengarkan keberhasilan beralih antara aliran audio dan video atau antara resolusi.
        }
        @Override
        public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
            // Mendengarkan kegagalan beralih antara aliran audio dan video atau antara resolusi.
        }
    });
    aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
        @Override
        public void onStateChanged(int newState) {
            // Mendengarkan perubahan status pemain.
        }
    });
    aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() {
        @Override
        public void onSnapShot(Bitmap bm, int with, int height) {
            // Mendengarkan tangkapan snapshot.
        }
    });
  • Konfigurasikan sumber pemutaran

    ApsaraVideo Player mendukung empat jenis sumber pemutaran: VidSts, VidAuth, VidMps, dan UrlSource. Jika menggunakan UrlSource, tambahkan awalan artc:// pada URL untuk mengaktifkan fitur RTS.

    UrlSource urlSource = new UrlSource();
    urlSource.setUri("artc://<Streaming URL>");
    aliyunVodPlayer.setDataSource(urlSource);
  • Atur tampilan antarmuka pengguna (UI)

    Jika sumber pemutaran mencakup gambar video, atur tampilan UI untuk menampilkan gambar tersebut. SurfaceView dan TextureView didukung. Contoh kode untuk 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);
        }
    });
  • Atur kontrol pemutaran

    Buat tombol kontrol pemutaran dan kaitkan peristiwa klik dengan metode kontrol pemutaran untuk mengimplementasikan fungsi dasar seperti memutar dan menghentikan. Berikut adalah contoh kode:

    // Persiapkan pemutaran. Anda dapat menentukan metode start() dalam callback sehingga pemutaran dimulai setelah persiapan selesai.
    aliyunVodPlayer.prepare();
    // Mulai pemutaran.
    aliyunVodPlayer.start();
    // Hentikan pemutaran.
    aliyunVodPlayer.stop();
    // Reset pemain.
    aliyunVodPlayer.reset();
    // Lepaskan pemain. Pemain tidak dapat digunakan setelah dilepaskan.
    aliyunVodPlayer.release();
  • Atur parameter pemutaran

    Atur parameter pemutaran untuk meningkatkan efek RTS.

    // Periksa konfigurasi.
    PlayerConfig config = mAliyunVodPlayer.getConfig();
    // Atur latensi maksimum menjadi 1 detik. Protokol Alibaba Real-Time Communication (ARTC) mengontrol latensi.
    config.mMaxDelayTime = 1000;
    // Atur periode buffer menjadi 10 milidetik. Protokol ARTC mengontrol periode buffer.
    config.mHighBufferDuration = 10;
    config.mStartBufferDuration = 10;
    .... // Konfigurasikan pengaturan lainnya.
    // Muat pengaturan untuk pemain.
    mAliyunVodPlayer.setConfig(config);
  • 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);
  • Gunakan protokol terdegradasi untuk streaming langsung

    Ubah awalan URL sumber dari artc:// ke format HTTP-FLV, lalu perbarui UrlSource di ApsaraVideo Player untuk menggunakan protokol terdegradasi dalam memutar aliran langsung.

    /**
     * Konfigurasikan kebijakan degradasi.
     */
    private void willBeDemoted() {
        mRtsAliPlayer.stop();
        if (mUrl.startsWith("artc://")) {
            setDataSource("http://xxxx.flv");
            mRtsAliPlayer.prepare();
        }
    }
  • Peroleh TraceId

    Saat pesan yang diteruskan oleh komponen pemutaran dikembalikan dalam panggilan balik acara pemain, analisis string JSON yang menggambarkan acara pemain. Kode yang diperoleh merupakan pesan dalam RTS SDK. Saat menerima E_HELP_SUPPORT_ID_SUBSCRIBE, analisis bagian string setelah "-sub-" untuk mendapatkan TraceId.

    private static final int TRACE_ID_CODE = 104;
    
    // 1. Dengarkan callback onInfo dan analisis pesan acara 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);
        }
    }
    
    /**
     * Analisis 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("\\", "");
        }
    }