All Products
Search
Document Center

ApsaraVideo VOD:Fitur dasar

Last Updated:Feb 11, 2026

Topik ini menjelaskan cara membuat instans pemutar dan menggunakan fitur dasar ApsaraVideo Player SDK untuk Android, seperti mengatur volume, melakukan pencarian video (video seeking), memantau status pemutaran, mengaktifkan putar ulang berulang (loop playback), mengonfigurasi kecepatan pemutaran, dan mengalihkan track audio.

Penting

Untuk menjalankan dan menguji demo, unduh dan ikuti petunjuk di Jalankan demo untuk mengompilasi dan menjalankannya.

Konfigurasikan sumber pemutaran (DataSource)

  • ApsaraVideo Player SDK untuk Android mendukung empat metode pemutaran video sesuai permintaan (VOD): VidAuth (direkomendasikan untuk pengguna ApsaraVideo VOD), VidSts, UrlSource, dan pemutaran terenkripsi.

  • ApsaraVideo Player SDK untuk Android mendukung dua metode pemutaran live streaming: UrlSource dan pemutaran terenkripsi.

Catatan
  • UrlSource menggunakan URL secara langsung untuk pemutaran. VidSts dan VidAuth menggunakan ID video (Vid) untuk pemutaran.

  • Untuk informasi tentang wilayah (region), lihat ID wilayah ApsaraVideo VOD.

Mainkan video on demand

VidAuth (direkomendasikan)

Untuk memutar video VOD menggunakan VidAuth, atur properti vid ke ID media dan properti playAuth ke kredensial pemutaran media.

  • Anda dapat memperoleh ID media setelah mengunggah file video atau audio. Di Konsol ApsaraVideo VOD, pilih Media Files > Audio/Video. Anda juga dapat memanggil operasi SearchMedia yang disediakan oleh ApsaraVideo VOD SDK.

  • Anda dapat memanggil operasi GetVideoPlayAuth untuk memperoleh kredensial pemutaran. Kami menyarankan agar Anda mengintegrasikan ApsaraVideo VOD server-side SDK untuk memperoleh kredensial pemutaran. Hal ini menghindari pembuatan signature secara manual. Untuk contoh pemanggilan operasi ini, lihat OpenAPI Explorer.

Kami menyarankan Anda menggunakan VidAuth untuk ApsaraVideo VOD. Dibandingkan dengan pemutaran berbasis STS, VidAuth menawarkan kegunaan dan keamanan yang lebih baik. Untuk detail selengkapnya, lihat Perbandingan antara kredensial dan STS.

Jika Anda mengaktifkan transmisi langsung parameter untuk enkripsi HLS di Konsol ApsaraVideo VOD, nama parameter default adalah MtsHIsUriToken. Untuk informasi selengkapnya, lihat Transmisi langsung parameter untuk enkripsi HLS. Gunakan kode berikut untuk menambahkan nilai MtsHIsUriToken ke sumber VOD.

VidAuth vidAuth = new VidAuth();
   vidAuth.setVid("The video ID");// Wajib diisi. ID video (VideoId).
   vidAuth.setPlayAuth("<yourPlayAuth>");// Wajib diisi. Kredensial pemutaran. Untuk memperoleh kredensial, panggil operasi GetVideoPlayAuth ApsaraVideo VOD.
   vidAuth.setRegion("The region ID");// Parameter ini sudah tidak digunakan lagi mulai player SDK V5.5.5.0 dan versi selanjutnya. Anda tidak perlu mengatur parameter ini karena pemutar akan mengurai wilayah secara otomatis. Untuk player SDK sebelum V5.5.5.0, parameter ini wajib diisi. Parameter ini menentukan wilayah layanan ApsaraVideo VOD. Nilai default adalah cn-shanghai.
   // vidAuth.setAuthTimeout(3600);// Periode validitas URL pemutaran, dalam detik. Periode ini menimpa periode validitas untuk penandatanganan URL yang dikonfigurasi di Konsol ApsaraVideo VOD. Jika Anda tidak menentukan parameter ini, nilai default 3600 yang digunakan. Jika Anda mengatur parameter ini, pastikan nilainya lebih besar dari durasi video aktual agar URL pemutaran tidak kedaluwarsa sebelum pemutaran selesai.
        
   // Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di Konsol VOD dan nama parameter default adalah MtsHlsUriToken, Anda harus mengatur config dan meneruskannya ke objek vidAuth, seperti yang ditunjukkan pada kode berikut.
   VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
   vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
   vidAuth.setPlayerConfig(vidConfig);
   aliPlayer.setDataSource(vidAuth);

Pemutaran Video-on-Demand VidSts

Pemutaran VidSts menggunakan kredensial STS temporary alih-alih kredensial pemutaran VOD. Anda harus memperoleh token STS dan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) sebelum memutar video VOD. Untuk informasi selengkapnya, lihat Memperoleh token STS.

Jika Anda mengaktifkan transmisi langsung parameter untuk enkripsi HLS di Konsol ApsaraVideo VOD, nama parameter default adalah MtsHIsUriToken. Untuk informasi selengkapnya, lihat Transmisi langsung parameter untuk enkripsi HLS. Gunakan kode berikut untuk menambahkan nilai MtsHIsUriToken ke sumber VOD.

VidSts vidSts = new VidSts();
       vidSts.setVid("video ID"); // Parameter wajib. ID video (VideoId).
       vidSts.setAccessKeyId("<yourAccessKeyId>"); // Parameter wajib. ID AccessKey dari pasangan AccessKey STS temporary. Anda harus memanggil operasi AssumeRole Layanan Token Keamanan (STS) untuk menghasilkan nilai ini.
       vidSts.setAccessKeySecret("<yourAccessKeySecret>"); // Parameter wajib. Rahasia AccessKey dari pasangan AccessKey STS temporary. Anda harus memanggil operasi AssumeRole Layanan Token Keamanan (STS) untuk menghasilkan nilai ini.
       vidSts.setSecurityToken("<yourSecurityToken>"); // Parameter wajib. Token Layanan Token Keamanan (STS). Anda harus memanggil operasi AssumeRole Layanan Token Keamanan (STS) untuk menghasilkan nilai ini.
       vidSts.setRegion("region"); // Parameter wajib. Wilayah tempat layanan ApsaraVideo VOD diakses. Nilai default: cn-shanghai.
       // vidSts.setAuthTimeout(3600); // Periode validitas URL pemutaran, dalam detik. Nilai ini menimpa periode validitas penandatanganan URL yang Anda konfigurasi di Konsol ApsaraVideo VOD. Jika Anda tidak menentukan parameter ini, nilai default 3600 yang digunakan. Jika Anda mengatur parameter ini, pastikan nilainya lebih besar dari durasi aktual video agar URL pemutaran tidak kedaluwarsa sebelum pemutaran selesai.
        
       // Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di Konsol ApsaraVideo VOD dan nama parameter default adalah MtsHlsUriToken, Anda harus mengonfigurasi vidConfig dan meneruskannya ke vidSts. Untuk informasi selengkapnya, lihat kode berikut.
       // Jika Anda tidak mengaktifkan transmisi langsung parameter enkripsi HLS di Konsol ApsaraVideo VOD, Anda tidak perlu mengintegrasikan kode berikut.
       VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
       vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
       vidSts.setPlayerConfig(vidConfig);
       aliPlayer.setDataSource(vidSts);

Pemutaran Video-on-Demand UrlSource

Untuk memutar video VOD menggunakan UrlSource, atur properti setUrl ke URL pemutaran.

  • Anda dapat memanggil operasi GetPlayInfo untuk memperoleh URL pemutaran di ApsaraVideo VOD. Kami menyarankan agar Anda mengintegrasikan ApsaraVideo VOD server-side SDK untuk memperoleh URL pemutaran media. Hal ini menghindari pembuatan signature secara manual. Untuk contoh pemanggilan operasi ini, lihat OpenAPI Explorer.

  • Pastikan Anda memiliki izin untuk mengakses file lokal. Anda dapat menggunakan API sistem untuk mengambil path lengkap file video lokal. Contoh: /sdcard/xxx/xxx/xxx.mp4 atau content://xxx/xxx/xx.mp4.

 UrlSource urlSource = new UrlSource();
        urlSource.setUri("Playback URL");// Wajib diisi. URL pemutaran. URL ini dapat dihasilkan oleh ApsaraVideo VOD atau layanan pihak ketiga, atau merupakan URL video lokal.
        aliPlayer.setDataSource(urlSource);

Pemutaran terenkripsi

Video VOD mendukung enkripsi HLS, enkripsi privat Alibaba Cloud, dan enkripsi DRM. Untuk informasi selengkapnya, lihat Putar video terenkripsi di Android.

Live streaming

Untuk informasi selengkapnya, lihat Pemutaran live streaming standar.

Kelola pemutaran

ApsaraVideo Player SDK untuk Android memungkinkan Anda mengelola pemutaran media. Misalnya, Anda dapat memulai, menjeda, atau menghentikan pemutaran, serta memulai pemutaran dari titik waktu tertentu.

Persiapkan pemutar

Panggil metode prepare untuk mempersiapkan pemutar sebelum pemutaran. Contoh kode:

aliPlayer.prepare();

Mulai pemutaran

Panggil metode start untuk memulai pemutaran. Contoh kode:

aliPlayer.start();

Mainkan video dari titik waktu tertentu

Panggil metode seekTo untuk melompat ke titik waktu tertentu. Fitur ini berguna saat pengguna menyeret progress bar atau melanjutkan pemutaran dari titik tertentu. Contoh kode:

// Parameter position menentukan titik waktu. Satuan: milidetik.
aliPlayer.seekTo(long position);

Atur waktu mulai pemutaran ke posisi tertentu. Pengaturan ini hanya berlaku sekali per panggilan prepare. Contoh kode:

// Atur waktu mulai (dalam milidetik) untuk panggilan prepare berikutnya. Pengaturan ini hanya berlaku untuk panggilan prepare berikutnya.
// Setelah prepare dipanggil, nilai ini secara otomatis dihapus. Jika Anda tidak memanggil metode ini lagi sebelum prepare berikutnya, pemutaran dimulai secara normal.
// Parameter seekMode menentukan pencarian akurat atau tidak akurat.
aliPlayer.setStartTime(time, seekMode);

Jeda pemutaran

Panggil metode pause untuk menjeda pemutaran. Contoh kode:

aliPlayer.pause();

Lanjutkan pemutaran

Panggil metode start untuk melanjutkan pemutaran. Contoh kode:

aliPlayer.start();

Hentikan pemutaran

Panggil metode stop untuk menghentikan pemutaran. Contoh kode:

aliPlayer.stop();

Hapus pemutar

Anda dapat menghapus pemutar secara sinkron atau asinkron. Contoh kode:

// Menghapus pemutar secara sinkron. Sistem secara otomatis memanggil operasi stop.
aliPlayer.release();
// Menghapus pemutar secara asinkron. Sistem secara otomatis memanggil operasi stop.
aliPlayer.releaseAsync();	
Catatan

Operasi penghapusan sinkron mengembalikan hasil setelah sumber daya pemutar dilepas. Jika Anda memiliki persyaratan tinggi terhadap kecepatan respons UI, kami menyarankan Anda memanggil operasi penghapusan asinkron. Catatan penggunaan:

  1. Jangan melakukan operasi lain pada objek pemutar selama proses penghapusan asinkron.

  2. Operasi penghapusan asinkron mencakup proses stop asinkron. Oleh karena itu, Anda tidak perlu menghentikan pemutar secara manual sebelum memanggil operasi penghapusan asinkron.

Pantau status pemutar

ApsaraVideo Player SDK untuk Android memungkinkan Anda mengatur listener dan memantau status pemutaran.

Atur listener

Anda dapat mengatur beberapa listener untuk pemutar.

  • Kami menyarankan Anda mengatur OnErrorListener, OnCompletionListener, OnLoadingStatusListener, dan OnInfoListener.

aliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
    // Callback ini dipicu jika terjadi kesalahan apa pun saat menggunakan pemutar.

    @Override
    public void onError(ErrorInfo errorInfo) {
        ErrorCode errorCode = errorInfo.getCode(); // Kode kesalahan.
        String errorMsg = errorInfo.getMsg(); // Pesan kesalahan.
        // errorExtra berisi informasi kesalahan tambahan dalam format JSON. Contoh:
        //{ "Url": "xxx",
   		//	"Module": "NetWork",
    	//	"ModuleCode": "-377",
   		//  "ModuleMessage": "Redirect to a url that is not a media"}
        String errorExtra= errorInfo.getExtra();         
        // Hentikan pemutar jika terjadi kesalahan.
        aliPlayer.stop();
    }
});
aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
    // Setelah Anda memanggil aliPlayer.prepare(), pemutar mulai membaca dan mengurai data. Callback ini dipicu setelah penguraian berhasil.

    @Override
    public void onPrepared() {
        // Persiapan selesai.
    }
});
aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
    // Callback ini dipicu setelah pemutaran selesai.
    @Override
    public void onCompletion() {
        // Panggil stop untuk menghentikan pemutaran.
        aliPlayer.stop();
    }
});
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    // Callback ini memberikan informasi seperti progres pemutaran saat ini dan posisi buffer.
    @Override
    public void onInfo(InfoBean infoBean) {
        InfoCode code = infoBean.getCode(); // Kode informasi.
        String msg = infoBean.getExtraMsg();// Konten informasi.
        long value = infoBean.getExtraValue(); // Nilai informasi.

        // Progres saat ini: InfoCode.CurrentPosition
        // Posisi buffer saat ini: InfoCode.BufferedPosition
    }
});
aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
    // Callback ini melaporkan status pemuatan. Digunakan untuk menampilkan indikator pemuatan saat jaringan tidak stabil.

    @Override
    public void onLoadingBegin() {
        // Pemuatan dimulai. Video dan audio belum dapat diputar.
        // Tampilkan indikator pemuatan berbentuk lingkaran.
    }

    @Override
    public void onLoadingProgress(int percent, float netSpeed) {
        // Progres pemuatan. Menunjukkan persentase dan kecepatan jaringan.
        // netSpeed adalah field cadangan dan saat ini bernilai 0.
    }

    @Override
    public void onLoadingEnd() {
        // Pemuatan selesai. Video dan audio kini dapat diputar.
        // Sembunyikan indikator pemuatan berbentuk lingkaran.
    }
});

Pantau status pemutaran

Pantau status pemutar menggunakan callback onStateChanged. Contoh kode:

aliPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
    @Override
    public void onStateChanged(int newState) {
        /*
          int idle = 0;
          int initalized = 1;
          int prepared = 2;
          int started = 3;
          int paused = 4;
          int stopped = 5;
          int completion = 6;
          int error = 7;
      */
    }
});

Atur mode tampilan video

ApsaraVideo Player SDK untuk Android memungkinkan Anda mengonfigurasi pengaturan tampilan untuk pemutaran. Misalnya, Anda dapat menentukan cara gambar video diskalakan, diputar, atau dicerminkan.

Padding

Mendukung tiga mode penskalaan tampilan: aspect ratio fit, aspect ratio fill, dan stretch fill, yang diimplementasikan melalui antarmuka setScaleMode. Berikut contohnya:

// Skalakan video agar sesuai dengan tampilan. Rasio aspek video dipertahankan.
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// Skalakan video agar mengisi tampilan. Rasio aspek video dipertahankan.
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// Regangkan video agar mengisi tampilan. Rasio aspek video tidak dipertahankan. Jika rasio aspek video dan tampilan berbeda, distorsi gambar dapat terjadi.
aliPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);

Rotasi

Panggil setRotateMode untuk menentukan sudut rotasi gambar video. Anda dapat menanyakan sudut rotasi setelah diatur. Contoh kode:

// Atur sudut rotasi ke 0° searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_0);
// Atur sudut rotasi ke 90° searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_90);
// Atur sudut rotasi ke 180° searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_180);
// Atur sudut rotasi ke 270° searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_270);
// Tanyakan sudut rotasi.
aliPlayer.getRotateMode();

Pencerminan

Panggil setMirrorMode untuk menentukan mode pencerminan. Pencerminan horizontal, vertikal, dan tanpa pencerminan didukung. Contoh kode:

// Tentukan tanpa pencerminan untuk gambar video.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// Tentukan pencerminan horizontal untuk gambar video.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// Tentukan pencerminan vertikal untuk gambar video.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);

Peroleh informasi pemutaran

ApsaraVideo Player SDK untuk Android memungkinkan Anda memperoleh informasi pemutaran, seperti progres pemutaran saat ini, durasi pemutaran, dan progres buffering.

Peroleh progres pemutaran

Dalam callback onInfo, panggil getExtraValue untuk mengambil posisi pemutaran saat ini. Contoh kode:

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.CurrentPosition){
            // extraValue menunjukkan posisi pemutaran saat ini. Satuan: milidetik.
            long extraValue = infoBean.getExtraValue();
        }
    }
});

Peroleh durasi pemutaran

Anda dapat menanyakan durasi total video. Durasi video hanya tersedia setelah video dimuat. Panggil getDuration setelah event onPrepared dipanggil untuk mengambil durasi video. Contoh kode:

long duration = aliPlayer.getDuration();

Peroleh durasi pemutaran aktual

Anda dapat mengambil durasi pemutaran aktual secara real time, yang tidak termasuk waktu saat pemutaran dijeda atau macet. Contoh kode:

long duration = aliPlayer.getPlayedDuration();

Ambil Progres Buffering

Anda dapat memanggil getExtraValue dalam callback onInfo untuk menanyakan progres buffering saat ini. Berikut contoh kodenya:

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.BufferedPosition){
            // extraValue menunjukkan progres buffering. Satuan: milidetik.
            long extraValue = infoBean.getExtraValue();
        }
    }
});

Peroleh laju frame rendering, bitrate audio dan video, serta bitrate downlink jaringan secara real time

Contoh kode:

// Peroleh laju frame saat ini untuk rendering video. Data yang dikembalikan bertipe FLOAT.
aliPlayer.getOption(IPlayer.Option.RenderFPS);
// Peroleh bitrate video saat ini. Data yang dikembalikan bertipe FLOAT. Satuan: bit/s.
aliPlayer.getOption(IPlayer.Option.VideoBitrate);
// Peroleh bitrate audio saat ini. Data yang dikembalikan bertipe FLOAT. Satuan: bit/s.
aliPlayer.getOption(IPlayer.Option.AudioBitrate);
// Peroleh bitrate downlink jaringan saat ini. Data yang dikembalikan bertipe FLOAT. Satuan: bit/s.
aliPlayer.getOption(IPlayer.Option.DownloadBitrate);

Callback untuk ketidaksesuaian audio dan video

Dalam kondisi ekstrem—seperti decoding software saat pemutaran 4K atau pemutaran kecepatan tinggi aliran H.265 HD pada perangkat low-end—kinerja decoding mungkin tertinggal dari kecepatan pemutaran, sehingga memicu notifikasi callback. Contohnya sebagai berikut:

aliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
    @Override
    public void onAVNotSyncStart(int type) {
        if (type == 0) {
            // Kurangi kecepatan pemutaran.
            if (aliPlayer.getSpeed() > 1) {
                aliPlayer.setSpeed(1);
            }
        }
        Toast.makeText(getContext(), "Out-of-sync starts" , Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAVNotSyncEnd() {
        Toast.makeText(getContext(), "Out-of-sync ends" , Toast.LENGTH_SHORT).show();
    }
});

Tentukan volume

Anda dapat mengatur mode bisu dan volume.

Ubah volume

Anda dapat mengubah volume video hingga dua kali volume aslinya. Jika Anda mengatur volume ke nilai lebih dari 1, kebisingan dapat terjadi. Kami menyarankan agar Anda tidak mengatur volume ke nilai lebih dari 1. Panggil setVolume untuk mengubah volume. Anda juga dapat mengambil volume saat ini. Contoh kode:

// Atur volume ke bilangan real dari 0 hingga 2.
aliPlayer.setVolume(1f);
// Peroleh volume.
aliPlayer.getVolume();

Pengaturan bisu

Panggil setMute untuk membisukan video yang sedang diputar. Contoh kode:

aliPlayer.setMute(true);

Konfigurasikan kecepatan pemutaran

ApsaraVideo Player SDK untuk Android memungkinkan Anda memanggil setSpeed untuk mengubah kecepatan pemutaran. Kecepatan pemutaran dari 0,5x hingga 5x didukung. Pitch audio tetap tidak berubah pada kecepatan berbeda. Contoh kode:

// Kecepatan pemutaran dari 0,5x hingga 5x didukung. Kecepatan pemutaran umum adalah kelipatan 0,5x, seperti 0,5x, 1x, dan 1,5x.
aliPlayer.setSpeed(1.0f);

Pengaturan Resolusi Ganda

Catatan

Untuk contoh kode lengkap, lihat modul API-Example MultiResolution. Proyek sampel berbasis Java ini menunjukkan cara mengintegrasikan fitur inti ApsaraVideo Player SDK untuk Android.

Live streaming berbasis UrlSource

Untuk informasi selengkapnya, lihat Pemutaran live streaming standar.

Pemutaran berbasis VidAuth atau VidSts

Jika Anda menggunakan VidAuth atau VidSts untuk memutar video on-demand, tidak diperlukan pengaturan tambahan. ApsaraVideo Player SDK untuk Android secara otomatis mengambil definisi video dari ApsaraVideo VOD.

Tanyakan definisi

Setelah video dimuat, Anda dapat mengambil definisi video tersebut.

// Peroleh informasi tentang semua aliran video.
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();
// Telusuri semua aliran untuk memperoleh definisi video.
for (TrackInfo trackInfo : trackInfos) {
     if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
             // Peroleh definisi video.
        String vodDefinition = trackInfo.getVodDefinition();
     }
}

Switch Quality

Anda dapat memanggil selectTrack untuk mengalihkan definisi dengan menentukan indeks yang sesuai. Anda dapat memperoleh indeks ini dari parameter TrackInfo.

aliPlayer.selectTrack(index);

Notifikasi Pengalihan Resolusi

Atur callback untuk pengalihan definisi yang berhasil dan gagal.

aliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
    @Override
    public void onChangedSuccess(TrackInfo trackInfo) { }

    @Override
    public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { }
});

Pengalihan cepat

Setelah Anda mengaktifkan mode pengalihan cepat, panggilan manual ke selectTrack selalu menerima respons cepat.

PlayerConfig config = aliPlayer.getConfig();
config.mSelectTrackBufferMode = 1;
aliPlayer.setConfig(config)

Aktifkan putar ulang berulang

ApsaraVideo Player SDK untuk Android mendukung putar ulang berulang. Panggil setLoop untuk mengaktifkan putar ulang berulang. Fitur putar ulang berulang memungkinkan Anda memutar ulang video dari awal setelah pemutaran selesai. Contoh kode:

aliPlayer.setLoop(true);

Callback onInfo dipicu saat putar ulang berulang dimulai. Contoh kode:

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if (infoBean.getCode() == InfoCode.LoopingStart){
            // Dengarkan awal putar ulang berulang.
        }
    }
});

Alihkan track audio

ApsaraVideo Player SDK untuk Android mendukung pengalihan track audio. Ini memungkinkan Anda mengalihkan track audio dalam bahasa berbeda selama pemutaran video.

Catatan penggunaan

Anda dapat mengalihkan track audio pada aliran yang tidak digunakan untuk pemutaran daftar (list playback), seperti aliran MP4, aliran HLS campuran single-bitrate, track audio dalam aliran HLS single-bitrate, dan substream dalam aliran HLS campuran multi-bitrate. Tabel berikut menjelaskan berbagai jenis aliran video.

Jenis Aliran Video

Ekstensi file

Jumlah bitrate

Jumlah file sub-M3U8

Jenis substream

Catatan Pengalihan

Aliran non-daftar (seperti aliran MP4)

.mp4

1

-

Aliran yang berisi satu track video, beberapa track audio, dan beberapa track subtitle.

Anda dapat mengalihkan antar track audio.

Aliran HLS campuran single-bitrate

.m3u8

1

1

Aliran yang berisi satu track video, beberapa track audio, dan beberapa track subtitle.

Anda dapat mengalihkan antar track audio.

Aliran HLS single-bitrate

.m3u8

1

n

m3u8: Setiap substream harus berupa salah satu dari berikut: aliran video, aliran audio, atau aliran caption.

Anda dapat mengalihkan antar track audio.

Aliran HLS campuran multi-bitrate

.m3u8

n

n

Aliran M3U8 yang berisi satu track video, beberapa track audio, dan beberapa track subtitle. Substream memiliki bitrate berbeda.

Anda dapat mengalihkan antar substream. Anda tidak dapat mengalihkan antar track audio dalam substream.

Contoh penggunaan

  1. Konfigurasikan callback.

    aliPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() {
        @Override
        // Konfigurasikan callback onSubTrackReady. Umumnya, callback onSubTrackReady dipicu sebelum callback prepare.
        public void onSubTrackReady(MediaInfo mediaInfo) {
            if (mPlayerTrackFragment != null) {
                //mPlayerTrackFragment.showMediaInfo();
                // Panggil operasi getSubMediaInfo dan peroleh MediaInfo dari respons. Anda harus memanggil operasi getSubMediaInfo setelah callback onSubTrackReady dipicu. Jika tidak, string kosong akan dikembalikan.
                MediaInfo subMediaInfo = aliPlayer.getSubMediaInfo();
                TrackInfos = subMediaInfo.getTrackInfos();
                // Temukan track yang ingin Anda alihkan.
                myTrack = myfunc(TrackInfos)
            }
        }
    });
  2. Alihkan ke track yang diinginkan.

    index = myTrack.getIndex();
    aliPlayer.selectTrack(index);

Penggunaan Gambar mini

Catatan

Untuk contoh kode lengkap, lihat modul API-Example Thumbnail. Proyek sampel berbasis Java ini menunjukkan cara mengintegrasikan fitur inti ApsaraVideo Player SDK untuk Android.

Sebelum menggunakan gambar mini di ApsaraVideo Player SDK, pastikan gambar mini telah dikonfigurasi untuk video Anda. Secara khusus, buat snapshot sprite untuk video Anda. Di Konsol ApsaraVideo VOD, buat templat snapshot dan pilih Image Sprite sebagai Snapshot Type. Kemudian, buat alur kerja untuk memproses video menggunakan templat ini. Untuk informasi selengkapnya, lihat Snapshot video. Contoh kode berikut menunjukkan cara menggunakan gambar mini di ApsaraVideo Player SDK:

mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
    @Override
    public void onPrepared() {
        // 1. Buat kelas ThumbnailHelper.
        ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(URL);
        // 2. Konfigurasikan listener.
        mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
            @Override
            public void onPrepareSuccess() {
                // 4. Setelah gambar mini dimuat, Anda dapat meminta untuk memperoleh gambar mini pada posisi pemutaran tertentu.
            }
            @Override
            public void onPrepareFail() {}
        });

        mThumbnailHelper.setOnThumbnailGetListener(new ThumbnailHelper.OnThumbnailGetListener() {
            @Override
            public void onThumbnailGetSuccess(long positionMs, ThumbnailBitmapInfo thumbnailBitmapInfo) {
                // 5. Peroleh bitmap gambar mini pada posisi pemutaran tertentu.
                Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
            }
            @Override
            public void onThumbnailGetFail(long positionMs, String errorMsg) {}
        });

        // 3. Muat gambar mini.
        mThumbnailHelper.prepare();
    }
});

Peroleh log SDK

Log SDK dihasilkan saat Anda menggunakan ApsaraVideo Player SDK. Log tersebut berisi informasi detail seperti status permintaan, hasil pemanggilan, dan hasil aplikasi izin. Anda dapat melakukan debugging kode dan troubleshooting masalah dengan melihat log SDK untuk memfasilitasi pengembangan. Anda dapat menggunakan salah satu metode berikut untuk memperoleh log SDK.

Metode 1: peroleh log player SDK melalui konsol tool pengembangan

Metode ini menangkap log pada perangkat lokal Anda. Cocok untuk skenario di mana Anda dapat mereproduksi kesalahan secara andal pada perangkat Anda.

  1. Aktifkan fitur logging dan atur tingkat log.

    // Log disimpan di bawah com.cicada.player.utils.
    // Aktifkan fitur logging.
    Logger.getInstance(context).enableConsoleLog(true);
    // Atur tingkat log. Nilai default: AF_LOG_LEVEL_INFO. Untuk troubleshooting masalah, atur parameter ini ke AF_LOG_LEVEL_TRACE.
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
  2. Konfigurasikan log tingkat frame.

    // Konfigurasikan pencetakan log tingkat frame.
    // Nilai parameter value yang valid: 0 dan 1. Nilai 0 berarti dinonaktifkan. Nilai 1 berarti diaktifkan.
    Logger.getInstance(this).setLogOption(Logger.LogOption.FRAME_LEVEL_LOGGING_ENABLED,value);
    Catatan

    Fitur ini digunakan dalam skenario troubleshooting.

  3. Kumpulkan log.

    Reproduksi kesalahan dan ambil log kesalahan di konsol tool pengembangan Anda seperti Logcat.

Metode 2: Atur LogCallback untuk menerima log ApsaraVideo Player SDK

Metode ini menggunakan metode LogCallback. Cocok untuk skenario di mana kesalahan terjadi di sisi klien tetapi Anda tidak dapat mereproduksi kesalahan dan menangkap log secara andal pada perangkat Anda. Anda dapat memanggil LogCallback untuk mendengarkan ekspor log ApsaraVideo Player SDK dan secara otomatis mengekspor log kesalahan ke saluran log aplikasi Anda.

  1. Aktifkan fitur logging dan atur tingkat log.

    // Log disimpan di bawah com.cicada.player.utils.
    // Atur tingkat log. Nilai default: AF_LOG_LEVEL_INFO. Untuk troubleshooting masalah, atur parameter ini ke AF_LOG_LEVEL_TRACE.
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
    Logger.getInstance(mContext).setLogCallback(newLogger.OnLogCallback(){
            @Override
            public void onLog(Logger.LogLevel logLevel,Strings){
                // Log-log tersebut.
            }
    });
  2. Kumpulkan log.

    Setelah terjadi kesalahan, sistem secara otomatis mengekspor log kesalahan ke saluran log aplikasi Anda.

Referensi