Gunakan fitur lanjutan Android Player SDK, termasuk pemutaran daftar putar, subtitle, unduhan video, dan pemutaran terenkripsi. Referensi API.
Untuk menjalankan demo, unduh dan ikuti petunjuk di Jalankan demo untuk mengompilasi dan menjalankan demo.
Verifikasi lisensi Edisi Profesional
Beberapa fitur pemutar memerlukan lisensi Edisi Profesional. Periksa fitur yang didukung di Detail fitur Player SDK. Untuk menggunakan fitur-fitur ini, selesaikan otorisasi seperti yang dijelaskan di Dapatkan lisensi player SDK.
Tetapkan listener sebelum aplikasi dimulai atau sebelum memanggil API pemutar apa pun:
import com.aliyun.private_service.PrivateService;
PrivateService.setOnPremiumLicenseVerifyCallback(new PrivateService.OnPremiumLicenseVerifyCallback() {
@Override
public void onPremiumLicenseVerifyCallback(PrivateService.PremiumBizType type, boolean isValid, String errorMsg) {
Log.d(TAG, "onPremiumLicenseVerifyCallback: " + type + " isValid: " + isValid + " errorMsg: " + errorMsg);
}
});
PremiumBizType mencacahkan fitur profesional. Saat Anda menggunakan fitur terkait, pemutar memverifikasi lisensi dan mengembalikan hasil melalui callback ini. Jika isValid bernilai false, errorMsg berisi alasannya.
Pemutaran
Pemutaran daftar putar
Android Player SDK menyediakan pemutaran daftar putar dengan preload untuk secara signifikan meningkatkan kecepatan startup video pendek.
Untuk pengalaman pemutaran daftar putar yang lebih baik, gunakan solusi drama pendek. Pengembangan klien drama pendek.
Pemutaran video dengan transparansi
Ikhtisar fitur
ApsaraVideo Player SDK mendukung rendering saluran alfa untuk animasi hadiah transparan. Dalam skenario streaming langsung, animasi ini diputar tanpa menghalangi konten langsung.
Batasan
SDK terintegrasi versi 6.8.0 atau lebih baru, atau Player SDK versi 6.9.0 atau lebih baru, mendukung rendering transparan.
Manfaat
Video MP4 dengan transparansi menawarkan kualitas animasi lebih baik, ukuran file lebih kecil, kompatibilitas lebih tinggi, dan efisiensi pengembangan lebih baik dibandingkan APNG atau IXD.
-
Kualitas animasi lebih baik: MP4 mempertahankan detail dan warna asli lebih akurat daripada APNG atau IXD.
-
Ukuran file lebih kecil: MP4 melakukan kompresi lebih efisien, meningkatkan kecepatan pemuatan dan mengurangi konsumsi bandwidth.
-
Kompatibilitas lebih tinggi: MP4 didukung secara universal di berbagai perangkat dan browser.
-
Efisiensi pengembangan lebih tinggi: Developer tidak perlu mengimplementasikan logika parsing dan rendering yang kompleks.
Subtitle eksternal
Untuk contoh kode terperinci, lihat modul API-Example Demonstrasi dan pengalihan subtitle eksternal (ExternalSubtitle). Proyek contoh berbasis Java ini untuk ApsaraVideo Player SDK untuk Android membantu developer menguasai fitur integrasi inti SDK dengan cepat.
Android Player SDK mendukung penambahan dan pengalihan subtitle eksternal dalam format SRT, SSA, ASS, dan VTT.
-
Buat tampilan untuk menampilkan subtitle.
Buat tampilan berbeda berdasarkan format subtitle.
Saat mengintegrasikan player V7.6.0 atau lebih baru dan menggunakan
VttSubtitleViewuntuk menampilkan subtitle SRT dan VTT, tetapkan listener berikut:// Diperlukan untuk player 7.6.0 dan lebih baru. mAliPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() { @Override public void onVideoSizeChanged(int width, int height) { int viewWidth = getWidth(); int viewHeight = getHeight(); IPlayer.ScaleMode mode = mVideoListPlayer.getScaleMode(); SubTitleBase.VideoDimensions videoDimensions = SubTitleBase.getVideoDimensionsWhenRenderChanged(width, height, viewWidth, viewHeight, mode); vttSubtitleView.setVideoRenderSize(videoDimensions.videoDisplayWidth, videoDimensions.videoDisplayHeight); } }); -
Tambahkan subtitle.
PentingTetapkan file subtitle dalam callback
onPrepared.mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() { @Override public void onPrepared() { // Tetapkan subtitle (harus dilakukan dalam onPrepared). mAliPlayer.addExtSubtitle(EXT_SUBTITLE_URL); } }); -
Tetapkan listener terkait subtitle.
Subtitle eksternal (rendering kustom berdasarkan komponen rendering)
Dukungan penuh untuk subtitle eksternal WebVTT diimplementasikan menggunakan VttSubtitleView dan WebVttResolver, memungkinkan kustomisasi fleksibel ukuran font, warna, dan font tertentu untuk subtitle.
Skenario penerapan:
-
Menyesuaikan gaya subtitle WebVTT.
-
Mengintegrasikan ApsaraVideo Player SDK versi 7.11.0 atau lebih baru.
Prasyarat:
-
File font (.ttf) ditempatkan di direktori
assets/fonts/proyek Anda. -
minSdk proyek ≥ 21 (direkomendasikan).
-
Listener subtitle ditambahkan dan konten WebVTT dapat diperoleh.
-
Buat
CustomStyleWebVttResolverdan implementasikanWebVttResolver.public class CustomStyleWebVttResolver extends WebVttResolver { // Implementasikan metode pembuatan. public CustomStyleWebVttResolver(Context context) { super(context); // Inisialisasi font dan sumber daya lainnya di sini nanti. } } -
Override
applyTextSpansuntuk menyesuaikan gaya.Metode ini dipanggil setelah kelas induk mengurai gaya dasar, memungkinkan pemrosesan sekunder subtitle.
-
Metode 1: Modifikasi
VttContentAttributedan panggil metode kelas induk./** * Override logika penerapan gaya teks untuk mengimplementasikan efek gaya kustom. * Metode ini dipanggil setelah kelas induk mengurai gaya dasar, memungkinkan pemrosesan sekunder ukuran font, warna, dan atribut lainnya. * * @param spannableStringBuilder Digunakan untuk membangun teks bergaya. * @param vttContentAttribute Objek atribut gaya untuk segmen teks saat ini (termasuk font, warna, ukuran, dll.). * @param start Posisi awal untuk penerapan gaya (inklusif). * @param end Posisi akhir untuk penerapan gaya (eksklusif). */ @Override protected void applyTextSpans(SpannableStringBuilder spannableStringBuilder, VttContentAttribute vttContentAttribute, int start, int end) { // Tetapkan. // Simpan ukuran font asli (dalam px) untuk penyesuaian nanti. // Ukuran font default adalah 0,0533f kali tinggi video. double originalFontSizePx = vttContentAttribute.fontSizePx; // Gandakan ukuran font. vttContentAttribute.fontSizePx = originalFontSizePx * 2; // Ubah warna font menjadi merah. vttContentAttribute.mPrimaryColour = Color.argb(255, 255, 0, 0); // Panggil metode kelas induk untuk menerapkan teks. super.applyTextSpans(spannableStringBuilder, vttContentAttribute, start, end); } -
Langsung operasikan
SpannableStringBuilderuntuk memodifikasi gaya WebVTT secara langsung.PentingMetode ini dapat menyebabkan hilangnya gaya WebVTT asli.
/** * Override logika penerapan gaya teks untuk mengimplementasikan efek gaya kustom. * Metode ini dipanggil setelah kelas induk mengurai gaya dasar, memungkinkan pemrosesan sekunder ukuran font, warna, dan atribut lainnya. * * @param spannableStringBuilder Digunakan untuk membangun teks bergaya. * @param vttContentAttribute Objek atribut gaya untuk segmen teks saat ini (termasuk font, warna, ukuran, dll.). * @param start Posisi awal untuk penerapan gaya (inklusif). * @param end Posisi akhir untuk penerapan gaya (eksklusif). */ @Override protected void applyTextSpans(SpannableStringBuilder spannableStringBuilder, VttContentAttribute vttContentAttribute, int start, int end) { // Tetapkan warna font. spannableStringBuilder.setSpan( new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); // Tetapkan ukuran absolut. spannableStringBuilder.setSpan( new AbsoluteSizeSpan(20), // Satuan: px. start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); // Tetapkan ukuran relatif. // spannableStringBuilder.setSpan( // new RelativeSizeSpan(2.0f), // Kelipatan ukuran font default TextView. // start, end, // Spanned.SPAN_EXCLUSIVE_EXCLUSIVE // ); }
-
-
Tetapkan font kustom (Typeface).
-
Muat font kustom dari direktori
asset/fonts/.private Typeface mTypeface; public CustomStyleWebVttResolver(Context context) { super(context); initializeFonts(context); } private void initializeFonts(Context context) { try { // Muat font dari assets/fonts/. mTypeface = Typeface.createFromAsset(context.getAssets(), "fonts/LongCang.ttf"); } catch (Exception e) { Log.e("Font", "Gagal memuat font", e); mTypeface = Typeface.DEFAULT; // Cadangan aman. } } -
Terapkan font kustom ke subtitle.
@Override protected void applyTextSpans(SpannableStringBuilder builder, VttContentAttribute attr, int start, int end) { // Terapkan font kustom. // Harus ditempatkan setelah super.applyTextSpans() untuk mengganti font yang mungkin ditetapkan oleh kelas induk. // Memanggil super.applyTextSpans() bersifat opsional. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { builder.setSpan(new TypefaceSpan(mTypeface), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } else { builder.setSpan(new CustomTypefaceSpan(mTypeface), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } }Kompatibilitas dengan versi Android lama: Karena
TypefaceSpandi Android P (API 28) dan sebelumnya tidak mendukung langsung melewatkan objekTypeface, Anda perlu membuatMetricAffectingSpankustom./** * Kelas Typeface Span kustom. * Mewarisi dari MetricAffectingSpan untuk menerapkan Typeface dengan benar selama penggambaran dan pengukuran teks. * Menyelesaikan masalah di mana TypefaceSpan standar tidak dapat langsung menggunakan objek Typeface. */ private static class CustomTypefaceSpan extends MetricAffectingSpan { // Font kustom yang akan diterapkan. private final Typeface typeface; /** * Konstruktor. * * @param typeface Objek Typeface yang akan diterapkan (tidak boleh null). */ public CustomTypefaceSpan(Typeface typeface) { this.typeface = typeface; } /** * Perbarui status penggambaran teks. * Dipanggil selama penggambaran teks aktual untuk menetapkan font cat. * * @param tp Objek TextPaint yang digunakan untuk menggambar teks. */ @Override public void updateDrawState(TextPaint tp) { tp.setTypeface(typeface); } /** * Perbarui status pengukuran teks. * Dipanggil selama perhitungan tata letak teks (misalnya, lebar, jeda baris) untuk memastikan pengukuran sesuai dengan penggambaran aktual. * * @param p Objek TextPaint yang digunakan untuk mengukur teks. */ @Override public void updateMeasureState(TextPaint p) { p.setTypeface(typeface); } }
-
-
Integrasikan dengan pemutar.
-
Inisialisasi tampilan subtitle.
// Inisialisasi subtitleView. private void initSubtitleView() { // Dapatkan konteks. Context context = getContext(); // Buat CustomStyleWebVttResolver. CustomStyleWebVttResolver mResolver = new CustomStyleWebVttResolver(context); // Buat VttSubtitleView dan teruskan CustomStyleWebVttResolver. VttSubtitleView mVttSubtitleView = new VttSubtitleView(context, mResolver); // Tambahkan ke wadah video. rootView.addView(mVttSubtitleView); } -
Ikat callback subtitle eksternal.
// Tetapkan listener subtitle. mAliPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() { @Override public void onSubtitleExtAdded(int trackIndex, String url) { mAliPlayer.selectExtSubtitle(trackIndex, true); } @Override public void onSubtitleShow(int trackIndex, long id, String data) { if (mVttSubtitleView != null) { // Tampilkan subtitle. mVttSubtitleView.show(id, data); } } @Override public void onSubtitleHide(int trackIndex, long id) { // Sembunyikan subtitle. mVttSubtitleView.dismiss(id); } @Override public void onSubtitleHeader(int i, String header) { if (!TextUtils.isEmpty(header)) { // Terapkan gaya header WebVTT. mVttSubtitleView.setVttHeader(header); } } });
-
Pemutaran hanya audio
Nonaktifkan pemutaran video untuk mencapai pemutaran hanya audio. Konfigurasikan PlayerConfig sebelum memanggil prepare.
PlayerConfig config = aliPlayer.getConfig();
config.mDisableVideo = true; // Aktifkan pemutaran hanya audio.
aliPlayer.setConfig(config);
Pengalihan decoder perangkat lunak/perangkat keras
Alihkan metode decoding sebelum pemutaran dimulai. Pengalihan selama pemutaran tidak berpengaruh.
Android Player SDK menyediakan decoding perangkat keras H.264 dan H.265 dengan sakelar enableHardwareDecoder. Decoding perangkat keras diaktifkan secara default dan secara otomatis kembali ke decoding perangkat lunak jika inisialisasi gagal. Contoh:
// Aktifkan decoding perangkat keras. Diaktifkan secara default.
aliPlayer.enableHardwareDecoder(true);
Jika pemutar secara otomatis beralih dari decoding perangkat keras ke perangkat lunak, hal ini memicu callback onInfo. Contoh:
mApsaraPlayerActivity.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if (infoBean.getCode() == InfoCode.SwitchToSoftwareVideoDecoder) {
// Beralih ke decoding perangkat lunak.
}
}
});
Pemutaran adaptif H.265
Jika perangkat berada dalam daftar hitam decoding perangkat keras H.265 berbasis cloud atau decoding perangkat keras H.265 gagal, degradasi adaptif dipicu: jika ada aliran cadangan H.264, pemutar menggunakannya; jika tidak, pemutar menurunkan ke decoding perangkat lunak H.265.
-
Fitur ini hanya diaktifkan setelah Anda mengaktifkan layanan bernilai tambah decoding adaptif terintegrasi klien-cloud. Anda perlu mengirimkan formulir Yida untuk mengajukan otorisasi lisensi.
-
Layanan bernilai tambah decoding adaptif terintegrasi klien-cloud mencakup: 1. Pengiriman dinamis data kompatibilitas decoding perangkat keras berbasis cloud; 2. Degradasi adaptif aliran H.265 ke aliran H.264.
-
SDK tetap memiliki kemampuan untuk secara otomatis beralih ke decoding perangkat lunak saat decoding perangkat keras gagal, bahkan tanpa mengaktifkan layanan bernilai tambah.
Contoh pengaturan aliran cadangan:
// Pertahankan Map di lapisan aplikasi untuk menyimpan pasangan kunci-nilai URL asli dan URL cadangan. Saat beralih, kueri URL cadangan dalam Map berdasarkan URL asli.
AliPlayerGlobalSettings.setAdaptiveDecoderGetBackupURLCallback(new AliPlayerGlobalSettings.OnGetBackupUrlCallback() {
@Override
public String getBackupUrlCallback(int oriBizScene, int oriCodecType, String original_url) {
String kurl = original_url;
if (!H265toH264Map.get(kurl).isEmpty()) {
return H265toH264Map.get(kurl);
} else {
return "";
}
}
});
Pengalihan definisi video adaptif berbasis jaringan
-
Aliran video bitrate adaptif HLS dapat dihasilkan melalui kelompok template pengemasan dan transkoding video di ApsaraVideo VOD. Untuk operasi terperinci, lihat Konfigurasi bitrate adaptif untuk VOD.
-
Untuk aliran adaptif yang dihasilkan oleh transkoding ApsaraVideo VOD, jika Anda menggunakan pemutaran Vid, Anda harus menentukan daftar definisi pemutaran default sebagai
DEFINITION_AUTOuntuk mendapatkan dan memutar aliran video adaptif. Jika tidak, pemutar memilih aliran video definisi rendah sesuai logika default. Untuk urutan pemutaran definisi default, lihat Definisi mana yang diputar oleh player SDK secara default saat beberapa definisi ditranskode?. Contoh penentuan daftar definisi untuk pemutaran VidAuth:VidAuth vidAuth = new VidAuth(); List<Definition> list = new ArrayList<>(); list.add(Definition.DEFINITION_AUTO); vidAuth.setDefinition(list);
Android player SDK mendukung aliran video bitrate adaptif HLS dan DASH. Setelah prepare berhasil, Anda dapat memperoleh informasi tentang setiap aliran bitrate, yaitu TrackInfo, dengan memanggil getMediaInfo. Contoh:
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();
Selama pemutaran, Anda dapat mengalihkan aliran bitrate yang sedang diputar dengan memanggil metode selectTrack pemutar. Saat nilainya AUTO_SELECT_INDEX, hal ini mengaktifkan pengalihan bitrate adaptif. Contoh:
int index = trackInfo.getIndex();
// Alihkan bitrate.
aliPlayer.selectTrack(index);
// Alihkan bitrate dan aktifkan pengalihan adaptif.
aliPlayer.selectTrack(TrackInfo.AUTO_SELECT_INDEX);
Hasil pengalihan dikembalikan melalui callback OnTrackChangedListener (tetapkan sebelum memanggil selectTrack). Contoh:
aliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) {
// Pengalihan berhasil.
}
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
// Pengalihan gagal. Dapatkan alasan kegagalan dari errorInfo.getMsg().
}
});
Opsi: Sebelum memanggil metode selectTrack pemutar untuk beralih ke bitrate adaptif, Anda dapat menetapkan batas atas untuk pengalihan bitrate adaptif (ABR) dalam konfigurasi untuk menghindari pengalihan otomatis ke bitrate yang tidak diinginkan. Contoh: (Kami merekomendasikan memanggil kode berikut sebelum pemutar memanggil metode prepare atau sebelum pemutar daftar putar memanggil metode moveTo agar berlaku.)
PlayerConfig config = aliPlayer.getConfig();
config.mMaxAllowedAbrVideoPixelNumber = 921600; // Tetapkan batas atas jumlah piksel untuk definisi ABR menjadi 921600 (lebar × tinggi = 1280 × 720), sehingga ABR memungkinkan pengalihan ke definisi dengan jumlah piksel ≤ nilai ini.
aliPlayer.setConfig(config);
Tangkapan layar
Android player SDK menyediakan fitur tangkapan layar untuk video saat ini, diimplementasikan oleh antarmuka snapshot. Fitur ini menangkap data asli dan mengembalikannya sebagai bitmap. Antarmuka callback adalah OnSnapShotListener. Contoh:
// Tetapkan callback tangkapan layar.
aliPlayer.setOnSnapShotListener(new OnSnapShotListener(){
@Override
public void onSnapShot(Bitmap bm, int with, int height){
// Dapatkan bitmap dan dimensi gambar.
}
});
// Tangkap frame pemutaran saat ini.
aliPlayer.snapshot();
Pemutaran pratinjau
Dengan mengonfigurasi ApsaraVideo VOD, Android player SDK dapat mengimplementasikan pemutaran pratinjau, mendukung metode pemutaran VidSts dan VidAuth (VidAuth direkomendasikan untuk VOD). Untuk instruksi konfigurasi dan penggunaan, lihat Pratinjau video.
Setelah mengonfigurasi pemutaran pratinjau, tetapkan durasi pratinjau untuk pemutar menggunakan metode VidPlayerConfigGen.setPreviewTime(). Contoh untuk pemutaran VidSts:
VidSts vidSts = new VidSts;
....
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
configGen.setPreviewTime(20);// Pratinjau 20 detik.
vidSts.setPlayConfig(configGen);// Tetapkan untuk sumber pemutaran.
...
Saat durasi pratinjau ditetapkan, server hanya mengembalikan konten dalam periode pratinjau alih-alih video lengkap saat diputar melalui Android player SDK.
-
VidPlayerConfigGen mendukung parameter permintaan server. Deskripsi parameter permintaan.
-
Format video FLV dan MP3 tidak mendukung pemutaran pratinjau.
Tetapkan daftar hitam
Android player SDK menyediakan mekanisme daftar hitam decoding perangkat keras. Untuk perangkat yang secara eksplisit tidak dapat menggunakan decoding perangkat keras, decoding perangkat lunak digunakan secara langsung untuk menghindari operasi yang tidak efektif. Contoh:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.model="Lenovo K320t";
AliPlayerFactory.addBlackDevice(BlackType.HW_Decode_H264 ,deviceInfo );
Daftar hitam secara otomatis tidak berlaku setelah aplikasi keluar.
Tetapkan Referer
Tetapkan Referer permintaan menggunakan PlayerConfig. Dikombinasikan dengan daftar hitam/daftar putih Referer di konsol, hal ini mengontrol izin akses. Contoh:
// Dapatkan konfigurasi terlebih dahulu.
PlayerConfig config = aliPlayer.getConfig();
// Tetapkan referer, misalnya: http://example.aliyundoc.com. (Catatan: Sertakan bagian protokol saat menetapkan referer.)
config.mReferrer = referrer;
....// Pengaturan lainnya.
// Tetapkan konfigurasi untuk pemutar.
aliPlayer.setConfig(config);
Tetapkan UserAgent
Tetapkan UserAgent permintaan menggunakan PlayerConfig. Pemutar menyertakan UA dalam permintaan. Contoh:
// Dapatkan konfigurasi terlebih dahulu.
PlayerConfig config = aliPlayer.getConfig();
// Tetapkan UA.
config.mUserAgent = "UserAgent yang akan ditetapkan";
....// Pengaturan lainnya.
// Tetapkan konfigurasi untuk pemutar.
aliPlayer.setConfig(config);
Konfigurasi waktu dan jumlah percobaan ulang jaringan
Tetapkan waktu habis jaringan dan jumlah percobaan ulang menggunakan PlayerConfig. Contoh:
// Dapatkan konfigurasi terlebih dahulu.
PlayerConfig config = aliPlayer.getConfig();
// Tetapkan durasi waktu habis jaringan, dalam milidetik.
config.mNetworkTimeout = 5000;
// Tetapkan jumlah percobaan ulang waktu habis. Interval antar percobaan ulang adalah networkTimeout. networkRetryCount=0 berarti tidak ada percobaan ulang; kebijakan percobaan ulang ditentukan oleh aplikasi. Nilai default adalah 2.
config.mNetworkRetryCount=2;
....// Pengaturan lainnya.
// Tetapkan konfigurasi untuk pemutar.
aliPlayer.setConfig(config);
-
Jika NetworkRetryCount ditetapkan dan masalah jaringan menyebabkan pemuatan, pemutar mencoba ulang sebanyak NetworkRetryCount kali, dengan setiap interval sebesar mNetworkTimeout.
-
Jika status pemuatan berlanjut setelah beberapa percobaan ulang, event
onErrordipicu, dengan ErrorInfo.getCode()=ErrorCode.ERROR_LOADING_TIMEOUT. -
Jika NetworkRetryCount ditetapkan ke 0, saat waktu habis percobaan ulang jaringan, pemutar memicu event
onInfo, dengan InfoBean.getCode()=InfoCode.NetworkRetry. Pada titik ini, Anda dapat memanggil metodereloadpemutar untuk memuat ulang jaringan atau menanganinya dengan cara lain.
Konfigurasi kontrol cache dan latensi
Android player SDK menyediakan antarmuka untuk mengontrol cache dan latensi melalui PlayerConfig. Contoh:
Tetapkan header HTTP
Menggunakan metode PlayerConfig, Anda dapat menambahkan parameter header HTTP ke permintaan dalam pemutar. Contoh:
// Dapatkan konfigurasi terlebih dahulu.
PlayerConfig config = aliPlayer.getConfig();
// Definisikan header.
String[] headers = new String[1];
headers[0]="Host:example.com";// Misalnya, tetapkan Host dalam header.
// Tetapkan header.
config.setCustomHeaders(headers);
....// Pengaturan lainnya.
// Tetapkan konfigurasi untuk pemutar.
aliPlayer.setConfig(config);
Gambar-dalam-Gambar
Untuk contoh kode terperinci, lihat modul API-Example Pemutaran Gambar-dalam-Gambar (PictureInPicture). Proyek contoh berbasis Java ini untuk ApsaraVideo Player SDK untuk Android membantu developer menguasai fitur integrasi inti SDK dengan cepat.
Prosedur:
-
Dalam file
AndroidManifest.xml, deklarasikan izin Gambar-dalam-Gambar.<activity android:name=".PictureInPictureActivity" android:exported="true" android:supportsPictureInPicture="true" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" /> -
Alihkan
Activitytarget ke mode Gambar-dalam-Gambar.Rational aspectRatio = new Rational(16, 9); // Rasio aspek untuk Gambar-dalam-Gambar; sesuaikan berdasarkan kebutuhan bisnis Anda. PictureInPictureParams.Builder pipBuilder = new PictureInPictureParams.Builder(); pipBuilder.setAspectRatio(aspectRatio); enterPictureInPictureMode(pipBuilder.build());Anda dapat memicu mode Gambar-dalam-Gambar dari OnClick (event klik), saat meninggalkan aplikasi, atau saat kembali ke aplikasi. Metode implementasi:
Pemicu OnClick (event klik)
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Rational aspectRatio = new Rational(16, 9); // Rasio aspek untuk Gambar-dalam-Gambar. PictureInPictureParams.Builder pipBuilder = new PictureInPictureParams.Builder(); pipBuilder.setAspectRatio(aspectRatio); enterPictureInPictureMode(pipBuilder.build()); } });Pemicu saat meninggalkan aplikasi
@Override protected void onUserLeaveHint() { super.onUserLeaveHint(); Rational aspectRatio = new Rational(16, 9); // Rasio aspek untuk Gambar-dalam-Gambar. PictureInPictureParams.Builder pipBuilder = new PictureInPictureParams.Builder(); pipBuilder.setAspectRatio(aspectRatio); enterPictureInPictureMode(pipBuilder.build()); Log.e(TAG, "Gambar-dalam-Gambar onUserLeaveHint"); }Pemicu saat kembali ke aplikasi
@Override public void onBackPressed() { super.onBackPressed(); // Picu dari tombol kembali. enterPictureInPictureMode(); } -
Tangani UI untuk tampilan/penghilangan Gambar-dalam-Gambar.
@Override public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); if (isInPictureInPictureMode) { // Tangani saat memasuki mode Gambar-dalam-Gambar. // sembunyikan UI Log.e(TAG, "Memasuki mode Gambar-dalam-Gambar"); } else { // Tangani saat keluar dari mode Gambar-dalam-Gambar. // tampilkan UI Log.e(TAG, "Keluar dari mode Gambar-dalam-Gambar"); } }
Degradasi RTS langsung
Untuk contoh kode terperinci, lihat modul API-Example Pemutaran langsung RTS ultra-latensi rendah (RtsLiveStream). Proyek contoh berbasis Java ini untuk ApsaraVideo Player SDK untuk Android membantu developer menguasai fitur integrasi inti SDK dengan cepat.
Alihkan saluran audio kiri/kanan
Android player SDK menyediakan metode setOutputAudioChannel untuk menetapkan saluran audio output. Jika sumber input adalah stereo, Anda dapat beralih ke saluran kiri atau kanan menggunakan metode ini. Jika sumber input adalah mono, pengaturan tidak berpengaruh.
Pengaturan saluran audio output memengaruhi rendering audio dan callback data PCM.
/*
OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_LEFT beralih ke pemutaran saluran kiri,
OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_RIGHT beralih ke pemutaran saluran kanan,
OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_NONE tidak mengalihkan saluran, mempertahankan saluran sumber input.
*/
aliPlayer.setOutputAudioChannel();
Urai aliran audio
Tetapkan listener untuk memperoleh data aliran audio dan video. Aliran tidak boleh dienkripsi, karena aliran terenkripsi tidak dapat diuraikan.
Tetapkan warna latar belakang video
Android player SDK mendukung penyetelan warna latar belakang untuk rendering pemutar. Antarmuka dan instruksi penggunaan:
Contoh antarmuka
/**
* Tetapkan warna latar belakang video.
*
* @param color ARGB
*/
abstract public void setVideoBackgroundColor(int color);
Instruksi penggunaan
// Parameter adalah nilai heksadesimal 8 digit. Setiap pasang digit mewakili A (transparansi alfa), R (merah), G (hijau), B (biru) secara berurutan.
// Misalnya, 0x0000ff00 merepresentasikan hijau.
aliPlayer.setVideoBackgroundColor(0x0000ff00);
vidAuthTetapkan domain pemutaran tertentu
Menggunakan vidAuth, Anda dapat menentukan bidang seperti domain untuk vid. Untuk bidang yang didukung, lihat Parameter permintaan GetPlayInfo. Antarmuka dan instruksi penggunaan:
Contoh antarmuka
/**
* Tetapkan parameter pemutaran.
*
* @param playConfig Parameter pemutaran.
*/
public void setPlayConfig(VidPlayerConfigGen playConfig);
Instruksi penggunaan
Gunakan metode addPlayerConfig dari VidPlayerConfigGen untuk menambahkan bidang playDomain.
vidAuth = new VidAuth();
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
// Tambahkan bidang playDomain. Untuk bidang lain yang dapat Anda tambahkan, lihat
//https://www.alibabacloud.com/help/zh/vod/developer-reference/api-vod-2017-03-21-getplayinfo
configGen.addPlayerConfig("playDomain", "com.xxx.xxx");
vidAuth.setPlayConfig(configGen);
Plugin dekoding H.266
H.266 (VVC/Versatile Video Coding) adalah standar pengkodean video generasi berikutnya yang secara signifikan mengurangi bitrate pada kualitas setara. Kemampuan decoding H.266 dikemas secara independen sebagai plugin untuk integrasi sesuai permintaan.
Prasyarat
-
Versi Player/integrated SDK V7.6.0 atau lebih baru.
-
Otorisasi lisensi Edisi Profesional telah diselesaikan. Dapatkan lisensi player SDK.
-
ApsaraVideo Player dengan plugin decoding H.266 hanya mendukung video H.266 yang ditranskode oleh transkoding audio dan video ApsaraVideo VOD.
Integrasikan plugin
Aktifkan plugin
Mulai dari Android player SDK 7.7.0, plugin diaktifkan secara default setelah integrasi dan tidak memerlukan aktivasi manual.
AliPlayerGlobalSettings.enableCodecPlugin("vvc", true);
Kode kesalahan terkait
Untuk kode kesalahan plugin decoding H.266, lihat Masalah umum untuk pemutar di semua platform.
Pembaruan otomatis sumber pemutaran
Mengaktifkan pembaruan otomatis untuk sumber pemutaran mencegah gangguan pemutaran yang disebabkan oleh kedaluwarsa sumber di bawah mekanisme autentikasi.
Prasyarat
-
Versi Player/integrated SDK V7.9.0 atau lebih baru.
-
Menggunakan sumber VidAuth untuk pemutaran atau bisnis Anda telah mengonfigurasi penandatanganan URL.
Sumber VidAuth
Contoh antarmuka
/**
* Tetapkan listener untuk event kedaluwarsa sumber VidAuth.
*
* Fitur ini mengaktifkan pembaruan otomatis sumber VidAuth untuk menghindari gangguan pemutaran
* yang disebabkan oleh kedaluwarsa. Saat listener dipicu, Anda dapat memperbarui sumber VidAuth
* dan mengembalikan VidAuth yang diperbarui menggunakan {@link SourceRefreshCallback#onSuccess}.
*
* @param listener Antarmuka untuk mendengarkan event kedaluwarsa sumber VidAuth. Lihat {@link OnVidAuthExpiredListener}.
*/
abstract public void setOnVidAuthExpiredListener(OnVidAuthExpiredListener listener);
Komponen fitur
UrlSource sumber
Contoh antarmuka
/**
* Tetapkan listener untuk event kedaluwarsa sumber URL.
*
* Fitur ini mengaktifkan pembaruan URL untuk menghindari gangguan pemutaran yang disebabkan oleh
* kedaluwarsa URL karena autentikasi. Saat listener dipicu,
* Anda dapat memperbarui sumber URL dan mengembalikan sumber URL yang diperbarui menggunakan {@link SourceRefreshCallback#onSuccess}.
*
* @param listener Listener untuk menangani event kedaluwarsa sumber URL. Lihat {@link OnURLSourceExpiredListener}.
*
* <p>Untuk informasi lebih lanjut tentang mengonfigurasi autentikasi URL, lihat
* <a href="https://www.alibabacloud.com/help/zh/vod/user-guide/configure-url-signing?spm=a2c4g.11186623.0.0.560c4140fGh8MW">dokumentasi autentikasi URL</a>.</p>
*/
abstract public void setOnURLSourceExpiredListener(OnURLSourceExpiredListener listener);
Komponen fitur
Fungsi utilitas tambahan
Menggunakan autentikasi tipe A sebagai contoh.
Alihkan NIC terikat
Android player SDK menyediakan metode AliPlayerGlobalSettings.enableSwitchNIC untuk secara otomatis mengalihkan NIC selama anomali jaringan, memastikan pemutaran sumber daya yang stabil. Contoh:
Ini hanya berlaku saat sakelar diaktifkan dan beberapa NIC ada.
AliPlayerGlobalSettings.enableSwitchNIC(true);
Peningkatan audio
Android player SDK menyediakan plugin peningkatan audio untuk meningkatkan pengalaman pemutaran audio, dengan fitur normalisasi volume, peningkatan suara, dan suara surround.
Pengenalan fitur
-
Normalisasi volume: Secara otomatis menyesuaikan semua konten audio ke tingkat volume yang konsisten, secara signifikan meningkatkan pengalaman pemutaran untuk video dengan volume asli terlalu rendah atau terlalu tinggi.
-
Saluran yang didukung: Mono / Stereo / 5.1 / 7.1.
-
Laju sampel yang didukung: 16kHz / 44.1kHz / 48kHz.
-
-
Peningkatan suara: Secara cerdas meningkatkan dialog sambil mempertahankan timbre asli, membuat suara lebih jelas dan cerah dalam adegan bising.
-
Saluran yang didukung: Stereo.
-
Laju sampel yang didukung: 44.1kHz / 48kHz.
-
-
Suara surround: Menerapkan rendering surround virtual ke video multi-saluran dan stereo, memberikan pengalaman imersif pada headphone atau perangkat standar. Termasuk mode 3DSurround (surround stereo) dan MegaBass (bass super).
-
Saluran yang didukung: Mono / Stereo / 5.1 / 7.1.
-
Laju sampel yang didukung: 44.1kHz / 48kHz.
-
Prasyarat
-
Versi Player/integrated SDK V7.13.0 atau lebih baru.
-
Otorisasi Lisensi Edisi Profesional diperoleh. Dapatkan lisensi player SDK.
Dukungan sumber audio untuk peningkatan audio:
-
Aliran VOD: Harus menggunakan transkoding audio dan video ApsaraVideo VOD.
-
Aliran langsung: Mendukung sumber apa pun.
Integrasikan plugin
Integrasi Maven (direkomendasikan)
Tambahkan dependensi untuk versi plugin tertentu di file build.gradle aplikasi Anda:
Untuk versi terbaru Android player SDK, lihat Riwayat rilis Android SDK.
// x.x.x sesuai dengan nomor versi player SDK.
implementation 'com.aliyun.sdk.android:AlivcAudioEnhanceFilter:x.x.x'
Integrasi lokal
Unduh Android player SDK terbaru dan salin paket AlivcAudioEnhanceFilter ke direktori libs proyek Anda (buat secara manual jika belum ada). Untuk detailnya, lihat Integrasi lokal.
Antarmuka fitur
setFilterValid
Mengontrol sakelar utama untuk peningkatan audio. Nama target untuk filter peningkatan audio adalah audioEnhance. Saat dinonaktifkan, ketiga sub-fitur tidak aktif (dinonaktifkan secara default).
player.setFilterValid("audioEnhance", true); // Aktifkan.
player.setFilterValid("audioEnhance", false); // Nonaktifkan.
setFilterConfig
Tetapkan FilterConfig sebelum prepare. Ini berlaku setelah pemutaran dimulai.
FilterConfig filterConfig = new FilterConfig();
FilterConfig.Filter filterItem = new FilterConfig.Filter("audioEnhance");
FilterConfig.FilterOptions opts = new FilterConfig.FilterOptions();
// Suara surround.
opts.setOption("enable_surround", true);
opts.setOption("surround_effect_type", "3DSurround"); // Jenis harus ditetapkan bersama dengan enable_surround saat pertama kali digunakan.
// Peningkatan suara.
opts.setOption("enable_dialoguenhance", true);
opts.setOption("dialoguenhance_voice", 1.0f); // 1.0 ~ 10.0. Suara harus ditetapkan bersama dengan enable_dialoguenhance saat pertama kali digunakan.
// Normalisasi volume.
opts.setOption("enable_normalizer", true);
filterItem.setOptions(opts);
filterConfig.addFilter(filterItem);
player.setFilterConfig(filterConfig);
|
Parameter |
Jenis |
Deskripsi |
|
|
Boolean |
Sakelar fitur suara surround. |
|
|
String |
Jenis suara surround: |
|
|
Boolean |
Sakelar fitur peningkatan suara. |
|
|
Float |
Kekuatan peningkatan suara, rentang 1.0 ~ 10.0. |
|
|
Boolean |
Sakelar fitur normalisasi volume. |
updateFilterConfig
Selama atau setelah persiapan pemutar, untuk menyesuaikan parameter secara dinamis, panggil antarmuka ini untuk memperbaruinya.
Memanggil updateFilterConfig sebelum prepare tidak berpengaruh. Gunakan setFilterConfig untuk konfigurasi awal.
AVPFilterOptions *opts = [[AVPFilterOptions alloc] init];
[opts setOptions:@"enable_surround" value:@YES];
[opts setOptions:@"surround_effect_type" value:@"3DSurround"]; // Jika bukan pertama kali mengaktifkan surround, pengaturan Jenis ini tidak valid karena inisialisasi sudah selesai.
[player updateFilterConfig:@"audioEnhance" options:opts];
Jenis suara surround ("3DSurround" / "MegaBass") dan kekuatan peningkatan suara (dialoguenhance_voice) harus ditetapkan bersama dengan atribut enable saat pertama kali digunakan. Jika tidak, nilai default digunakan untuk inisialisasi (suara surround default ke "3DSurround", kekuatan suara default ke 1.0), dan tidak dapat dimodifikasi selama pemutaran.
Performa
Tetapkan skenario pemutaran
Menetapkan skenario pemutaran secara otomatis mengonfigurasi parameter optimal (termasuk pengaturan buffer dan sakelar fitur). Ini kompatibel dengan pengaturan parameter kustom melalui antarmuka setConfig (pengaturan kustom memiliki prioritas lebih tinggi).
-
Setelah menetapkan skenario pemutaran, Anda dapat melihat konfigurasi parameter menggunakan antarmuka
getConfig.
Contoh antarmuka
/**
* Tetapkan skenario pemutar.
*
* @param scene
*/
abstract public void setPlayerScene(PlayerScene scene);
Skenario pemutaran
public enum PlayerScene {
/**
* Skenario: tidak ada.
*/
NONE,
/**
* Skenario video panjang: berlaku untuk video lebih dari 30 menit.
*/
LONG,
/**
* Skenario video sedang: berlaku untuk video antara 5 hingga 30 menit.
*/
MEDIUM,
/**
* Skenario video pendek: berlaku untuk video hingga 5 menit.
*/
SHORT,
/**
* Skenario langsung.
*/
LIVE,
/**
* Skenario langsung ultra-latensi rendah.
*/
RTS_LIVE
}
Instruksi penggunaan
// Tetapkan skenario video pendek.
aliPlayer.setPlayerScene(PlayerScene.SHORT)
// Tetapkan skenario video sedang.
aliPlayer.setPlayerScene(PlayerScene.MEDIUM)
// Tetapkan skenario video panjang.
aliPlayer.setPlayerScene(PlayerScene.LONG)
// Tetapkan skenario langsung.
aliPlayer.setPlayerScene(PlayerScene.LIVE)
Pre-rendering
Android player SDK mendukung rendering frame pertama dengan cepat sebelum pemutaran dimulai, yang dapat meningkatkan kecepatan startup.
-
Fitur ini dinonaktifkan secara default.
-
Anda harus menetapkan
Viewsebelum memanggilPrepareuntuk memastikan frame dirender keViewsegera setelah siap. -
Mengaktifkan fitur ini memengaruhi urutan pemicuan keberhasilan persiapan dan event rendering frame pertama: tanpa fitur ini, keberhasilan persiapan dipicu sebelum rendering frame pertama; dengan fitur ini, karena perbedaan kecepatan decoding dan rendering, rendering frame pertama mungkin dipicu sebelum keberhasilan persiapan, tetapi hal ini tidak memengaruhi pemutaran.
Contoh:
aliPlayer.setOption(ALLOW_PRE_RENDER, 1);
Cache lokal
Untuk contoh kode terperinci, lihat modul API-Example Pra-pemuatan video (Preload). Proyek contoh berbasis Java ini untuk ApsaraVideo Player SDK untuk Android membantu developer menguasai fitur integrasi inti SDK dengan cepat.
Cache lokal meningkatkan kecepatan startup, kecepatan pencarian, dan mengurangi tersendat untuk pemutaran berulang sekaligus menghemat bandwidth.
Aktifkan cache lokal
Cache lokal dinonaktifkan secara default. Untuk menggunakannya, aktifkan secara manual menggunakan AliPlayerGlobalSettings dan enableLocalCache. Contoh:
-
Jika URL pemutaran video mencakup parameter autentikasi, parameter berubah antara caching dan pemutaran. Untuk meningkatkan tingkat hit cache untuk URL yang sama di bawah autentikasi berbeda, hapus parameter autentikasi sebelum menghitung nilai hash (misalnya, MD5) melalui
setCacheUrlHashCallback. Misalnya, untuk URL sepertihttp://****.mp4?aaa, hitung hash menggunakanhttp://****.mp4. Namun, untuk video m3u8 terenkripsi, jika Anda menghapus parameter autentikasi dari keyURL sebelum hashing, video berbeda mungkin mengenai kunci yang sama, menyebabkan kegagalan pemutaran. Solusi: Dalam callbacksetCacheUrlHashCallback, periksa domain dan hanya hapus parameter autentikasi untuk domain pemutaran (http(s)://xxxxx.m3u8?aaaa), bukan untuk domain keyURL (http(s)://yyyyy?bbbb). Gunakan curl untuk mendapatkan daftar putar video M3U8 terenkripsi HLS, di mana playURL adalah alamat M3U8 dan keyURL adalah alamat kunci dekripsi AES-128. Contoh output terminal:# playURL: Permintaan daftar putar M3U8 C:\Users\futan>curl "https://videxxxv.cc/a003xxx2a-hd-encrypt-stream.m3u8?MtsHlsUriToken=uheAz07oi-jlo9CeIU6LxxxAr4a3WtzrJXnCn4ClS44dTYHCQGmXBlo7TyuPLE0a&auth_key=17xxxrmonwFHJ" #EXTM3U #EXT-X-VERSION:3 #EXT-X-ALLOW-CACHE:YES #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:0 # keyURL: Alamat kunci enkripsi AES-128 #EXT-X-KEY:METHOD=AES-128,URI="https://apxxx.cc/decrypt?Ciphertext=NWNiNDQyN2MtNjV1ZS00ZWIwLTk0YTAtNTJhOWIyZWV1OTY2MzdoRTJ6TjVxcXkweFY2xxxNCt4OGNFRGNReHRG&MtsHlsUriToken=uheAz07oi-jlo9CeIU6LxxxAr4a3WtzrJXnCn4ClS44dTYHCQGmXBlo7TyuPLE0a" #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00001.ts?auth_key=1706560316-65b7xxx39f1d6c77 #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00002.ts?auth_key=1706560316-65b7xxxe8eca2faf #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00003.ts?auth_key=1706560316-65b7xxx50c6981b3 #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00004.ts?auth_key=1706560316-65b7xxxf7228c594 #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00005.ts?auth_key=1706560316-65b7xxx6dc68c35d -
Jika server mendukung protokol HTTP dan HTTPS yang mengarah ke file media yang sama, hapus atau standarkan protokol sebelum menghitung hash. Misalnya:
-
Untuk URL
https://****.mp4danhttp://****.mp4, hitung hash menggunakan****.mp4. -
Untuk URL
https://****.mp4, standarkan kehttp://****.mp4sebelum menghitung hash.
-
-
Untuk versi player SDK 5.5.4.0 dan lebih baru, jika URL pemutaran video mencakup parameter autentikasi dan menggunakan protokol HLS, Anda dapat menetapkan
PlayerConfig.mEnableStrictAuthModeuntuk memilih antara mode autentikasi (default adalah false untuk versi lama; true untuk versi 7.13.0 dan lebih baru):-
Autentikasi non-ketat (false): Autentikasi di-cache. Jika hanya sebagian media yang di-cache sebelumnya, pemutar menggunakan autentikasi yang di-cache untuk permintaan berikutnya. Jika autentikasi URL memiliki periode validitas singkat atau pemutaran dilanjutkan setelah jeda panjang, autentikasi mungkin kedaluwarsa. Integrasikan dengan pembaruan otomatis sumber pemutaran untuk menangani kedaluwarsa autentikasi.
-
Autentikasi ketat (true): Autentikasi tidak di-cache. Autentikasi terjadi setiap startup, menyebabkan kegagalan startup tanpa jaringan.
-
Aktifkan atau nonaktifkan cache lokal untuk URL tunggal
Untuk mengaktifkan atau menonaktifkan cache lokal untuk URL tertentu, tetapkan dalam konfigurasi pemutar.
// Dapatkan konfigurasi terlebih dahulu.
PlayerConfig config = aliPlayer.getConfig();
// Apakah akan mengaktifkan cache lokal untuk URL pemutaran. Default adalah true. Saat cache lokal global diaktifkan dan ini ditetapkan ke true, cache lokal berlaku untuk URL ini. Jika ditetapkan ke false, cache lokal dinonaktifkan untuk URL ini.
config.mEnableLocalCache = false;
....// Pengaturan lainnya.
// Tetapkan konfigurasi untuk pemutar.
aliPlayer.setConfig(config);
Pra-pemuatan
Pra-pemuatan adalah peningkatan cache lokal yang meningkatkan kecepatan startup video dengan menetapkan penggunaan memori untuk caching video.
Batasan pra-pemuatan:
-
Saat ini mendukung pemuatan file media tunggal seperti MP4, MP3, FLV, dan HLS.
Android player SDK menyediakan penjadwalan sumber daya jaringan otomatis selama pra-pemuatan secara default untuk mengurangi dampak permintaan jaringan pra-pemuatan pada pemutaran video yang sedang berlangsung. Strategi penjadwalan otomatis hanya mengizinkan permintaan pra-pemuatan setelah buffer video yang sedang diputar mencapai ambang batas tertentu. Untuk mengontrol permintaan pra-pemuatan real-time sendiri, nonaktifkan strategi ini menggunakan metode berikut:
AliPlayerGlobalSettings.enableNetworkBalance(false);
-
Aktifkan cache lokal. Untuk langkah terperinci, lihat Cache lokal.
-
Tetapkan sumber data.
VidAuth (direkomendasikan)
VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Info Vid");// Parameter wajib: ID Video. vidAuth.setPlayAuth("<kredensialPlayAnda>");// Parameter wajib: Kredensial pemutaran, dihasilkan dengan memanggil API GetVideoPlayAuth VOD. vidAuth.setRegion("Wilayah akses");// Untuk versi player SDK 5.5.5.0 dan lebih baru, parameter ini ditinggalkan dan tidak diperlukan; pemutar secara otomatis mengurai wilayahnya. Untuk versi sebelum 5.5.5.0, parameter ini wajib; wilayah akses VOD default adalah cn-shanghai. vidAuth.setQuality("Definisi yang dipilih") //"AUTO" merepresentasikan bitrate adaptif.VidSts
VidSts vidSts = new VidSts(); vidSts.setVid("Info Vid");// Parameter wajib: ID Video. vidSts.setAccessKeyId("<yourAccessKeyId>");// Parameter wajib: ID kunci akses pasangan AK sementara STS, dihasilkan dengan memanggil API AssumeRole STS. vidSts.setAccessKeySecret("<yourAccessKeySecret>");// Parameter wajib: Rahasia kunci akses pasangan AK sementara STS, dihasilkan dengan memanggil API AssumeRole STS. vidSts.setSecurityToken("<yourSecurityToken>");// Parameter wajib: Token keamanan STS, dihasilkan dengan memanggil API AssumeRole STS. vidSts.setRegion("Wilayah akses");// Parameter wajib: Wilayah akses VOD; default adalah cn-shanghai. vidSts.setQuality("Definisi yang dipilih") //"AUTO" merepresentasikan bitrate adaptif.UrlSource
UrlSource urlSource = new UrlSource(); urlSource.setUri("Alamat pemutaran");// Parameter wajib: Alamat pemutaran, yang dapat berupa alamat VOD pihak ketiga atau alamat pemutaran Alibaba Cloud VOD. -
Tetapkan parameter tugas.
CatatanHanya berlaku untuk video multi-bitrate. Pilih salah satu dari
setDefaultBandWidth,setDefaultResolution, atausetDefaultQuality.PreloadConfig preloadConfig = new PreloadConfig(); // Tetapkan bitrate pra-pemuatan untuk aliran multi-bitrate. preloadConfig.setDefaultBandWidth(400000); // Tetapkan resolusi pra-pemuatan untuk aliran multi-bitrate. preloadConfig.setDefaultResolution(640 * 480); // Tetapkan kualitas pra-pemuatan untuk aliran multi-bitrate. preloadConfig.setDefaultQuality("FD"); // Tetapkan durasi pra-pemuatan. preloadConfig.setDuration(1000); -
Tambahkan listener tugas.
-
Buat tugas dan tambahkan ke instans
MediaLoaderV2untuk memulai pra-pemuatan.VidAuth (direkomendasikan)
// Bangun pra-pemuatan. PreloadTask mPreloadTask = new PreloadTask(vidAuth, preloadConfig); // Dapatkan instans MediaLoaderV2. MediaLoaderV2 mediaLoaderV2 = MediaLoaderV2.getInstance(); // Tambahkan tugas dan mulai pra-pemuatan. String taskId = mediaLoaderV2.addTask(mPreloadTask, PreloadListenerImpl)VidSts
// Bangun pra-pemuatan. PreloadTask mPreloadTask = new PreloadTask(vidSts, preloadConfig); // Dapatkan instans MediaLoaderV2. MediaLoaderV2 mediaLoaderV2 = MediaLoaderV2.getInstance(); // Tambahkan tugas dan mulai pra-pemuatan. String taskId = mediaLoaderV2.addTask(mPreloadTask, PreloadListenerImpl);UrlSource
// Bangun pra-pemuatan. PreloadTask mPreloadTask = new PreloadTask(urlSource, preloadConfig); // Dapatkan instans MediaLoaderV2. MediaLoaderV2 mediaLoaderV2 = MediaLoaderV2.getInstance(); // Tambahkan tugas dan mulai pra-pemuatan. String taskId = mediaLoaderV2.addTask(mPreloadTask, PreloadListenerImpl) -
Opsi: Kelola tugas.
mediaLoaderV2.cancelTask(taskId);// Batalkan tugas pra-pemuatan dengan ID tugas tertentu. mediaLoaderV2.pauseTask(taskId);// Jeda tugas pra-pemuatan dengan ID tugas tertentu. mediaLoaderV2.resumeTask(taskId);// Lanjutkan tugas pra-pemuatan dengan ID tugas tertentu. -
Opsi: Hapus file yang dimuat.
Hapus file yang dimuat sesuai kebutuhan untuk menghemat ruang. Android player SDK tidak menyediakan antarmuka penghapusan; hapus file dari direktori pemuatan di aplikasi Anda.
Pra-pemuatan dinamis
Strategi pra-pemuatan dinamis memungkinkan integrator mengontrol cache video yang sedang diputar dan jumlah serta cache item yang dipra-muat, menyeimbangkan pengalaman pemutaran dan biaya overhead.
Pra-pemuatan video HLS multi-bitrate
Dalam skenario pemutaran video HLS multi-bitrate listPlayer, integrator dapat mempra-muat aliran yang sesuai dengan definisi pemutaran saat ini dan memilih mode pra-pemuatan berdasarkan kebutuhan bisnis.
Dapatkan kecepatan unduhan
Dapatkan kecepatan unduhan video saat ini melalui callback onInfo, diimplementasikan oleh antarmuka getExtraValue. Contoh:
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentDownloadSpeed){
// Kecepatan unduhan saat ini.
long extraValue = infoBean.getExtraValue();
}
}
});
Fitur jaringan
HTTPDNS
HTTPDNS mengurai nama domain melalui HTTP ke server tertentu, mengurangi risiko pembajakan DNS dan memberikan resolusi yang lebih cepat dan stabil.
ApsaraVideo Player SDK menyediakan HTTPDNS yang ditingkatkan untuk domain CDN Alibaba Cloud, mendukung penjadwalan CDN yang tepat dan resolusi real-time.
Contoh penggunaan HTTPDNS yang ditingkatkan
HTTPDNS yang ditingkatkan hanya menyediakan layanan untuk domain CDN Alibaba Cloud. Pastikan domain Anda adalah domain CDN Alibaba Cloud dan dikonfigurasi dengan benar. Untuk menambahkan domain CDN di VOD, lihat Tambahkan domain yang dipercepat. Alibaba Cloud CDN.
// Aktifkan HTTPDNS yang ditingkatkan.
AliPlayerGlobalSettings.enableEnhancedHttpDns(true);
// Opsional: Tambahkan domain pra-resolusi HTTPDNS.
DomainProcessor.getInstance().addPreResolveDomain("player.***alicdn.com");
HTTP/2
Android player SDK mengaktifkan HTTP/2 secara default mulai dari versi 5.5.0.0.
Android player SDK mendukung protokol HTTP/2, yang menggunakan multiplexing untuk menghindari blokir kepala antrian dan meningkatkan performa pemutaran. Contoh:
AliPlayerGlobalSettings.setUseHttp2(true);
TCP pra-koneksi HTTP
Untuk permintaan pemutaran video HTTP (non-HTTPS), membangun koneksi TCP terlebih dahulu secara signifikan meningkatkan pengalaman pengguna, mengurangi waktu koneksi jaringan, memastikan pemutaran segera dan berkelanjutan, serta mengoptimalkan penggunaan sumber daya jaringan dan sistem. Penggunaan:
// Format domain adalah host[:port]; port opsional. Pisahkan beberapa domain dengan titik koma (;).
// Pengaturan global.
// Antarmuka lengkap menggunakan string saat ini setiap kali ditetapkan (lebih banyak - tambah, lebih sedikit - hapus). String kosong menghentikan pra-koneksi.
AliPlayerGlobalSettings.setOption(AliPlayerGlobalSettings.SET_PRE_CONNECT_DOMAIN, "domain1;domain2");
Unduhan video
Untuk contoh kode terperinci, lihat modul API-Example Unduhan video dan pemutaran offline (Download). Proyek contoh berbasis Java ini untuk ApsaraVideo Player SDK untuk Android membantu developer menguasai fitur integrasi inti SDK dengan cepat.
Android player SDK menyediakan fitur unduhan video untuk layanan VOD, memungkinkan pengguna menyimpan cache video secara lokal menggunakan ApsaraVideo Player. Fitur ini menawarkan dua metode unduhan: unduhan standar dan unduhan aman.
-
Unduhan standar
Data video yang diunduh tidak dienkripsi oleh Alibaba Cloud dan dapat diputar oleh pemutar pihak ketiga.
-
Unduhan aman
Data video yang diunduh dienkripsi oleh Alibaba Cloud. Pemutar pihak ketiga tidak dapat memutarnya. Hanya ApsaraVideo Player yang dapat memutarnya.
Instruksi penggunaan
-
Hanya metode VidSts dan VidAuth yang mendukung unduhan video.
-
Untuk menggunakan fitur unduhan video pemutar, aktifkan dan konfigurasikan mode unduhan di konsol VOD. Untuk langkah terperinci, lihat Unduhan offline.
-
Unduhan video mendukung unduhan yang dapat dilanjutkan.
Prosedur
-
Opsi: Konfigurasikan file verifikasi enkripsi untuk unduhan aman. Diperlukan hanya untuk unduhan aman; tidak diperlukan untuk unduhan standar.
CatatanPastikan file verifikasi enkripsi yang dikonfigurasi sesuai dengan informasi aplikasi Anda; jika tidak, unduhan video gagal.
Untuk unduhan aman, konfigurasikan file kunci yang dihasilkan di konsol VOD di player SDK untuk verifikasi dekripsi selama unduhan dan pemutaran video. Untuk pembuatan file kunci, lihat Aktifkan unduhan aman.
Kami merekomendasikan mengonfigurasi ini sekali di Application. Contoh:
PrivateService.initService(getApplicationContext(), "Jalur ke file encryptedApp.dat"); // Kami merekomendasikan menyimpan file verifikasi encryptedApp.dat di ponsel dan menetapkan jalur file lokalnya di sini. -
Buat dan tetapkan pengunduh.
Buat pengunduh menggunakan AliDownloaderFactory. Contoh:
AliMediaDownloader mAliDownloader = null; ...... // Buat pengunduh. mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); // Konfigurasikan jalur penyimpanan unduhan. mAliDownloader.setSaveDir("Jalur folder simpan"); -
Tetapkan listener event.
Pengunduh menyediakan beberapa listener event. Contoh:
-
Persiapkan sumber unduhan.
Persiapkan sumber unduhan menggunakan metode
prepare. Sumber unduhan mendukung metode VidSts dan VidAuth. Contoh:-
VidSts
// Buat VidSts VidSts aliyunVidSts = new VidSts(); aliyunVidSts.setVid("Informasi Vid"); // ID Video (VideoId). aliyunVidSts.setAccessKeyId("<yourAccessKeyId>"); // ID AccessKey pasangan AccessKey STS sementara, dihasilkan dengan memanggil operasi AssumeRole Layanan Token Keamanan (STS). aliyunVidSts.setAccessKeySecret("<yourAccessKeySecret>"); // Rahasia AccessKey pasangan AccessKey STS sementara, dihasilkan dengan memanggil operasi AssumeRole Layanan Token Keamanan (STS). aliyunVidSts.setSecurityToken("<yourSecurityToken>"); // Token Layanan Keamanan (STS), dihasilkan dengan memanggil operasi AssumeRole Layanan Token Keamanan (STS). aliyunVidSts.setRegion("wilayah"); // Wilayah layanan video sesuai permintaan (VOD). Nilai default: cn-shanghai. // Jika Anda telah mengaktifkan transmisi langsung parameter enkripsi HLS di konsol VOD dan nama parameter default adalah MtsHlsUriToken, // Anda harus menetapkan konfigurasi dan meneruskannya ke vid, seperti yang ditunjukkan di bawah ini. // Jika Anda belum mengaktifkan transmisi langsung parameter enkripsi HLS di konsol VOD, lewati kode berikut. VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); aliyunVidSts.setPlayerConfig(vidConfig); // Persiapkan sumber unduhan mAliDownloader.prepare(aliyunVidSts) -
VidAuth
// Buat VidAuth. VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Info Vid");// ID Video. vidAuth.setPlayAuth("<kredensialPlayAnda>");// Kredensial pemutaran, dihasilkan dengan memanggil API GetVideoPlayAuth VOD. vidAuth.setRegion("Wilayah akses");// Untuk versi player SDK 5.5.5.0 dan lebih baru, parameter ini ditinggalkan dan tidak diperlukan; pemutar secara otomatis mengurai wilayahnya. Untuk versi sebelum 5.5.5.0, parameter ini wajib; wilayah akses VOD default adalah cn-shanghai. // Jika Anda mengaktifkan transmisi langsung parameter enkripsi standar HLS di konsol VOD dengan nama parameter default MtsHlsUriToken, tetapkan konfigurasi dan teruskan ke vid seperti di bawah ini. VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); vidAuth.setPlayerConfig(config); // Persiapkan sumber unduhan. mAliDownloader.prepare(vidAuth);
Catatan-
Format file sumber cocok dengan format file yang diunduh; perubahan tidak didukung.
-
Jika Anda mengaktifkan transmisi langsung parameter enkripsi standar HLS di konsol VOD dengan nama parameter default MtsHlsUriToken, lihat Transmisi langsung parameter enkripsi standar HLS, kemudian tetapkan nilai MtsHlsUriToken dalam sumber VOD seperti yang ditunjukkan di atas.
-
-
Setelah persiapan berhasil, pilih item unduhan dan mulai unduh.
Setelah persiapan berhasil, metode
OnPreparedListenerdipanggil. TrackInfo yang dikembalikan berisi informasi seperti definisi aliran video. Pilih satu Track untuk diunduh. Contoh:public void onPrepared(MediaInfo mediaInfo) { // Item unduhan berhasil dipersiapkan. List<TrackInfo> trackInfos = mediaInfo.getTrackInfos(); // Misalnya: unduh TrackInfo pertama. mAliDownloader.selectItem(trackInfos.get(0).getIndex()); // Mulai unduh. mAliDownloader.start(); } -
(Opsional) Perbarui sumber unduhan.
Untuk mencegah kedaluwarsa VidSts dan VidAuth, Anda dapat memperbarui informasi sumber unduhan dan mulai mengunduh. Contoh:
// Perbarui sumber unduhan. mAliDownloader.updateSource(VidSts); // Mulai unduh. mAliDownloader.start(); -
Setelah keberhasilan atau kegagalan unduhan, lepaskan pengunduh.
Setelah unduhan berhasil, panggil
releasedalam callbackonCompletionatauonErroruntuk melepaskan pengunduh. Contoh:mAliDownloader.stop(); mAliDownloader.release(); -
Opsi: Hapus file yang diunduh.
Anda dapat menghapus file yang diunduh selama atau setelah unduhan. Contoh:
// Hapus file melalui objek. mAliDownloader.deleteFile(); // Hapus melalui metode statis; mengembalikan 0 jika berhasil. AliDownloaderFactory.deleteFile("Jalur ke folder unduhan","ID Video","Format video","Indeks video yang diunduh");
Langkah selanjutnya
Video yang diunduh dapat diputar menggunakan ApsaraVideo Player. Langkah-langkah:
-
Setelah unduhan selesai, dapatkan jalur mutlak file video.
String path = mAliDownloader.getFilePath(); -
Tetapkan jalur mutlak melalui UrlSource VOD untuk pemutaran.
UrlSource urlSource = new UrlSource(); urlSource.setUri("Alamat pemutaran");// Tetapkan jalur mutlak video yang diunduh. aliPlayer.setDataSource(urlSource);
Pemutaran terenkripsi
Video VOD mendukung enkripsi standar HLS, kriptografi privat Alibaba Cloud, dan enkripsi DRM. Video langsung hanya mendukung enkripsi DRM. Untuk pemutaran terenkripsi, lihat Pemutaran terenkripsi.
Pemutaran RTS Native
Android Player SDK mengintegrasikan Native RTS SDK untuk streaming langsung ultra-latensi rendah. Implementasikan penarikan aliran RTS di Android.