Topik ini menjelaskan cara menggunakan fitur dasar SDK ApsaraVideo Player untuk Android, termasuk mengonfigurasi sumber pemutaran, menyesuaikan volume dan kecepatan pemutaran, serta mengganti resolusi dan track audio.
Untuk menjalankan dan menguji demo, unduh SDK ApsaraVideo Player dan ikuti petunjuk di Jalankan demo untuk mengompilasi dan menjalankannya.
Konfigurasi sumber video
SDK ApsaraVideo Player untuk Android mendukung pemutaran video sesuai permintaan (VOD) dan transmisi langsung.
Metode pemutaran VOD: VidAuth (direkomendasikan untuk pengguna ApsaraVideo VOD), VidSts, UrlSource, dan pemutaran terenkripsi.
Metode pemutaran transmisi langsung: UrlSource dan pemutaran terenkripsi.
UrlSource memutar media dari URL, sedangkan VidSts dan VidAuth memutar media berdasarkan ID media (Vid).
Untuk informasi tentang Wilayah yang didukung, lihat ID Wilayah ApsaraVideo VOD.
Pemutaran VOD
VidAuth (Direkomendasikan)
Untuk memutar video VOD menggunakan VidAuth, atur properti vid ke ID media dan properti playAuth ke kredensial pemutaran.
ID Media: Anda dapat memperoleh ID media setelah mengunggah file media. Di Konsol ApsaraVideo VOD, pilih Media Files > Audio/Video. Anda juga dapat memanggil API SearchMedia.
Kredensial pemutaran: Panggil operasi GetVideoPlayAuth untuk memperoleh kredensial pemutaran. Kami menyarankan Anda mengintegrasikan SDK sisi server ApsaraVideo VOD untuk menghindari pembuatan signature secara manual. Untuk contoh, lihat OpenAPI Explorer.
Kami merekomendasikan VidAuth dibandingkan VidSts untuk pengguna ApsaraVideo VOD karena VidAuth menyediakan kegunaan dan keamanan yang lebih baik. Untuk informasi selengkapnya, lihat Metode kredensial vs. metode STS.
Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di Konsol ApsaraVideo VOD, nama parameter default adalah MtsHlsUriToken. Untuk informasi selengkapnya, lihat Transmisi langsung parameter untuk enkripsi HLS.
Kode contoh:
VidAuth vidAuth = new VidAuth();
vidAuth.setVid("Vid"); // Wajib. ID video (VideoId).
vidAuth.setPlayAuth("<yourPlayAuth>"); // Wajib. Kredensial pemutaran dari GetVideoPlayAuth.
vidAuth.setRegion("region-id"); // Tidak digunakan lagi mulai SDK V5.5.5.0 dan versi setelahnya. Pemutar secara otomatis mengurai wilayah. Untuk versi sebelumnya, parameter ini wajib. Default: cn-shanghai.
// vidAuth.setAuthTimeout(3600); // Opsional. Atur periode validitas URL pemutaran dalam detik. Nilai ini menggantikan periode validitas yang dikonfigurasi di Konsol ApsaraVideo VOD. Default: 3600. Pastikan nilai ini lebih besar daripada durasi video agar URL tidak kedaluwarsa selama pemutaran.
// Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di Konsol ApsaraVideo VOD, parameter default adalah MtsHlsUriToken. Tentukan config dan sertakan bersama sumber data VidAuth Anda.
VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
vidAuth.setPlayerConfig(config);
aliPlayer.setDataSource(vidAuth);VidSts
Pemutaran VidSts menggunakan kredensial STS temporary alih-alih kredensial pemutaran VOD. Sebelum memutar video VOD menggunakan VidSts, peroleh token STS dan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey). Untuk informasi selengkapnya, lihat Peroleh token STS.
Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di Konsol ApsaraVideo VOD, nama parameter default adalah MtsHlsUriToken. Untuk informasi selengkapnya, lihat Transmisi langsung parameter untuk enkripsi HLS.
Kode contoh
VidSts vidSts = new VidSts();
vidSts.setVid("Vid"); // Wajib. ID video (VideoId).
vidSts.setAccessKeyId("<yourAccessKeyId>"); // Wajib. ID AccessKey temporary dari STS (AssumeRole).
vidSts.setAccessKeySecret("<yourAccessKeySecret>"); // Wajib. Rahasia AccessKey temporary dari STS (AssumeRole).
vidSts.setSecurityToken("<yourSecurityToken>"); // Wajib. Token STS dari AssumeRole.
vidSts.setRegion("RegionID"); // Wajib. Wilayah ApsaraVideo VOD. Default: cn-shanghai.
// vidSts.setAuthTimeout(3600); // Opsional. Atur periode validitas URL pemutaran dalam detik. Nilai ini menggantikan periode validitas yang dikonfigurasi di Konsol ApsaraVideo VOD. Default: 3600. Pastikan nilai ini lebih besar daripada durasi video agar URL tidak kedaluwarsa selama pemutaran.
// Jika Anda mengaktifkan transmisi langsung parameter enkripsi HLS di Konsol ApsaraVideo VOD, parameter default adalah MtsHlsUriToken. Tentukan config dan sertakan bersama sumber data vidSts Anda.
// Jika tidak diaktifkan, konfigurasi berikut tidak diperlukan.
VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
vidSts.setPlayerConfig(config);
aliPlayer.setDataSource(vidSts);UrlSource
Untuk memutar video VOD menggunakan UrlSource, berikan URL pemutaran secara langsung.
Anda dapat memanggil operasi GetPlayInfo untuk memperoleh URL pemutaran dari ApsaraVideo VOD. Kami menyarankan Anda mengintegrasikan SDK sisi server ApsaraVideo VOD. Untuk contoh, lihat OpenAPI Explorer.
Untuk file lokal, pastikan Anda memiliki izin untuk mengakses file tersebut. Gunakan path lengkap seperti
/sdcard/video/sample.mp4ataucontent://media/video/123.
UrlSource urlSource = new UrlSource();
urlSource.setUri("your-playback-url"); // Wajib. URL VOD, URL pihak ketiga, atau path file lokal.
aliPlayer.setDataSource(urlSource);Pemutaran terenkripsi
Video VOD mendukung enkripsi HLS, enkripsi privat Alibaba Cloud, dan enkripsi DRM. Untuk pemutaran, lihat Putar video terenkripsi.
Pemutaran streaming langsung
Untuk pemutaran transmisi langsung, lihat Pemutaran transmisi langsung standar.
Kontrol pemutaran
SDK ApsaraVideo Player untuk Android menyediakan metode untuk memulai, menjeda, menghentikan, dan mencari posisi pemutaran.
Persiapkan pemutar
Panggil prepare untuk memuat dan mengurai data media.
aliPlayer.prepare();Mulai pemutaran
Panggil start untuk memulai atau melanjutkan pemutaran.
aliPlayer.start();Cari ke posisi tertentu
Panggil seekTo untuk melompat ke posisi tertentu. Metode ini berguna saat pengguna menyeret bilah kemajuan atau melanjutkan pemutaran dari posisi yang disimpan.
// Tentukan waktu target dalam milidetik.
aliPlayer.seekTo(long position);Untuk mengatur posisi awal pemutaran sebelum memanggil prepare, gunakan setStartTime. Pengaturan ini hanya berlaku sekali per panggilan prepare dan secara otomatis dihapus setelahnya.
// Atur posisi awal dalam milidetik. seekMode menentukan pencarian akurat atau tidak akurat.
aliPlayer.setStartTime(time, seekMode);Jeda pemutaran
Panggil pause untuk menjeda pemutaran.
aliPlayer.pause();Hentikan pemutaran
Panggil stop untuk menghentikan pemutaran.
aliPlayer.stop();Lepaskan tampilan pemutar
Setelah menghentikan pemutaran dan sebelum menghapus instans pemutar, lepaskan tampilan pemutar untuk melepaskan sumber daya rendering dan mencegah kebocoran memori. Pilih metode pelepasan berdasarkan jenis tampilan pemutar yang Anda gunakan.
SurfaceView / TextureView
Panggil setSurface dengan null untuk melepas.
// Lepaskan tampilan pemutar
aliPlayer.setSurface(null);AliDisplayView
Panggil setDisplayView dengan null untuk melepas.
// Lepaskan tampilan pemutar
aliPlayer.setDisplayView(null);Lepaskan tampilan pemutar setelah memanggil stop dan sebelum memanggil release atau releaseAsync. Urutan lengkap mengakhiri pemutaran adalah: stop → lepaskan tampilan → release / releaseAsync.
Hapus pemutar
Anda dapat menghapus pemutar secara sinkron atau asinkron.
// Penghapusan sinkron. Memblokir hingga sumber daya pemutar dilepaskan. Secara otomatis memanggil stop.
aliPlayer.release();
// Penghapusan asinkron. Mengembalikan hasil segera. Secara otomatis memanggil stop.
aliPlayer.releaseAsync();Jika Anda memiliki persyaratan tinggi terhadap kecepatan respons UI, gunakan releaseAsync. Perhatikan hal berikut:
Jangan melakukan operasi apa pun pada objek pemutar selama proses penghapusan asinkron.
Penghapusan asinkron mencakup proses stop asinkron. Anda tidak perlu menghentikan pemutar secara manual sebelum memanggil
releaseAsync.
Monitor status pemutar
SDK ApsaraVideo Player untuk Android menyediakan listener untuk memantau event pemutaran dan perubahan status.
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 saat menggunakan pemutar.
@Override
public void onError(ErrorInfo errorInfo) {
ErrorCode errorCode = errorInfo.getCode(); // Kode kesalahan.
String errorMsg = errorInfo.getMsg(); // Pesan kesalahan.
// errorExtra menyediakan informasi kesalahan tambahan dalam string JSON. Contoh:
//{ "Url": "xxx",
// "Module": "NetWork",
// "ModuleCode": "-377",
// "ModuleMessage": "Redirect to a url that is not a media"}
// Perhatikan bahwa nilai ModuleCode tidak selalu sama dengan nilai errorCode.
String errorExtra= errorInfo.getExtra();
// Hentikan pemutar setelah terjadi kesalahan.
aliPlayer.stop();
}
});
aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
// Setelah Anda memanggil metode aliPlayer.prepare(), pemutar mulai membaca dan mengurai data. Callback ini dipicu setelah data diurai.
@Override
public void onPrepared() {
// Pemutar siap.
}
});
aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
// Callback ini dipicu setelah pemutaran selesai.
@Override
public void onCompletion() {
// Dalam kebanyakan kasus, Anda dapat memanggil metode stop untuk menghentikan pemutaran.
aliPlayer.stop();
}
});
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
// Informasi tentang pemutar, seperti posisi pemutaran 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.
// Posisi pemutaran saat ini: InfoCode.CurrentPosition.
// Posisi buffering: InfoCode.BufferedPosition.
}
});
aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
// Status loading pemutar. Anda dapat menggunakannya untuk menampilkan layar loading saat koneksi jaringan buruk.
@Override
public void onLoadingBegin() {
// Pemutar mulai memuat data. Video dan audio belum siap untuk diputar.
// Dalam kebanyakan kasus, Anda dapat menampilkan indikator loading berputar.
}
@Override
public void onLoadingProgress(int percent, float netSpeed) {
// Kemajuan loading dalam persentase dan kecepatan jaringan.
// Kecepatan jaringan adalah bidang cadangan. Nilainya 0.
}
@Override
public void onLoadingEnd() {
// Pemutar berhenti memuat data. Video dan audio siap untuk diputar.
// Dalam kebanyakan kasus, Anda dapat menyembunyikan indikator loading berputar.
}
});Monitor perubahan status pemutaran
Gunakan callback onStateChanged untuk memantau transisi status pemutar.
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;
*/
}
});Konfigurasi tampilan video
Konfigurasikan cara video diskalakan, diputar, dan dicerminkan selama pemutaran.
Mode penskalaan
SDK mendukung tiga mode penskalaan:
// Skalakan agar sesuai dengan tampilan sambil mempertahankan rasio aspek (letterboxing).
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// Skalakan agar mengisi tampilan sambil mempertahankan rasio aspek (cropping).
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// Regangkan agar mengisi tampilan. Rasio aspek tidak dipertahankan. Distorsi gambar mungkin terjadi.
aliPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);Rotasi
Panggil setRotateMode untuk memutar video. Anda dapat menanyakan sudut rotasi saat ini dengan getRotateMode.
// Tidak ada rotasi.
aliPlayer.setRotateMode(RotateMode.ROTATE_0);
// 90° searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_90);
// 180° searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_180);
// 270° searah jarum jam.
aliPlayer.setRotateMode(RotateMode.ROTATE_270);
// Tanyakan sudut rotasi saat ini.
aliPlayer.getRotateMode();Pencerminan
Panggil setMirrorMode untuk mencerminkan video. SDK mendukung pencerminan horizontal dan vertikal:
// Tidak ada pencerminan.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// Pencerminan horizontal.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// Pencerminan vertikal.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);Dapatkan informasi pemutaran
Anda dapat memperoleh kemajuan pemutaran, durasi, dan kemajuan buffering selama pemutaran.
Kemajuan pemutaran
Dalam callback onInfo, panggil getExtraValue untuk mengambil posisi pemutaran saat ini dalam milidetik.
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentPosition){
// Posisi pemutaran saat ini dalam milidetik.
long extraValue = infoBean.getExtraValue();
}
}
});Durasi total
Durasi video hanya tersedia setelah media dimuat. Panggil getDuration setelah callback onPrepared dipicu.
long duration = aliPlayer.getDuration();Durasi pemutaran aktual
Anda dapat mengambil durasi pemutaran aktual secara real time. Nilai ini mengecualikan waktu saat pemutaran dijeda atau sedang buffering.
long playedDuration = aliPlayer.getPlayedDuration(); Kemajuan buffering
Dalam callback onInfo, periksa InfoCode.BufferedPosition untuk mendapatkan kemajuan buffering saat ini.
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.BufferedPosition){
// Kemajuan buffering saat ini dalam milidetik.
long extraValue = infoBean.getExtraValue();
}
}
});Metrik rendering dan bitrate real time
Peroleh laju frame rendering, bitrate audio dan video, serta bitrate downstream jaringan secara real time.
// Laju frame rendering video. Mengembalikan nilai float.
aliPlayer.getOption(IPlayer.Option.RenderFPS);
// Bitrate video. Mengembalikan nilai float dalam bit/s.
aliPlayer.getOption(IPlayer.Option.VideoBitrate);
// Bitrate audio. Mengembalikan nilai float dalam bit/s.
aliPlayer.getOption(IPlayer.Option.AudioBitrate);
// Bitrate downstream jaringan. Mengembalikan nilai float dalam bit/s.
aliPlayer.getOption(IPlayer.Option.DownloadBitrate);Tangani event ketidaksesuaian A/V
Dalam kondisi ekstrem, seperti decoding perangkat lunak saat pemutaran 4K atau pemutaran kecepatan tinggi aliran HD H.265 pada perangkat low-end, kinerja decoding mungkin tertinggal dari kecepatan pemutaran. SDK memicu callback untuk memberi tahu Anda tentang event ini.
aliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
@Override
public void onAVNotSyncStart(int type) {
if (type == 0) {
//Kurangi kecepatan pemutaran untuk memulihkan.
if (aliPlayer.getSpeed() > 1) {
aliPlayer.setSpeed(1);
}
}
Toast.makeText(getContext(), "Ketidaksesuaian terdeteksi" , Toast.LENGTH_SHORT).show();
}
@Override
public void onAVNotSyncEnd() {
Toast.makeText(getContext(), "Ketidaksesuaian terselesaikan" , Toast.LENGTH_SHORT).show();
}
});Kontrol volume
Ubah volume
Panggil setVolume untuk mengubah volume. Nilai yang valid berkisar dari 0 hingga 2, dengan 1 sebagai volume asli. Nilai yang lebih besar dari 1 memperkuat audio dan dapat menimbulkan kebisingan. Kami menyarankan Anda tidak mengatur volume lebih besar dari 1.
// Atur volume. Nilai yang valid: 0 hingga 2.
aliPlayer.setVolume(1f);
// Dapatkan volume saat ini.
aliPlayer.getVolume();Bisukan pemutar
Panggil setMute untuk membisukan atau mengaktifkan suara pemutar.
aliPlayer.setMute(true); Atur kecepatan pemutaran
Panggil setSpeed untuk mengubah kecepatan pemutaran. Nilai yang valid berkisar dari 0.5 hingga 5. Pitch audio tetap tidak berubah pada kecepatan berbeda.
// Kecepatan umum: 0.5x, 1x, 1.5x, 2x.
aliPlayer.setSpeed(1.0f);Ganti resolusi
Untuk contoh kode detail, lihat modul MultiResolution dalam proyek API-Example.
Streaming langsung berbasis UrlSource
Untuk informasi selengkapnya, lihat Pemutaran transmisi langsung standar.
Pemutaran berbasis VidAuth atau VidSts
Jika Anda menggunakan VidAuth atau VidSts untuk pemutaran VOD, SDK secara otomatis mengambil definisi video dari ApsaraVideo VOD. Tidak diperlukan konfigurasi tambahan.
Tanyakan definisi yang tersedia
Setelah video dimuat, ambil definisi yang tersedia.
// Ambil semua track yang tersedia.
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();
//Ambil definisi yang tersedia.
for (TrackInfo trackInfo : trackInfos) {
if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
// Dapatkan definisi video.
String vodDefinition = trackInfo.getVodDefinition();
}
}Ganti definisi
Panggil selectTrack dengan indeks track untuk mengganti definisi. Dapatkan indeks dari objek TrackInfo.
aliPlayer.selectTrack(index);Dengarkan event penggantian definisi
Atur listener untuk menerima notifikasi saat penggantian definisi berhasil atau gagal.
aliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) { }
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { }
});Aktifkan penggantian cepat
Setelah Anda mengaktifkan mode penggantian cepat, panggilan ke selectTrack merespons segera tanpa menunggu buffering.
PlayerConfig config = aliPlayer.getConfig();
config.mSelectTrackBufferMode = 1;
aliPlayer.setConfig(config)Aktifkan putar ulang berulang
Panggil setLoop untuk mengaktifkan putar ulang berulang. Saat pemutaran mencapai akhir, pemutaran akan otomatis dimulai kembali dari awal.
aliPlayer.setLoop(true);Callback onInfo dipicu saat putar ulang berulang dimulai kembali.
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if (infoBean.getCode() == InfoCode.LoopingStart){
//Putar ulang berulang dimulai kembali.
}
}
});Ganti track audio
SDK ApsaraVideo Player untuk Android mendukung penggantian track audio, yang memungkinkan Anda beralih antar track audio dalam bahasa berbeda selama pemutaran.
Jenis aliran yang didukung
Anda dapat mengganti track audio pada jenis aliran berikut. Perilaku penggantian bervariasi berdasarkan jenis aliran.
Jenis aliran | Ekstensi | Jumlah bitrate | Jenis subaliran | Perilaku penggantian |
Aliran non-daftar (MP4) | .mp4 | 1 | Satu track video, beberapa track audio dan subtitle | Anda dapat beralih antar track audio. |
HLS campuran bitrate tunggal | .m3u8 | 1 | Satu track video, beberapa track audio dan subtitle | Anda dapat beralih antar track audio. |
HLS bitrate tunggal | .m3u8 | 1 | Subaliran video, audio, dan caption terpisah | Anda dapat beralih antar track audio. |
HLS campuran multi-bitrate | .m3u8 | n | Subaliran dengan bitrate berbeda, masing-masing memiliki satu video dan beberapa track audio | Anda hanya dapat beralih antar subaliran, bukan antar track audio dalam satu subaliran. |
Contoh penggunaan
Atur callback
onSubTrackReady. Callback ini biasanya dipicu sebelum callbackonPrepared.aliPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() { @Override //onSubTrackReady. Biasanya dipicu sebelum callback onPrepared. public void onSubTrackReady(MediaInfo mediaInfo) { if (mPlayerTrackFragment != null) { //mPlayerTrackFragment.showMediaInfo(); // Panggil getSubMediaInfo setelah callback ini dipicu. Memanggilnya sebelum callback ini mengembalikan hasil kosong. MediaInfo subMediaInfo = aliPlayer.getSubMediaInfo(); TrackInfos = subMediaInfo.getTrackInfos(); // Temukan track audio target dari daftar track. myTrack = myfunc(TrackInfos) } } });Beralih ke track audio target.
index = myTrack.getIndex(); aliPlayer.selectTrack(index);
Gunakan gambar mini
Untuk contoh kode detail, lihat modul Thumbnail dalam proyek API-Example.
Sebelum menggunakan gambar mini, konfigurasikan snapshot sprite untuk video Anda. Di Konsol ApsaraVideo VOD, buat templat snapshot dengan tipe snapshot Image Sprite, lalu buat alur kerja untuk memproses video. Untuk informasi selengkapnya, lihat Snapshot video.
mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
// 1. Buat instans ThumbnailHelper dengan URL snapshot sprite.
ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(URL);
// 2. Atur listener.
mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
@Override
public void onPrepareSuccess() {
// 4. Setelah gambar mini dimuat, minta gambar mini pada posisi tertentu.
}
@Override
public void onPrepareFail() {}
});
mThumbnailHelper.setOnThumbnailGetListener(new ThumbnailHelper.OnThumbnailGetListener() {
@Override
public void onThumbnailGetSuccess(long positionMs, ThumbnailBitmapInfo thumbnailBitmapInfo) {
// 5. Dapatkan bitmap gambar mini pada posisi yang ditentukan.
Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
}
@Override
public void onThumbnailGetFail(long positionMs, String errorMsg) {}
});
// 3. Muat gambar mini.
mThumbnailHelper.prepare();
}
});Dapatkan log SDK
Log SDK berisi informasi detail seperti status permintaan, hasil pemanggilan, dan permintaan izin. Anda dapat menggunakan log ini untuk debugging masalah selama pengembangan. SDK menyediakan dua metode untuk memperoleh log.
Metode 1: Lihat log di konsol tool pengembangan
Gunakan metode ini saat Anda dapat mereproduksi masalah secara andal di perangkat Anda.
Aktifkan logging dan atur tingkat log.
// Log disimpan di bawah com.cicada.player.utils. Logger.getInstance(context).enableConsoleLog(true); // Default: AF_LOG_LEVEL_INFO. Gunakan AF_LOG_LEVEL_TRACE untuk troubleshooting. Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);(Opsional) Aktifkan logging tingkat frame untuk troubleshooting.
// 0: dinonaktifkan, 1: diaktifkan. Logger.getInstance(this).setLogOption(Logger.LogOption.FRAME_LEVEL_LOGGING_ENABLED, value);Reproduksi masalah dan ambil log kesalahan dari Logcat atau konsol tool pengembangan Anda.
Metode 2: Atur LogCallback untuk menerima log secara terprogram
Gunakan metode ini saat Anda tidak dapat mereproduksi masalah secara andal di perangkat Anda. Callback ini mengekspor log ke saluran log aplikasi Anda.
Aktifkan logging dan atur tingkat log.
// Log disimpan di bawah com.cicada.player.utils. // Default: AF_LOG_LEVEL_INFO. Gunakan AF_LOG_LEVEL_TRACE untuk troubleshooting. Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO); Logger.getInstance(mContext).setLogCallback(newLogger.OnLogCallback(){ @Override public void onLog(Logger.LogLevel logLevel,Strings){ // Proses entri log. } });Setelah terjadi kesalahan, SDK secara otomatis mengekspor log kesalahan ke saluran log aplikasi Anda.
Referensi
Untuk mempelajari lebih lanjut tentang API, lihat Referensi API.
Untuk menggunakan fitur pemutar lanjutan, lihat Fitur lanjutan.
Untuk troubleshooting masalah pemutaran, lihat Troubleshoot masalah pemutaran video, FAQ pemutar Android, dan Kode kesalahan seluler.