Topik ini menjelaskan cara membuat instans pemutar Android dan memberikan contoh penggunaan fitur pemutaran dasar, seperti mengatur volume, mengaktifkan pencarian video, mendengarkan status pemutaran, mengaktifkan putar ulang berulang, mengatur kecepatan pemutaran, serta mengganti trek audio.
Untuk mencoba demo, unduh dan ikuti petunjuk di Jalankan demo untuk mengompilasi dan menjalankannya.
Atur sumber data (DataSource)
SDK ApsaraVideo Player untuk Android mendukung empat metode pemutaran video sesuai permintaan (VOD): VidAuth (direkomendasikan untuk pengguna ApsaraVideo VOD), VidSts, UrlSource, dan pemutaran terenkripsi.
SDK ApsaraVideo Player untuk Android mendukung dua metode pemutaran streaming langsung: UrlSource dan pemutaran terenkripsi.
UrlSource menggunakan URL untuk pemutaran, sedangkan VidSts dan VidAuth menggunakan ID video (VID).
Untuk informasi lebih lanjut tentang wilayah, lihat ID Wilayah untuk ApsaraVideo VOD.
Pemutaran VOD
Pemutaran VOD menggunakan VidAuth (Direkomendasikan)
Untuk memutar video VOD menggunakan VidAuth, atur properti vid pemutar ke ID audio atau video dan properti playauth ke kredensial pemutaran audio atau video.
Anda dapat memperoleh ID audio atau video dari konsol ApsaraVideo VOD setelah mengunggah file audio atau video. Untuk melakukannya, buka File Media > Audio/Video. Anda juga dapat memperoleh ID tersebut dengan memanggil operasi SearchMedia.
Anda dapat memperoleh kredensial pemutaran audio atau video dengan memanggil operasi GetVideoPlayAuth. Kami menyarankan agar Anda mengintegrasikan SDK sisi server ApsaraVideo VOD untuk memperoleh kredensial pemutaran guna menghindari kerumitan penandatanganan mandiri. Contoh cara memanggil operasi tersebut tersedia di Portal API.
Kami menyarankan pengguna ApsaraVideo VOD menggunakan metode ini karena VidAuth lebih mudah digunakan dan lebih aman dibandingkan VidSts. Untuk perbandingan mendetail, lihat Perbandingan antara kredensial pemutaran dan STS.
Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di konsol ApsaraVideo VOD, nama parameter defaultnya adalah MtsHIsUriToken. Untuk informasi lebih lanjut, lihat Transmisi langsung parameter enkripsi HLS. Atur nilai MtsHIsUriToken dalam sumber VOD seperti yang ditunjukkan pada kode berikut.
VidAuth vidAuth = new VidAuth();
vidAuth.setVid("ID video.");// Wajib diisi. ID video.
vidAuth.setPlayAuth("<yourPlayAuth>");// Wajib diisi. Kredensial pemutaran. Anda harus memanggil operasi GetVideoPlayAuth ApsaraVideo VOD untuk menghasilkan kredensial ini.
vidAuth.setRegion("Wilayah tempat ApsaraVideo VOD diaktifkan.");// Parameter ini tidak digunakan lagi mulai SDK ApsaraVideo Player versi V5.5.5.0 dan seterusnya. Anda tidak perlu mengatur wilayah karena pemutar akan menguraikannya secara otomatis. Untuk versi sebelum V5.5.5.0, parameter ini wajib diisi. Wilayah tempat ApsaraVideo VOD diaktifkan. Nilai default: cn-shanghai.
// vidAuth.setAuthTimeout(3600);// Periode validitas URL pemutaran dalam detik. Nilai ini menimpa periode validitas penandatanganan URL yang diatur di konsol ApsaraVideo VOD. Jika Anda tidak mengatur parameter ini, nilai default 3600 akan digunakan. Jika Anda mengatur parameter ini, pastikan periode validitasnya lebih lama daripada durasi video aktual agar URL pemutaran tidak kedaluwarsa sebelum pemutaran selesai.
//Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di konsol ApsaraVideo VOD dan nama parameter defaultnya adalah MtsHlsUriToken, Anda harus mengatur konfigurasi dan meneruskannya ke vid. Untuk informasi lebih lanjut, lihat kode berikut.
VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
vidAuth.setPlayerConfig(config);
aliPlayer.setDataSource(vidAuth);Pemutaran VOD menggunakan VidSts
Pemutaran VOD menggunakan VidSts berarti memutar video VOD dengan kredensial sementara Layanan Token Keamanan (STS) alih-alih kredensial pemutaran VOD. Anda harus terlebih dahulu memperoleh token STS dan pasangan AccessKey sementara (ID AccessKey dan Rahasia AccessKey). Untuk informasi lebih lanjut, lihat Memperoleh token STS.
Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di konsol ApsaraVideo VOD, nama parameter defaultnya adalah MtsHIsUriToken. Untuk informasi lebih lanjut, lihat Transmisi langsung parameter enkripsi HLS. Atur nilai MtsHIsUriToken dalam sumber VOD seperti yang ditunjukkan pada kode berikut.
VidSts vidSts = new VidSts();
vidSts.setVid("ID video.");// Wajib diisi. ID video.
vidSts.setAccessKeyId("<yourAccessKeyId>");// Wajib diisi. ID AccessKey dari pasangan AccessKey sementara. Anda harus memanggil operasi AssumeRole STS untuk menghasilkan ID AccessKey ini.
vidSts.setAccessKeySecret("<yourAccessKeySecret>");// Wajib diisi. Rahasia AccessKey dari pasangan AccessKey sementara. Anda harus memanggil operasi AssumeRole STS untuk menghasilkan Rahasia AccessKey ini.
vidSts.setSecurityToken("<yourSecurityToken>");// Wajib diisi. Token STS. Anda harus memanggil operasi AssumeRole STS untuk menghasilkan token ini.
vidSts.setRegion("Wilayah tempat ApsaraVideo VOD diaktifkan.");// Wajib diisi. Wilayah tempat ApsaraVideo VOD diaktifkan. Nilai default: cn-shanghai.
// vidSts.setAuthTimeout(3600);// Periode validitas URL pemutaran dalam detik. Nilai ini menimpa periode validitas penandatanganan URL yang diatur di konsol ApsaraVideo VOD. Jika Anda tidak mengatur parameter ini, nilai default 3600 akan digunakan. Jika Anda mengatur parameter ini, pastikan periode validitasnya lebih lama daripada durasi video aktual agar URL pemutaran tidak kedaluwarsa sebelum pemutaran selesai.
//Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di konsol ApsaraVideo VOD dan nama parameter defaultnya adalah MtsHlsUriToken, Anda harus mengatur konfigurasi dan meneruskannya ke vid. Untuk informasi lebih lanjut, 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(config);
aliPlayer.setDataSource(vidSts);Pemutaran VOD menggunakan UrlSource
Untuk memutar video VOD menggunakan UrlSource, atur properti setUrl pemutar ke URL pemutaran.
URL pemutaran di ApsaraVideo VOD: Anda dapat memanggil operasi GetPlayInfo untuk memperoleh URL tersebut. Kami menyarankan agar Anda mengintegrasikan SDK sisi server ApsaraVideo VOD untuk memperoleh URL pemutaran audio atau video guna menghindari kerumitan penandatanganan mandiri. Contoh cara memanggil operasi tersebut tersedia di Portal API.
Alamat video lokal: Pastikan Anda memiliki izin akses yang diperlukan. Anda dapat memanggil API sistem untuk memperoleh jalur lengkap file video lokal yang dapat diakses, seperti
/sdcard/xxx/xxx/xxx.mp4ataucontent://xxx/xxx/xx.mp4.
UrlSource urlSource = new UrlSource();
urlSource.setUri("URL pemutaran.");// Wajib diisi. URL pemutaran. URL dapat berupa URL VOD pihak ketiga, URL pemutaran di ApsaraVideo VOD, atau alamat video lokal.
aliPlayer.setDataSource(urlSource);Pemutaran VOD terenkripsi
Video VOD mendukung enkripsi HLS, enkripsi privat Alibaba Cloud, dan enkripsi DRM. Untuk informasi lebih lanjut tentang pemutaran terenkripsi, lihat Memutar video terenkripsi di Android.
Pemutaran streaming langsung
Untuk informasi selengkapnya, lihat Pemutaran streaming langsung standar.
Kontrol pemutaran
SDK ApsaraVideo Player untuk Android mendukung operasi seperti memulai pemutaran dari waktu tertentu, memulai, menjeda, dan menghentikan pemutaran.
Persiapkan pemutaran
Metode prepare mempersiapkan pemutar untuk pemutaran video. Contoh berikut menunjukkan cara bersiap untuk pemutaran:
aliPlayer.prepare();Mulai pemutaran
Metode start memulai pemutaran video. Contoh berikut menunjukkan cara memulai pemutaran:
aliPlayer.start();Memulai pemutaran dari waktu tertentu
Anda dapat menggunakan metode seekTo untuk memulai pemutaran dari waktu tertentu. Metode ini berguna untuk skenario di mana pengguna menyeret bilah kemajuan atau melanjutkan pemutaran dari waktu tertentu. Contoh berikut menunjukkan cara memulai pemutaran dari waktu tertentu:
// position adalah waktu tertentu dalam milidetik.
aliPlayer.seekTo(long position);Anda dapat memulai pemutaran dari posisi tertentu, yang berguna ketika pengguna ingin memulai pemutaran dari waktu tertentu. Untuk menggunakan fitur ini, Anda harus memanggil metode terkait sekali sebelum setiap pemanggilan prepare. Contoh berikut menunjukkan cara memulai pemutaran dari posisi tertentu:
// Atur waktu mulai dalam milidetik untuk pemanggilan prepare berikutnya dari pemutar. Pengaturan ini hanya berlaku untuk pemanggilan prepare berikutnya.
// Setelah Anda memanggil prepare, nilai ini secara otomatis diatur ulang menjadi nol. Jika Anda tidak memanggil metode ini lagi sebelum pemanggilan prepare berikutnya, pemutaran dimulai secara normal.
// Anda dapat mengatur seekMode ke mode akurat atau tidak akurat.
aliPlayer.setStartTime(time, seekMode);Jeda pemutaran
Metode pause menjeda pemutaran video. Contoh berikut menunjukkan cara menjeda pemutaran:
aliPlayer.pause();Lanjutkan pemutaran
Metode start juga digunakan untuk melanjutkan pemutaran video. Contoh berikut menunjukkan cara melanjutkan pemutaran:
aliPlayer.start();Hentikan pemutaran
Metode stop menghentikan pemutaran video. Contoh berikut menunjukkan cara menghentikan pemutaran:
aliPlayer.stop();Hancurkan pemain
Anda dapat menghapus instans pemutar menggunakan metode sinkron atau asinkron. Contoh berikut menunjukkan cara menghapus pemutar:
//Penghapusan sinkron. Metode stop dipanggil secara otomatis.
aliPlayer.release();
//Penghapusan asinkron. Metode stop dipanggil secara otomatis.
aliPlayer.releaseAsync(); Jika Anda memanggil metode penghapusan sinkron, metode tersebut baru akan mengembalikan nilai setelah sumber daya pemutar sepenuhnya dilepas. Jika Anda memiliki persyaratan tinggi terhadap kecepatan respons antarmuka, gunakan metode penghapusan asinkron dan perhatikan hal-hal berikut:
Jangan melakukan operasi lain pada objek pemutar selama proses penghapusan asinkron.
Anda tidak perlu menghentikan pemutar secara manual sebelum memanggil metode penghapusan asinkron karena proses tersebut sudah mencakup prosedur penghentian asinkron.
Dengarkan status pemutar
SDK ApsaraVideo Player untuk Android memungkinkan Anda mengatur pendengar pemutar dan mendengarkan status pemutar.
Atur pendengar pemutar
Pemutar mendukung pengaturan beberapa pendengar.
OnErrorListener,OnCompletionListener,OnLoadingStatusListener, danOnInfoListenersangat penting. Atur sesuai kebutuhan.
aliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
//Callback ini dipanggil jika terjadi kesalahan saat menggunakan pemutar.
@Override
public void onError(ErrorInfo errorInfo) {
ErrorCode errorCode = errorInfo.getCode(); //Kode kesalahan.
String errorMsg = errorInfo.getMsg(); //Deskripsi kesalahan.
//errorExtra menunjukkan informasi kesalahan tambahan dalam format string JSON. Contoh: Perhatikan bahwa ModuleCode tidak sepenuhnya setara dengan errorCode.
//{ "Url": "xxx",
// "Module": "NetWork",
// "ModuleCode": "-377",
// "ModuleMessage": "Redirect to a url that is not a media"}
String errorExtra= errorInfo.getExtra();
//Setelah terjadi kesalahan, Anda harus menghentikan pemutar.
aliPlayer.stop();
}
});
aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
// Setelah Anda memanggil metode aliPlayer.prepare(), pemutar mulai membaca dan mengurai data. Jika operasi berhasil, callback ini dipanggil.
@Override
public void onPrepared() {
// Persiapan selesai.
}
});
aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
//Setelah pemutaran selesai, callback ini dipanggil.
@Override
public void onCompletion() {
//Anda dapat memanggil stop untuk menghentikan pemutaran video.
aliPlayer.stop();
}
});
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
//Informasi tentang pemutar, termasuk kemajuan saat ini dan posisi buffering.
@Override
public void onInfo(InfoBean infoBean) {
InfoCode code = infoBean.getCode(); //Kode informasi.
String msg = infoBean.getExtraMsg();//Konten informasi.
long value = infoBean.getExtraValue(); //Nilai informasi.
//Kemajuan saat ini: InfoCode.CurrentPosition
//Posisi buffering saat ini: InfoCode.BufferedPosition
}
});
aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
//Status pemuatan pemutar. Saat jaringan buruk, ini digunakan untuk menampilkan layar pemuatan.
@Override
public void onLoadingBegin() {
//Pemuatan dimulai. Video dan audio belum siap untuk diputar.
//Anda dapat menampilkan lingkaran pemuatan di sini.
}
@Override
public void onLoadingProgress(int percent, float netSpeed) {
//Kemajuan pemuatan. Persentase dan kecepatan jaringan.
//Kecepatan jaringan adalah bidang cadangan dan sementara bernilai 0.
}
@Override
public void onLoadingEnd() {
//Pemuatan selesai. Video dan audio siap untuk diputar.
//Anda dapat menyembunyikan lingkaran pemuatan di sini.
}
});Mendengarkan status pemutaran
Anda dapat mendengarkan status pemutar. Parameter callback onStateChanged adalah status pemutar saat ini. Contoh berikut menunjukkan cara mendengarkan status pemutaran:
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
SDK ApsaraVideo Player untuk Android mendukung pengaturan tampilan seperti mengisi, memutar, dan mencerminkan.
Mengisi
Metode setScaleMode mengatur mode pengisian. SDK mendukung tiga mode pengisian: sesuai rasio aspek, isi rasio aspek, dan regangkan hingga penuh. Contoh berikut menunjukkan cara mengatur mode pengisian:
// Atur mode ke sesuai rasio aspek. Video diperkecil agar sesuai dalam tampilan tanpa merusak gambar.
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// Atur mode ke isi rasio aspek. Video diperbesar agar mengisi tampilan tanpa merusak gambar.
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// Atur mode ke regangkan hingga penuh. Jika rasio aspek video tidak sesuai dengan rasio aspek tampilan, gambar akan rusak.
aliPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);Putar
Metode setRotateMode memutar gambar dengan sudut tertentu. Setelah mengatur rotasi, Anda juga dapat menanyakan sudut rotasi. Contoh berikut menunjukkan cara memutar gambar:
// Putar gambar 0 derajat searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_0);
// Putar gambar 90 derajat searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_90);
// Putar gambar 180 derajat searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_180);
// Putar gambar 270 derajat searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_270);
// Peroleh sudut rotasi.
aliPlayer.getRotateMode();Cerminkan
Metode setMirrorMode menampilkan gambar dengan efek cermin yang berbeda. SDK mendukung cermin horizontal, cermin vertikal, dan tanpa cermin. Contoh berikut menunjukkan cara mengatur mode cermin:
// Atur mode ke tanpa cermin.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// Atur mode ke cermin horizontal.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// Atur mode ke cermin vertikal.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);Memperoleh informasi pemutaran
SDK ApsaraVideo Player untuk Android menyediakan akses ke informasi seperti kemajuan pemutaran saat ini, durasi pemutaran, dan kemajuan buffering.
Memperoleh kemajuan pemutaran saat ini
Anda dapat memperoleh waktu pemutaran saat ini dari callback onInfo. Untuk melakukannya, panggil metode getExtraValue. Contoh berikut menunjukkan cara memperoleh kemajuan pemutaran saat ini:
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentPosition){
// extraValue adalah kemajuan pemutaran saat ini dalam milidetik.
long extraValue = infoBean.getExtraValue();
}
}
});Memperoleh durasi pemutaran
Anda dapat memperoleh durasi total video menggunakan metode getDuration. Durasi hanya tersedia setelah video dimuat, yaitu setelah event onPrepared. Contoh berikut menunjukkan cara memperoleh durasi pemutaran:
long duration = aliPlayer.getDuration();Memperoleh durasi pemutaran aktual
Anda dapat memperoleh durasi pemutaran aktual secara real time. Durasi ini tidak termasuk waktu yang dihabiskan untuk jeda atau tersendat. Contoh berikut menunjukkan cara memperoleh durasi ini:
long duration = aliPlayer.getPlayedDuration();Memperoleh kemajuan buffering
Anda dapat memperoleh informasi kemajuan buffering video saat ini dengan memanggil metode getExtraValue dalam callback onInfo. Contoh kode berikut menunjukkan cara penggunaannya:
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.BufferedPosition){
// Parameter extraValue menunjukkan kemajuan buffering. Satuan: milidetik.
long extraValue = infoBean.getExtraValue();
}
}
});Memperoleh laju frame rendering real-time, bitrate audio dan video, serta bitrate unduh jaringan
Contohnya:
// Memperoleh laju frame rendering saat ini. Data yang dikembalikan bertipe FLOAT.
aliPlayer.getOption(IPlayer.Option.RenderFPS);
// Memperoleh bitrate video saat ini. Data yang dikembalikan bertipe FLOAT. Satuan: bit/detik.
aliPlayer.getOption(IPlayer.Option.VideoBitrate);
// Memperoleh bitrate audio saat ini. Data yang dikembalikan bertipe FLOAT. Satuan: bit/detik.
aliPlayer.getOption(IPlayer.Option.AudioBitrate);
// Memperoleh bitrate downlink jaringan saat ini. Data yang dikembalikan bertipe FLOAT. Satuan: bit/detik.
aliPlayer.getOption(IPlayer.Option.DownloadBitrate);Callback untuk desinkronisasi audio dan video
Dalam kondisi ekstrem, seperti decoding perangkat lunak video 4K atau pemutaran berkecepatan tinggi aliran H.265 definisi tinggi pada perangkat kelas bawah, kinerja decoding mungkin tidak mengimbangi kecepatan pemutaran. Dalam kasus seperti itu, callback dipicu. Contoh berikut menunjukkan callback tersebut:
aliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
@Override
public void onAVNotSyncStart(int type) {
if (type == 0) {
// Atur kecepatan pemutaran yang lebih rendah.
if (aliPlayer.getSpeed() > 1) {
aliPlayer.setSpeed(1);
}
}
Toast.makeText(getContext(), "Desinkronisasi dimulai" , Toast.LENGTH_SHORT).show();
}
@Override
public void onAVNotSyncEnd() {
Toast.makeText(getContext(), "Desinkronisasi berakhir" , Toast.LENGTH_SHORT).show();
}
});Atur volume
Pengaturan volume mencakup penyesuaian volume dan membisukan pemutaran.
Sesuaikan volume
Anda dapat menyesuaikan volume menggunakan metode setVolume. Volume dapat diatur dari 0 hingga 2. Jika volume lebih besar dari 1, kebisingan mungkin terjadi. Kami menyarankan agar Anda tidak mengatur volume ke nilai lebih dari 1. Setelah mengatur volume, Anda juga dapat mengambil tingkat volume saat ini. Contoh berikut menunjukkan cara menyesuaikan volume:
// Volume adalah bilangan real dari 0 hingga 2.
aliPlayer.setVolume(1f);
// Memperoleh volume.
aliPlayer.getVolume();Membisukan pemutaran
Anda dapat membisukan video menggunakan metode setMute. Contoh berikut menunjukkan cara membisukan pemutaran:
aliPlayer.setMute(true);Atur kecepatan pemutaran
SDK ApsaraVideo Player untuk Android menyediakan fitur untuk mengatur kecepatan pemutaran. Dengan memanggil metode setSpeed, Anda dapat memutar video dengan kecepatan 0,5× hingga 5× kecepatan aslinya sambil mempertahankan pitch asli. Contoh berikut menunjukkan cara mengatur kecepatan pemutaran:
// Atur kecepatan pemutaran. Rentang kecepatan yang didukung adalah 0,5 hingga 5,0. Kami menyarankan agar Anda mengatur kecepatan dalam kelipatan 0,5, misalnya 0,5; 1,0; dan 1,5.
aliPlayer.setSpeed(1.0f);Atur beberapa resolusi
Untuk contoh kode mendetail, lihat modul MultiResolution di API-Example. Proyek ini adalah proyek contoh berbasis Java untuk SDK ApsaraVideo Player untuk Android yang membantu pengembang mengintegrasikan fitur inti SDK dengan cepat.
Streaming langsung dengan UrlSource
Untuk informasi selengkapnya, lihat Pemutaran streaming langsung standar.
Pemutaran VOD dengan Vid (VidAuth atau VidSts)
Jika Anda menggunakan pemutaran berbasis Vid (VidAuth atau VidSts), tidak diperlukan pengaturan tambahan. SDK ApsaraVideo Player untuk Android memperoleh daftar resolusi dari ApsaraVideo VOD.
Memperoleh resolusi
Setelah video dimuat, Anda dapat memperoleh resolusi video.
//Memperoleh semua informasi aliran aset media.
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();
//Telusuri aliran dan peroleh resolusi.
for (TrackInfo trackInfo : trackInfos) {
if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
//Memperoleh resolusi video.
String vodDefinition = trackInfo.getVodDefinition();
}
}Mengganti resolusi
Anda dapat memanggil metode selectTrack untuk mengganti resolusi dengan meneruskan indeks TrackInfo yang sesuai sebagai parameter.
aliPlayer.selectTrack(index);Notifikasi untuk pengalihan resolusi
SDK menyediakan callback untuk pengalihan resolusi yang berhasil dan gagal.
aliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) { }
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { }
});Mode pengalihan cepat
Setelah Anda mengaktifkan mode pengalihan cepat, pemanggilan manual ke selectTrack akan menerima respons cepat.
PlayerConfig config = aliPlayer.getConfig();
config.mSelectTrackBufferMode = 1;
aliPlayer.setConfig(config)Aktifkan putar ulang berulang
SDK ApsaraVideo Player untuk Android menyediakan fitur untuk mengaktifkan putar ulang berulang video. Anda dapat memanggil setLoop untuk mengaktifkan putar ulang berulang. Setelah pemutaran selesai, video akan otomatis mulai memutar dari awal. Contoh berikut menunjukkan cara mengaktifkan putar ulang berulang:
aliPlayer.setLoop(true);Notifikasi untuk awal putaran dikirim melalui callback onInfo. Contoh berikut menunjukkan callback tersebut:
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if (infoBean.getCode() == InfoCode.LoopingStart){
// Dengarkan event saat putar ulang berulang dimulai.
}
}
});Beralih trek audio
SDK ApsaraVideo Player untuk Android menyediakan fitur untuk mengganti trek audio, yang berlaku untuk skenario di mana pengguna dapat beralih antar bahasa berbeda saat menonton video dengan audio multi-bahasa.
Petunjuk
Saat ini, SDK mendukung penggantian antar aliran audio untuk aliran non-playlist (seperti aliran MP4), aliran HLS campuran bitrate tunggal, dan aliran HLS non-campuran bitrate tunggal. SDK juga mendukung penggantian antar substream untuk aliran HLS campuran multi-bitrate. Tabel berikut menjelaskan jenis aliran video.
Jenis aliran video | Akhiran aliran video | Jumlah bitrate | Jumlah file sub-m3u8 | Tipe subaliran | Petunjuk pengalihan |
Aliran non-playlist (seperti aliran MP4) | .mp4 | 1 | - | Aliran pemutaran berisi satu aliran video dan mungkin berisi beberapa aliran audio serta aliran takarir. | Pengalihan antar beberapa aliran audio didukung. |
Aliran HLS campuran bitrate tunggal | .m3u8 | 1 | 1 | Aliran pemutaran berisi satu aliran video dan mungkin berisi beberapa aliran audio serta aliran takarir. | Pengalihan antar beberapa aliran audio didukung. |
Aliran HLS non-campuran laju tunggal | .m3u8 | 1 | n | m3u8. Setiap subaliran hanya dapat berupa aliran video, aliran audio, atau aliran teks. | Pengalihan antar beberapa aliran audio didukung. |
Aliran HLS campuran multi-bitrate | .m3u8 | n | n | m3u8. Setiap substream berisi satu aliran video dan mungkin berisi beberapa aliran audio serta aliran takarir. Substream berbeda memiliki bitrate berbeda. | Saat ini, hanya pengalihan antar subaliran yang didukung. Pengalihan antar beberapa aliran audio dalam satu subaliran tidak didukung. |
Contoh
Atur callback.
aliPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() { @Override //Callback onSubTrackReady biasanya dipicu sebelum callback prepare. public void onSubTrackReady(MediaInfo mediaInfo) { if (mPlayerTrackFragment != null) { //mPlayerTrackFragment.showMediaInfo(); //Anda dapat memanggil getSubMediaInfo untuk memperoleh informasi MediaInfo. Anda hanya dapat memanggil metode ini setelah menerima callback onSubTrackReady. Jika tidak, nilai null akan dikembalikan. MediaInfo subMediaInfo = aliPlayer.getSubMediaInfo(); TrackInfos = subMediaInfo.getTrackInfos(); //Tentukan trek yang akan dipilih. myTrack = myfunc(TrackInfos) } } });Alihkan trek audio.
index = myTrack.getIndex(); aliPlayer.selectTrack(index);
Gunakan gambar mini
Untuk contoh kode mendetail, lihat modul Thumbnail di API-Example. Proyek ini adalah proyek contoh berbasis Java untuk SDK ApsaraVideo Player untuk Android yang membantu pengembang mengintegrasikan fitur inti SDK dengan cepat.
Sebelum menggunakan gambar mini di SDK ApsaraVideo Player, pastikan Anda telah mengonfigurasi gambar mini untuk video tersebut. Ini mengharuskan sprite telah dibuat untuk video tersebut. Di konsol ApsaraVideo VOD, buat templat tangkapan layar sprite. Kemudian, gunakan alur kerja untuk memproses video dengan templat tangkapan layar sprite guna menghasilkan data sprite. Untuk informasi lebih lanjut, lihat Tangkapan layar video. Contoh berikut menunjukkan cara menggunakan gambar mini di SDK ApsaraVideo Player:
mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
//1. Peroleh URL gambar mini.
List<Thumbnail> thumbnailList = mAliPlayer.getMediaInfo().getThumbnailList();
//2. Buat kelas helper gambar mini.
ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(thumbnailList.get(0).mURL);
//3. Atur pendengar.
mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
@Override
public void onPrepareSuccess() {
//5. Setelah gambar mini dimuat, Anda dapat meminta gambar mini pada posisi tertentu.
}
@Override
public void onPrepareFail() {}
});
mThumbnailHelper.setOnThumbnailGetListener(new ThumbnailHelper.OnThumbnailGetListener() {
@Override
public void onThumbnailGetSuccess(long positionMs, ThumbnailBitmapInfo thumbnailBitmapInfo) {
//6. Peroleh bitmap gambar mini pada posisi tertentu.
Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
}
@Override
public void onThumbnailGetFail(long positionMs, String errorMsg) {}
});
//4. Muat gambar mini.
mThumbnailHelper.prepare();
}
});Catatan: Jika Anda menggunakan pemutaran berbasis URL, AliPlayer mungkin tidak dapat memperoleh ThumbnailList. Tentukan URL gambar mini secara langsung.
mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
//1. Buat kelas helper gambar mini.
ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(URL);
//2. Atur pendengar.
mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
@Override
public void onPrepareSuccess() {
//4. Setelah gambar mini dimuat, Anda dapat meminta gambar mini pada posisi 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 tertentu.
Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
}
@Override
public void onThumbnailGetFail(long positionMs, String errorMsg) {}
});
//3. Muat gambar mini.
mThumbnailHelper.prepare();
}
});Memperoleh log SDK
Selama waktu proses SDK ApsaraVideo Player, informasi log mendetail dihasilkan, mencakup status permintaan jaringan, hasil panggilan sistem, dan permintaan izin. Hal ini membantu pengembang melakukan debug kode atau memecahkan masalah dan meningkatkan efisiensi pengembangan.
Metode 1: Dapatkan log SDK dari konsol alat pengembangan Anda
Metode ini berlaku untuk skenario di mana Anda dapat mereproduksi masalah secara lokal dan mengumpulkan log.
Aktifkan pencatatan log dan atur tingkat log.
// Logger ada di com.cicada.player.utils. // Aktifkan logging. Logger.getInstance(context).enableConsoleLog(true); // Atur tingkat log. Nilai default: AF_LOG_LEVEL_INFO. Untuk memecahkan masalah, Anda dapat mengatur tingkat ke AF_LOG_LEVEL_TRACE. Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);Atur pencatatan log tingkat frame.
//Atur pencetakan log tingkat frame. //Nilai 0 untuk opsi menunjukkan fitur dinonaktifkan. Nilai 1 menunjukkan fitur diaktifkan. Logger.getInstance(this).setLogOption(Logger.LogOption.FRAME_LEVEL_LOGGING_ENABLED,value);CatatanFitur pencatatan log tingkat frame terutama digunakan untuk memecahkan masalah.
Kumpulkan log.
Setelah Anda mereproduksi masalah, Anda dapat memperoleh log dari konsol alat pengembangan Anda, seperti Logcat.
Metode 2: Gunakan LogCallback untuk mendengarkan log keluaran SDK
Metode ini berlaku untuk skenario di mana masalah terjadi di sisi pengguna dan Anda tidak dapat mereproduksinya secara lokal untuk mengumpulkan log. Anda dapat menggunakan LogCallback untuk mendengarkan log keluaran SDK dan secara otomatis mengeluarkannya ke saluran log aplikasi Anda.
Aktifkan pencatatan log dan atur tingkat log.
// Logger ada di com.cicada.player.utils. // Atur tingkat log. Nilai default: AF_LOG_LEVEL_INFO. Untuk memecahkan masalah, Anda dapat mengatur tingkat 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 } });Kumpulkan log.
Setelah Anda mereproduksi masalah, log secara otomatis dikeluarkan ke file log aplikasi Anda melalui saluran log aplikasi Anda.
Referensi
Untuk deskripsi API mendetail, lihat Referensi API.
Untuk informasi selengkapnya tentang cara menggunakan fitur lanjutan, lihat Fitur lanjutan.
Untuk masalah umum dan solusi pengecualian pemutaran, lihat Memecahkan masalah pengecualian pemutaran, FAQ tentang ApsaraVideo Player untuk Android, dan Kode kesalahan untuk perangkat seluler.