Topik ini menjelaskan fitur lanjutan SDK ApsaraVideo Player untuk Android dan menyediakan contoh kode. Untuk informasi lebih lanjut mengenai fitur lainnya, lihat Operasi API SDK ApsaraVideo Player untuk Android.
Untuk menjalankan dan menguji demo, unduh dan ikuti petunjuk di Jalankan demo untuk mengompilasi dan menjalankannya.
Konfirmasi kemampuan profesional
Beberapa fitur pemutar memerlukan lisensi Edisi Profesional. Untuk detailnya, lihat Ikhtisar fitur SDK ApsaraVideo Player. Untuk menggunakan fitur-fitur tersebut, peroleh lisensi seperti yang dijelaskan di Dapatkan lisensi SDK Pemutar.
Tetapkan listener saat aplikasi Anda dimulai atau sebelum memanggil antarmuka 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);
}
});Pada kode ini, PremiumBizType adalah enumerasi yang merepresentasikan kemampuan profesional. Pemutar memverifikasi kemampuan ini dan mengembalikan hasil melalui callback ini saat Anda menggunakan fitur terkait. Jika isValid bernilai false, errorMsg berisi alasan spesifiknya.
Pemutaran
Pemutaran daftar
SDK ApsaraVideo Player untuk Android menyediakan fitur pemutaran daftar video lengkap. SDK memanfaatkan teknologi seperti preloading untuk meminimalkan waktu pemuatan video pendek.
Jika Anda menginginkan pengalaman pemutaran daftar yang lebih baik, kami menyarankan Anda menggunakan solusi mini drama. Untuk informasi lebih lanjut, lihat Pengembangan klien mini drama.
Putar video yang memiliki konfigurasi transparansi
Ikhtisar
SDK ApsaraVideo Player mendukung rendering video dengan saluran alpha untuk memutar video hadiah dinamis dengan latar belakang transparan. Hal ini memungkinkan penonton melihat efek hadiah dinamis tanpa menghalangi konten video langsung selama streaming, secara signifikan meningkatkan pengalaman menonton dan interaksi.
Batasan
Anda dapat menggunakan SDK ApsaraVideo MediaBox V6.8.0 atau yang lebih baru dan SDK ApsaraVideo Player V6.9.0 atau yang lebih baru untuk merender video dengan transparansi.
Manfaat
Anda dapat menggunakan video MP4 dengan transparansi untuk memutar video hadiah dinamis dengan latar belakang transparan. Hal ini meningkatkan performa, kompatibilitas video, mengurangi ukuran video, dan menyederhanakan pengembangan, sehingga mengoptimalkan pengalaman menonton efek hadiah dan meningkatkan pengalaman pengguna. Menggunakan video MP4 dengan transparansi untuk memutar video hadiah dinamis menawarkan manfaat berikut:
Kualitas video lebih tinggi: Video MP4 menampilkan efek hadiah dinamis dalam kualitas asli, termasuk detail gambar dan warna. Dibandingkan dengan format lain seperti APNG atau IXD, MP4 mempertahankan kualitas asli yang dimaksudkan oleh desainer.
Ukuran video lebih kecil: Dibandingkan dengan format lain seperti APNG atau IXD, MP4 mencapai pengurangan ukuran file yang lebih efisien, mempercepat pemuatan dan mengurangi konsumsi lebar pita jaringan.
Kompatibilitas lebih baik: MP4 adalah format video umum yang didukung secara luas di berbagai perangkat dan browser, memungkinkan pemutaran efek hadiah berbasis MP4 di perangkat utama.
Efisiensi pengembangan lebih tinggi: Menggunakan video MP4 sebagai hadiah dinamis memerlukan pengembangan yang sederhana. Developer dapat fokus pada implementasi fitur lain daripada mengembangkan logika parsing dan rendering yang kompleks, meningkatkan efisiensi pengembangan.
Konfigurasikan subtitle eksternal
Untuk contoh kode detail, lihat modul API-Example Pemutaran dan pergantian subtitle eksternal (ExternalSubtitle). Proyek ini adalah proyek contoh Android untuk SDK ApsaraVideo Player yang ditulis dalam Java. Ini membantu developer dengan cepat menguasai integrasi inti SDK.
SDK ApsaraVideo Player untuk Android memungkinkan Anda menambahkan atau mengganti subtitle eksternal dalam format SRT, SSA, ASS, atau VTT untuk video.
Berikut adalah contohnya:
Buat tampilan yang menampilkan subtitle.
Anda harus membuat tampilan berbeda untuk subtitle dalam format berbeda.
Saat mengintegrasikan Player SDK V7.6.0 atau yang lebih baru dan menggunakan
VttSubtitleViewuntuk menampilkan subtitle SRT dan VTT, konfigurasikan listener berikut:// Required for Player SDK 7.6.0 or later 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.
PentingAnda harus mengonfigurasi file subtitle dalam
onPrepared.mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() { @Override public void onPrepared() { // Configure subtitles (must be configured in onPrepared) mAliPlayer.addExtSubtitle(EXT_SUBTITLE_URL); } });Konfigurasikan listener untuk subtitle.
Subtitle eksternal (rendering kustom dengan komponen rendering)
Berdasarkan VttSubtitleView dan WebVttResolver, SDK ApsaraVideo Player sepenuhnya mendukung subtitle eksternal WebVTT dan memungkinkan kustomisasi fleksibel ukuran font, warna, dan font tertentu.
Kasus penggunaan:
Anda perlu menyesuaikan gaya subtitle WebVTT.
Anda mengintegrasikan SDK ApsaraVideo Player V7.11.0 atau yang lebih baru.
Prasyarat:
File font (.ttf) ditempatkan di direktori
assets/fonts/proyek Anda.minSdk proyek Anda adalah 21 atau yang lebih baru (disarankan).
Anda telah menambahkan listener subtitle dan dapat memperoleh konten WebVTT.
Buat
CustomStyleWebVttResolverdan implementasikanWebVttResolver.public class CustomStyleWebVttResolver extends WebVttResolver { // Implement the constructor public CustomStyleWebVttResolver(Context context) { super(context); // Initialize fonts and other resources here } }Override
applyTextSpansuntuk menyesuaikan gaya.Metode ini dipanggil setelah kelas induk mengurai gaya dasar, memungkinkan pemrosesan sekunder subtitle.
Metode 1: Ubah
VttContentAttributedan panggil metode kelas induk./** * Override text style application logic to achieve custom styling effects. * This method is called after the parent class parses basic styles, allowing secondary processing of properties such as font size and color. * * @param spannableStringBuilder Used to build styled text * @param vttContentAttribute Style attributes of the current text segment (including font, color, size, etc.) * @param start Start position of style application (inclusive) * @param end End position of style application (exclusive) */ @Override protected void applyTextSpans(SpannableStringBuilder spannableStringBuilder, VttContentAttribute vttContentAttribute, int start, int end) { // Save original font size (unit: px) for subsequent adjustment // Default font size is 0.0533f times the video height double originalFontSizePx = vttContentAttribute.fontSizePx; // Double the font size vttContentAttribute.fontSizePx = originalFontSizePx * 2; // Change font color to red vttContentAttribute.mPrimaryColour = Color.argb(255, 255, 0, 0); // Call the parent class method to apply text styles super.applyTextSpans(spannableStringBuilder, vttContentAttribute, start, end); }Manipulasi langsung
SpannableStringBuilderuntuk memodifikasi gaya WebVTT secara langsung.PentingMetode ini dapat menyebabkan hilangnya gaya WebVTT asli.
/** * Override text style application logic to achieve custom styling effects. * This method is called after the parent class parses basic styles, allowing secondary processing of properties such as font size and color. * * @param spannableStringBuilder Used to build styled text * @param vttContentAttribute Style attributes of the current text segment (including font, color, size, etc.) * @param start Start position of style application (inclusive) * @param end End position of style application (exclusive) */ @Override protected void applyTextSpans(SpannableStringBuilder spannableStringBuilder, VttContentAttribute vttContentAttribute, int start, int end) { // Set font color spannableStringBuilder.setSpan( new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); // Set absolute font size spannableStringBuilder.setSpan( new AbsoluteSizeSpan(20), // Unit: px start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); // Set relative font size // spannableStringBuilder.setSpan( // new RelativeSizeSpan(2.0f), // Multiple of TextView default font size // start, end, // Spanned.SPAN_EXCLUSIVE_EXCLUSIVE // ); }
Konfigurasikan font kustom (Typeface).
Muat font kustom dari direktori
asset/fonts/proyek Anda.private Typeface mTypeface; public CustomStyleWebVttResolver(Context context) { super(context); initializeFonts(context); } private void initializeFonts(Context context) { try { // Load font from assets/fonts/ mTypeface = Typeface.createFromAsset(context.getAssets(), "fonts/LongCang.ttf"); } catch (Exception e) { Log.e("Font", "Failed to load font", e); mTypeface = Typeface.DEFAULT; // Safe fallback } }Terapkan font kustom ke subtitle.
@Override protected void applyTextSpans(SpannableStringBuilder builder, VttContentAttribute attr, int start, int end) { // Apply custom font // Must be placed after super.applyTextSpans() to override fonts possibly set by the parent class. // super.applyTextSpans() is optional. 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); } }Dukungan untuk versi Android yang lebih lama: Karena
TypefaceSpandi Android P (API 28) dan sebelumnya tidak mendukung objekTypefacesecara langsung, Anda harus mengimplementasikanMetricAffectingSpankustom./** * Custom Typeface Span class * Inherits from MetricAffectingSpan to correctly apply Typeface during text drawing and measurement. * Solves the issue where standard TypefaceSpan cannot directly use Typeface objects. */ private static class CustomTypefaceSpan extends MetricAffectingSpan { // Custom font to apply private final Typeface typeface; /** * Constructor * * @param typeface Typeface object to apply (must not be null) */ public CustomTypefaceSpan(Typeface typeface) { this.typeface = typeface; } /** * Update text drawing state * Called during actual text drawing to set the paint font. * * @param tp TextPaint object used to draw text */ @Override public void updateDrawState(TextPaint tp) { tp.setTypeface(typeface); } /** * Update text measurement state * Called during text layout calculation (such as width, line breaks) to ensure measurements match actual drawing. * * @param p TextPaint object used to measure text */ @Override public void updateMeasureState(TextPaint p) { p.setTypeface(typeface); } }
Integrasikan ke pemutar.
Inisialisasi tampilan subtitle.
// Initialize subtitleView private void initSubtitleView() { // Get context Context context = getContext(); // Create CustomStyleWebVttResolver CustomStyleWebVttResolver mResolver = new CustomStyleWebVttResolver(context); // Create VttSubtitleView and pass CustomStyleWebVttResolver VttSubtitleView mVttSubtitleView = new VttSubtitleView(context, mResolver); // Add to video container rootView.addView(mVttSubtitleView); }Ikat callback subtitle eksternal.
// Configure subtitle listener 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) { // Show subtitle mVttSubtitleView.show(id, data); } } @Override public void onSubtitleHide(int trackIndex, long id) { // Hide subtitle mVttSubtitleView.dismiss(id); } @Override public void onSubtitleHeader(int i, String header) { if (!TextUtils.isEmpty(header)) { // Apply WebVTT header styles mVttSubtitleView.setVttHeader(header); } } });
Aktifkan pemutaran hanya audio
Anda dapat menonaktifkan kemampuan tampilan untuk gambar video guna mengaktifkan pemutaran hanya audio. Sebelum memanggil metode prepare, konfigurasikan kelas PlayerConfig.
PlayerConfig config = aliPlayer.getConfig();
config.mDisableVideo = true; // Enable audio-only playback.
aliPlayer.setConfig(config);Ganti antara decoding software dan decoding hardware
Anda harus mengubah metode decoding sebelum pemutaran dimulai. Perubahan yang dilakukan selama pemutaran tidak berlaku.
SDK ApsaraVideo Player untuk Android mendukung decoding hardware berdasarkan standar H.264 dan H.265. Anda dapat memanggil enableHardwareDecoder untuk mengaktifkan atau menonaktifkan decoding hardware. Secara default, decoding hardware diaktifkan. Jika inisialisasi decoding hardware gagal, sistem beralih ke decoding software untuk memastikan pemutaran normal. Contoh kode:
// Enable hardware decoding. Hardware decoding is enabled by default.
aliPlayer.enableHardwareDecoder(true);Jika decoding hardware beralih ke decoding software, callback onInfo dipanggil. Contoh kode:
mApsaraPlayerActivity.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if (infoBean.getCode() == InfoCode.SwitchToSoftwareVideoDecoder) {
// Switch to software decoding.
}
}
});Pemutaran adaptif H.265
Jika model saat ini berada dalam daftar hitam model H.265 di cloud atau aliran H.265 gagal didekode, streaming adaptif dipicu. Jika Anda telah mengonfigurasi aliran sekunder H.264, sistem secara otomatis memutar aliran sekunder H.264 tersebut. Jika Anda tidak mengonfigurasi aliran sekunder, decoding software digunakan secara otomatis untuk pemutaran H.265.
Fitur ini hanya tersedia setelah Anda mengaktifkan pemutaran adaptif. Pemutaran adaptif adalah layanan bernilai tambah. Untuk mengaktifkan layanan bernilai tambah, ajukan permintaan di Yida.
Layanan bernilai tambah Adaptive Decoding Terintegrasi Klien-Cloud menyediakan kemampuan berikut: pengiriman dinamis data kompatibilitas untuk decoding hardware sisi cloud dan downgrade adaptif aliran H.265 ke aliran H.264.
Jika Anda tidak mengaktifkan layanan pemutaran adaptif, SDK pemutar masih dapat secara otomatis menggunakan decoding software ketika decoding hardware gagal.
Contoh kode berikut menjelaskan cara mengonfigurasi aliran sekunder:
// Create a map on the application layer to store the primary stream URLs and secondary stream URLs as key-value pairs. The system queries the corresponding secondary URL based on the primary stream URL during switching.
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 "";
}
}
});Streaming bitrate adaptif
Anda dapat mentranskode video ke aliran bitrate adaptif HTTP Live Streaming (HLS) menggunakan kelompok template transkoding ApsaraVideo VOD. Untuk informasi lebih lanjut, lihat Konfigurasi streaming bitrate adaptif untuk video on demand.
Jika Anda menggunakan pemutaran berbasis Vid untuk aliran bitrate adaptif yang ditranskode oleh ApsaraVideo VOD, Anda harus menentukan
DEFINITION_AUTOsebagai definisi pemutaran default. Hal ini memungkinkan pemutar memperoleh dan memutar aliran bitrate adaptif. Jika Anda tidak menentukan AUTO sebagai definisi pemutaran default, pemutar secara otomatis memutar aliran video dalam definisi rendah. Untuk informasi lebih lanjut tentang urutan pemutaran berdasarkan definisi video, lihat Definisi video mana yang diputar SDK Pemutar secara default ketika beberapa definisi tersedia?. Contoh kode berikut memberikan contoh cara menentukan definisi pemutaran default untuk pemutaran berbasis VidAuth:VidAuth vidAuth = new VidAuth(); List<Definition> list = new ArrayList<>(); list.add(Definition.DEFINITION_AUTO); vidAuth.setDefinition(list);
SDK ApsaraVideo Player untuk Android mendukung streaming bitrate adaptif aliran video HLS atau DASH. Setelah metode prepare dipanggil, panggil getMediaInfo untuk memperoleh informasi bitrate yang ditunjukkan oleh TrackInfo. Contoh kode:
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();Selama pemutaran, Anda dapat memanggil metode selectTrack untuk mengganti bitrate. Jika Anda menentukan AUTO_SELECT_INDEX, streaming bitrate adaptif diaktifkan. Contoh kode:
int index = trackInfo.getIndex();
// Switch the bitrate.
aliPlayer.selectTrack(index);
// Enable adaptive bitrate streaming.
aliPlayer.selectTrack(TrackInfo.AUTO_SELECT_INDEX);Hasil pergantian dikembalikan dalam callback OnTrackChangedListener. Anda harus mengonfigurasi callback OnTrackChangedListener sebelum memanggil selectTrack. Contoh kode:
aliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) {
// The bitrate switching is successful.
}
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
// The bitrate switching fails. You can call the errorInfo.getMsg() method to find the cause of the failure.
}
});Opsional. Sebelum memanggil metode selectTrack untuk mengganti aliran kode pemutaran ke bitrate adaptif, Anda dapat menentukan parameter config untuk mengatur definisi maksimum bitrate adaptif guna menghindari pergantian otomatis ke bitrate yang tidak diharapkan. Kami menyarankan Anda mengeksekusi kode berikut sebelum pemutar memanggil metode prepare atau pemutar daftar memanggil metode moveTo agar berlaku:
PlayerConfig config = aliPlayer.getConfig();
config.mMaxAllowedAbrVideoPixelNumber = 921600; //Set the number of pixels that corresponds to the upper limit of adaptive bitrate to 921,600 (length × width= 1280 × 720). This way, the number of pixels that corresponds to the definition is equal to or smaller than this value.
aliPlayer.setConfig(config);Ambil snapshot
SDK ApsaraVideo Player untuk Android menyediakan metode snapshot untuk mengambil snapshot video. Saat mengambil snapshot, pemutar menyimpan data sumber gambar video dan mengonversinya ke bitmap. Anda kemudian dapat memanggil OnSnapShotListener untuk memperoleh bitmap tersebut. Contoh kode:
// Set the callback for snapshot capture.
aliPlayer.setOnSnapShotListener(new OnSnapShotListener(){
@Override
public void onSnapShot(Bitmap bm, int with, int height){
// Obtain the bitmap and the width and height of the video image.
}
});
// Capture a snapshot of the current video image.
aliPlayer.snapshot();Pratinjau
SDK ApsaraVideo Player untuk Android mengintegrasikan konfigurasi khusus ApsaraVideo VOD untuk mendukung pratinjau video. Hanya sumber VidSts dan VidAuth yang dapat dipratinjau. Kami menyarankan Anda hanya mempratinjau sumber VidAuth di ApsaraVideo VOD. Untuk informasi lebih lanjut tentang cara mengonfigurasi dan menggunakan fitur pratinjau, lihat Pratinjau video.
Setelah mengaktifkan fitur pratinjau, Anda dapat memanggil metode VidPlayerConfigGen.setPreviewTime() untuk menentukan durasi pratinjau. Contoh kode berikut memberikan contoh cara menentukan durasi pratinjau untuk pemutaran berbasis VidSts:
VidSts vidSts = new VidSts;
....
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
configGen.setPreviewTime(20);// Set the preview duration to 20 seconds.
vidSts.setPlayConfig(configGen);// Specify the video source.
...Saat Anda mengatur durasi pemutaran uji coba dan memutar video menggunakan SDK pemutar Android, server mengembalikan konten segmen uji coba alih-alih konten video lengkap.
Anda dapat memanggil VidPlayerConfigGen untuk mengonfigurasi parameter permintaan yang didukung oleh server. Untuk informasi lebih lanjut, lihat Deskripsi parameter permintaan.
Fitur pratinjau tidak didukung untuk file Flash Video (FLV) dan MP3.
Konfigurasikan blacklist
SDK ApsaraVideo Player untuk Android memungkinkan Anda mengonfigurasi blacklist untuk decoding hardware. Jika decoding hardware tidak diizinkan untuk perangkat tertentu, Anda dapat menggunakan decoding software untuk mencegah kegagalan decoding. Contoh kode:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.model="Lenovo K320t";
AliPlayerFactory.addBlackDevice(BlackType.HW_Decode_H264 ,deviceInfo );Blacklist menjadi tidak berlaku setelah aplikasi keluar.
Atur Referer
SDK ApsaraVideo Player untuk Android menyediakan kelas PlayerConfig untuk mengatur Referer permintaan. Anda dapat menggunakan Referer bersama dengan daftar putih atau blacklist Referer yang dikonfigurasi di konsol ApsaraVideo VOD untuk mengimplementasikan kontrol akses. Contoh kode berikut memberikan contoh:
// Obtain the configuration information.
PlayerConfig config = aliPlayer.getConfig();
// Set the Referer. Example: http://example.aliyundoc.com. You must add the protocol header when you set the Referer.
config.mReferrer = referrer;
....// Configure other settings.
// Configure the settings for the player.
aliPlayer.setConfig(config);Tentukan header User-Agent
SDK ApsaraVideo Player untuk Android menyediakan kelas PlayerConfig untuk menentukan user agent permintaan. Setelah menentukan header User-Agent, pemutar menyertakan informasi user agent dalam permintaannya. Contoh kode:
// Obtain the configuration information.
PlayerConfig config = aliPlayer.getConfig();
// Set the user agent.
config.mUserAgent = "Required user agent";
....// Configure other settings.
// Configure the settings for the player.
aliPlayer.setConfig(config);Atur periode timeout jaringan dan jumlah percobaan ulang
SDK ApsaraVideo Player untuk Android menyediakan kelas PlayerConfig untuk mengatur periode timeout jaringan dan jumlah percobaan ulang. Contoh kode:
// Obtain the configuration information.
PlayerConfig config = aliPlayer.getConfig();
// Specify the network timeout period. Unit: millisecond.
config.mNetworkTimeout = 5000;
// Specify the maximum number of retries upon a network timeout. The retry interval equals the timeout period specified by the NetworkTimeout parameter. The NetworkRetryCount parameter specifies the number of retries. A value of 0 indicates zero retry. The application determines the number of retries. Default value: 2.
config.mNetworkRetryCount=2;
....// Configure other settings.
// Configure the settings for the player.
aliPlayer.setConfig(config);Jika Anda mengatur parameter NetworkRetryCount ke nilai selain 0, pemutar mencoba ulang pemutaran saat mulai memuat data karena kesalahan jaringan. Jumlah maksimum percobaan ulang sama dengan nilai parameter NetworkRetryCount. Interval percobaan ulang sama dengan nilai parameter NetworkTimeout.
Jika pemuatan berlanjut setelah jumlah maksimum percobaan ulang tercapai, metode
onErrormemanggil callback. Dalam hal ini, metode ErrorInfo.getCode() mengembalikan ErrorCode.ERROR_LOADING_TIMEOUT.Jika Anda mengatur parameter NetworkRetryCount ke 0, metode
onInfomemanggil callback saat terjadi timeout jaringan. Dalam hal ini, InfoBean.getCode() mengembalikan InfoCode.NetworkRetry. Untuk menyelesaikan masalah tersebut, Anda dapat memanggil metodereloadSDK ApsaraVideo Player untuk Android guna memuat ulang paket jaringan atau melakukan operasi lain yang diperlukan.
Kontrol buffer dan latensi
SDK ApsaraVideo Player untuk Android menyediakan kelas PlayerConfig untuk mengonfigurasi pengaturan buffer dan latensi. Contoh kode:
Konfigurasikan header HTTP
SDK ApsaraVideo Player untuk Android menyediakan kelas PlayerConfig untuk menambahkan header HTTP ke permintaan. Contoh kode:
// Obtain the configuration information.
PlayerConfig config = aliPlayer.getConfig();
// Define a header.
String[] headers = new String[1];
headers[0]="Host:example.com"; // For example, add the host information to the header.
// Configure the headers.
config.setCustomHeaders(headers);
....// Configure other settings.
// Configure the settings for the player.
aliPlayer.setConfig(config);Gambar-dalam-Gambar (PiP)
Untuk contoh kode detail, lihat modul API-Example Pemutaran PiP (PictureInPicture). Proyek ini adalah proyek contoh Android untuk SDK ApsaraVideo Player yang ditulis dalam Java. Ini membantu developer dengan cepat menguasai integrasi inti SDK.
Prosedur:
Dalam file
AndroidManifest.xml, deklarasikan izin PiP.<activity android:name=".PictureInPictureActivity" android:exported="true" android:supportsPictureInPicture="true" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" />Alihkan
Activitytarget ke mode PiP.Rational aspectRatio = new Rational(16, 9); // Aspect ratio for PiP. Adjust based on your business needs. PictureInPictureParams.Builder pipBuilder = new PictureInPictureParams.Builder(); pipBuilder.setAspectRatio(aspectRatio); enterPictureInPictureMode(pipBuilder.build());Anda dapat memicu mode PiP dari event OnClick, saat meninggalkan aplikasi, atau saat kembali ke aplikasi. Metode implementasinya sebagai berikut:
Pemicu OnClick (event klik)
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Rational aspectRatio = new Rational(16, 9); // Aspect ratio for PiP 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); // Aspect ratio for PiP PictureInPictureParams.Builder pipBuilder = new PictureInPictureParams.Builder(); pipBuilder.setAspectRatio(aspectRatio); enterPictureInPictureMode(pipBuilder.build()); Log.e(TAG, "PiP onUserLeaveHint"); }Pemicu saat kembali ke aplikasi
@Override public void onBackPressed() { super.onBackPressed(); // Trigger from back press enterPictureInPictureMode(); }Tangani UI untuk tampil/sembunyi PiP.
@Override public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); if (isInPictureInPictureMode) { // Handle entering PiP mode // Hide UI Log.e(TAG, "Entered PiP mode"); } else { // Handle exiting PiP mode // Show UI Log.e(TAG, "Exited PiP mode"); } }
Degradasi Streaming Langsung RTS
Untuk contoh kode detail, lihat modul API-Example Streaming langsung RTS ultra-latensi rendah (RtsLiveStream). Proyek ini adalah proyek contoh Android untuk SDK ApsaraVideo Player yang ditulis dalam Java. Ini membantu developer dengan cepat menguasai integrasi inti SDK.
Untuk informasi lebih lanjut, lihat Streaming langsung RTS.
Ganti antara saluran audio kiri dan kanan
SDK ApsaraVideo Player untuk Android menggunakan metode setOutputAudioChannel untuk menentukan saluran audio output. Jika sumber input berisi dua saluran audio, Anda dapat mengganti antara saluran audio kiri dan kanan. Jika sumber input hanya berisi satu saluran audio, konfigurasi outputAudioChannel tidak berlaku.
Pengaturan saluran output berikut memengaruhi rendering audio dan callback data PCM.
/*
Specify OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_LEFT to use the left audio channel for playback.
Specify OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_RIGHT to use the right audio channel for playback.
Specify OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_NONE to use the audio channel settings of the input file.
*/
aliPlayer.setOutputAudioChannel();Uraikan aliran audio
Anda dapat mengonfigurasi listener untuk memperoleh informasi tentang aliran audio dan video. Aliran audio dan video terenkripsi tidak dapat diuraikan.
Atur Warna Latar Belakang Video
Anda dapat mengatur warna latar belakang pemutar saat menggunakan SDK ApsaraVideo Player untuk Android. Contoh kode berikut memberikan contoh cara mendeklarasikan dan memanggil metode:
Contoh API
/**
* Set the background color of the video.
*
* @param color ARGB
*
*/
/****
* Set video background color
* @param color ARGB
*/
abstract public void setVideoBackgroundColor(int color);Catatan Penggunaan
// The parameter value is an eight-digit hexadecimal ARGB color value. The first two digits of an eight-digit ARGB color value represent alpha, the next two represent red, the next two represent green, and the last two represent blue.
// For example, a value of 0x0000ff00 specifies green.
aliPlayer.setVideoBackgroundColor(0x0000ff00);Tentukan nama domain untuk pemutaran berbasis vidAuth
Metode vidAuth memungkinkan Anda menentukan bidang seperti nama domain yang terkait dengan vid. Untuk detail tentang bidang yang didukung, lihat Parameter permintaan GetPlayInfo. API dan penggunaannya dijelaskan di bawah ini:
Contoh API
/**
* Set the playback parameters.
*
* @param playConfig The playback parameters.
*/
public void setPlayConfig(VidPlayerConfigGen playConfig);Catatan penggunaan
Tentukan parameter playDomain saat memanggil addPlayerConfig di VidPlayerConfigGen.
vidAuth = new VidAuth();
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
// Add the playDomain field. For more information about configurable fields, see:
// 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 decoding H.266
H.266 (VVC/Versatile Video Coding), sebagai standar pengkodean video terbaru, secara signifikan mengurangi bitrate sambil mempertahankan kualitas visual yang sama. Untuk mengoptimalkan performa dan mengontrol ukuran SDK utama, kemampuan decoding H.266 dikemas sebagai plugin terpisah untuk integrasi sesuai permintaan.
Prasyarat
Versi SDK pemutar atau all-in-one adalah V7.6.0 atau yang lebih baru.
Anda telah memperoleh lisensi Edisi Profesional. Untuk detailnya, lihat Dapatkan lisensi SDK Pemutar.
ApsaraVideo Player dengan plugin decoding H.266 hanya mendukung pemutaran video H.266 yang dikodekan oleh transkoding ApsaraVideo VOD.
Integrasikan plugin
Aktifkan plugin
Mulai dari SDK ApsaraVideo Player V7.7.0, plugin diaktifkan secara default setelah integrasi. Tidak diperlukan aktivasi manual.
AliPlayerGlobalSettings.enableCodecPlugin("vvc", true);Kode kesalahan terkait
Untuk kode kesalahan terkait plugin decoding H.266, lihat Masalah umum lintas platform.
Segarkan otomatis sumber pemutaran
Mengaktifkan penyegaran otomatis sumber pemutaran mencegah gangguan pemutaran yang disebabkan oleh kedaluwarsa autentikasi. Fitur ini memicu listener saat sumber kedaluwarsa dan mengambil URL baru untuk memastikan pemutaran video berkelanjutan dan lancar.
Prasyarat
Versi SDK pemutar atau all-in-one adalah V7.9.0 atau yang lebih baru.
Anda menggunakan sumber VidAuth untuk pemutaran atau telah mengonfigurasi penandatanganan URL untuk bisnis Anda.
Sumber VidAuth
Contoh antarmuka
/**
* Set the VidAuth source expiration listener.
*
* This feature enables automated VidAuth source refresh to avoid playback interruptions
* caused by expiration. When the listener is triggered, you can refresh the VidAuth source
* and return the updated VidAuth using {@link SourceRefreshCallback#onSuccess}.
*
* @param listener The interface for listening to VidAuth source expiration events. See {@link OnVidAuthExpiredListener}.
*/
/****
* Sets the listener for VidAuth source expiration events.
*
* This feature enables automated VidAuth source refresh to avoid playback interruptions
* caused by expiration. When the listener is triggered, you can refresh the VidAuth source
* and return the updated VidAuth using {@link SourceRefreshCallback#onSuccess}.
*
* @param listener The interface for listening to VidAuth source expiration events. See {@link OnVidAuthExpiredListener}.
*
*/
abstract public void setOnVidAuthExpiredListener(OnVidAuthExpiredListener listener);Komposisi fitur
UrlSource sumber
Contoh antarmuka
/**
* Set the URL source expiration listener.
*
* This feature enables URL refresh to avoid playback interruptions caused by
* URL expiration due to authentication. When the listener is triggered,
* you can refresh the URL source and return the updated URL source using {@link SourceRefreshCallback#onSuccess}.
*
* @param listener Listener for handling URL source expiration events. See {@link OnURLSourceExpiredListener}.
*
* <p>For more information on configuring URL authentication, see
* <a href="https://www.alibabacloud.com/help/zh/vod/user-guide/configure-url-signing?spm=a2c4g.11186623.0.0.560c4140fGh8MW">URL authentication documentation</a>.</p>
*/
/****
* Sets the listener for URL source expiration events.
*
* This feature enables URL refresh to avoid playback interruptions caused by
* URL expiration due to authentication. When the listener is triggered,
* you can refresh the URL source and return the updated URL source using {@link SourceRefreshCallback#onSuccess}.
*
* @param listener Listener for handling URL source expiration events. See {@link OnURLSourceExpiredListener}.
*
* <p>For more information on configuring URL authentication, see
* <a href="https://www.alibabacloud.com/help/zh/vod/user-guide/configure-url-signing?spm=a2c4g.11186623.0.0.560c4140fGh8MW">URL authentication documentation</a>.</p>
*/
abstract public void setOnURLSourceExpiredListener(OnURLSourceExpiredListener listener);Komposisi fitur
Tambahan fungsi utilitas
Ambil metode penandatanganan A sebagai contoh.
Ganti pengontrol antarmuka jaringan (NIC) yang terikat
SDK ApsaraVideo Player untuk Android menyediakan metode AliPlayerGlobalSettings.enableSwitchNIC untuk secara otomatis mengganti NIC selama anomali jaringan, memastikan pemutaran resource yang stabil. Contoh kode:
Metode ini hanya berlaku saat switch diaktifkan dan terdapat beberapa NIC.
AliPlayerGlobalSettings.enableSwitchNIC(true);Performa
Atur skenario pemutaran
Menyetel skenario pemutaran secara otomatis mengonfigurasi parameter optimal (termasuk pengaturan buffer dan pengalihan fitur) berdasarkan skenario tersebut. Parameter kustom yang ditetapkan melalui antarmuka setConfig tetap berlaku (pengaturan kustom didahulukan).
Anda dapat melihat konfigurasi parameter dengan memanggil antarmuka
getConfigsetelah menyetel skenario pemutaran.
Contoh antarmuka
/**
* Set the player scene.
*
* @param scene.
*/
/****
* Set the player scene.
*
* @param scene.
*/
abstract public void setPlayerScene(PlayerScene scene);Skenario pemutaran
public enum PlayerScene {
/**
* Scene: none
*/
/****
* scene none
*/
NONE,
/**
* Long video scene: applies to videos longer than 30 minutes
*/
/****
* long scene: apply to more than 30min
*/
LONG,
/**
* Medium video scene: applies to videos 5 to 30 minutes long
*/
/****
* middle scene: apply to 5min-30min
*/
MEDIUM,
/**
* Short video scene: applies to videos up to 5 minutes long
*/
/****
* short scene: apply to 0s-5min
*/
SHORT,
/**
* Live streaming scene
*/
/****
* live scene
*/
LIVE,
/**
* Ultra-low-latency live streaming scene
*/
/****
* RTS live scene
*/
RTS_LIVE
}Catatan penggunaan
// Set the short video scene
aliPlayer.setPlayerScene(PlayerScene.SHORT)
// Set the medium video scene
aliPlayer.setPlayerScene(PlayerScene.MEDIUM)
// Set the long video scene
aliPlayer.setPlayerScene(PlayerScene.LONG)
// Set the live streaming scene
aliPlayer.setPlayerScene(PlayerScene.LIVE)Pre-rendering
SDK ApsaraVideo Player untuk Android mendukung pre-rendering frame pertama sebelum pemutaran dimulai. Hal ini meningkatkan durasi pemuatan startup.
Fitur ini dinonaktifkan secara default.
Anda harus mengonfigurasi
Viewsebelum memanggilPrepareuntuk memastikan frame dirender keViewsegera setelah persiapan.Setelah mengaktifkan fitur ini, urutan pemicuan persiapan sukses dan event rendering frame pertama berubah: Tanpa mengaktifkan fitur ini, persiapan sukses dipicu terlebih dahulu, diikuti oleh rendering frame pertama. Dengan fitur ini diaktifkan, rendering frame pertama mungkin dipicu sebelum persiapan sukses karena perbedaan kecepatan decoding dan rendering. Hal ini tidak memengaruhi pemutaran.
Berikut adalah contohnya:
aliPlayer.setOption(ALLOW_PRE_RENDER, 1);Cache lokal
Untuk contoh kode detail, lihat modul API-Example Preload video (Preload). Proyek ini adalah proyek contoh Android untuk SDK ApsaraVideo Player yang ditulis dalam Java. Ini membantu developer dengan cepat menguasai integrasi inti SDK.
SDK ApsaraVideo Player untuk Android memungkinkan Anda menyimpan cache video selama pemutaran. Hal ini mengurangi waktu pemuatan startup, mempercepat proses pencarian, mengurangi latensi pemutaran, dan mengurangi konsumsi trafik selama putar ulang berulang.
Aktifkan caching lokal
Fitur cache lokal dinonaktifkan secara default. Untuk menggunakannya, Anda harus mengaktifkannya secara manual. Ini dikontrol oleh enableLocalCache di AliPlayerGlobalSettings. Berikut adalah contohnya:
Jika URL pemutaran file video berisi parameter autentikasi, nilai parameter autentikasi berubah selama caching lokal dan pemutaran file video. Anda dapat memanggil operasi
setCacheUrlHashCallbackuntuk menghitung nilai hash MD5 setelah menghapus parameter autentikasi. Misalnya,http://****.mp4?aaaadalah URL pemutaran file video yang berisi parameter autentikasi. Dalam hal ini, URLhttp://****.mp4digunakan untuk menghitung nilai hash MD5 saat file video dimuat. Namun, jika Anda menghitung nilai hash MD5 setelah menghapus parameter autentikasi di URL kunci video M3U8 terenkripsi, pemutaran gagal karena video yang berbeda terkena URL kunci yang sama. Solusi: Hapus parameter autentikasi hanya dari URL pemutaranhttp(s)://xxxxx.m3u8?aaaatetapi bukan URL kuncihttp(s)://yyyyy?bbbbdi callbacksetCacheUrlHashCallback.
Jika server menyajikan file media yang sama melalui HTTP dan HTTPS, Anda dapat menghapus header permintaan atau menstandarkannya sebelum menghitung nilai hash. Misalnya:
Jika URL pemutaran file video adalah
https://****.mp4danhttp://****.mp4, nilai hash MD5 dihitung menggunakan****.mp4saat file video dimuat.Jika URL pemutaran file video adalah
https://****.mp4, nilai hash MD5 dihitung menggunakan URLhttp://****.mp4saat file video dimuat.
Untuk SDK ApsaraVideo Player V5.5.4.0 atau yang lebih baru, jika Anda ingin memutar aliran HLS yang URL pemutarnya berisi parameter autentikasi, konfigurasikan
PlayerConfig.mEnableStrictAuthModeuntuk menentukan mode autentikasi. Untuk versi lama, nilai defaultnya false. Untuk V7.13.0 atau yang lebih baru, nilai defaultnya true.false: menyimpan cache informasi autentikasi. Jika video tidak sepenuhnya di-cache, pemutar mengirim permintaan penandatanganan URL menggunakan informasi autentikasi yang di-cache saat Anda memutar konten video yang belum di-cache. Jika periode validitas URL yang ditandatangani pendek, atau jika Anda melanjutkan pemutaran setelah jeda panjang, autentikasi mungkin kedaluwarsa. Dalam hal ini, integrasikan fitur segarkan otomatis sumber pemutaran untuk menangani kedaluwarsa autentikasi.
Autentikasi ketat (true): Autentikasi tidak di-cache dan dilakukan setiap kali pemutaran dimulai. Tanpa koneksi jaringan, pemutaran akan gagal.
Aktifkan atau nonaktifkan caching lokal untuk satu URL
Anda dapat mengaktifkan atau menonaktifkan caching lokal untuk satu URL di player config.
// Obtain the configuration information.
PlayerConfig config = aliPlayer.getConfig();
// Configure whether to enable local caching for the playback URL. Default value: true. Local caching for the URL takes effect only when local caching is enabled in AliPlayerGlobalSettings and the value of this parameter is true. If the value of this parameter is false, the local caching for the URL is disabled.
config.mEnableLocalCache = false;
....// Configure other settings.
// Configure the settings for the player.
aliPlayer.setConfig(config);Preload
SDK ApsaraVideo Player untuk Android mendukung preload video, yang merupakan peningkatan dari fitur caching lokal. Fitur preload video memungkinkan Anda menentukan ukuran maksimum memori yang dapat ditempati oleh video yang di-cache. Hal ini membantu mengurangi durasi pemuatan startup.
Fitur ini memiliki batasan berikut:
Anda hanya dapat melakukan preload satu file MP4, MP3, FLV, atau HLS sekaligus.
Secara default, penjadwalan resource jaringan diaktifkan saat Anda menggunakan SDK ApsaraVideo Player untuk Android melakukan preload video. Hal ini memastikan kualitas video yang sedang diputar. Jika penjadwalan resource jaringan diaktifkan, permintaan preload hanya dikirim setelah konten buffer video yang sedang diputar mencapai batas tertentu. Anda dapat menonaktifkan penjadwalan resource jaringan jika ingin mengelola permintaan preload real-time.
AliPlayerGlobalSettings.enableNetworkBalance(false);Aktifkan fitur caching lokal. Untuk informasi lebih lanjut, lihat Konfigurasikan caching lokal.
Konfigurasikan sumber data.
VidAuth (disarankan)
VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Vid information");// Required. The ID of the video. vidAuth.setPlayAuth("<yourPlayAuth>");// Required. The playback credential, which is generated by calling GetVideoPlayAuth. vidAuth.setRegion("Access region");// For Player SDK V5.5.5.0 or later, this parameter is deprecated. The player automatically parses the region information. For Player SDK V5.5.5.0 or earlier, this parameter is required. Specify the ID of the region in which ApsaraVideo VOD is activated for this parameter. Default value: cn-shanghai. vidAuth.setQuality("Selected definition") //"AUTO" indicates adaptive bitrateVidSts
VidSts vidSts = new VidSts(); vidSts.setVid("Vid information");// Required. The ID of the video. vidSts.setAccessKeyId("<yourAccessKeyId>");// Required. The AccessKey ID that is generated when the temporary STS token is issued. To generate the AccessKey ID, call the AssumeRole operation in STS. vidSts.setAccessKeySecret("<yourAccessKeySecret>");// Required. The AccessKey secret that is generated when the temporary STS token is issued. To generate the AccessKey secret, call the AssumeRole operation in STS. vidSts.setSecurityToken("<yourSecurityToken>");// Required. The STS token. To obtain the STS token, call the AssumeRole operation in STS. vidSts.setRegion("Access region");// Required. The region in which ApsaraVideo VOD is activated. Default value: cn-shanghai. vidSts.setQuality("Selected definition") //"AUTO" indicates adaptive bitrateUrlSource
UrlSource urlSource = new UrlSource(); urlSource.setUri("Playback URL");// Required. The playback URL can be the URL of an audio file or video file in ApsaraVideo VOD or on a third-party video-on-demand (VOD) platform.Konfigurasikan parameter tugas.
CatatanIni hanya berlaku untuk video multi-bitrate. Pilih salah satu dari
setDefaultBandWidth,setDefaultResolution, dansetDefaultQuality.PreloadConfig preloadConfig = new PreloadConfig(); // Set the bitrate for multi-bitrate streams preloadConfig.setDefaultBandWidth(400000); // Set the resolution for multi-bitrate streams preloadConfig.setDefaultResolution(640 * 480); // Set the quality for multi-bitrate streams preloadConfig.setDefaultQuality("FD"); // Set the preload duration preloadConfig.setDuration(1000);Tambahkan listener tugas.
Buat tugas dan tambahkan ke instans
MediaLoaderV2untuk memulai preload.VidAuth (disarankan)
// Build the preload task PreloadTask mPreloadTask = new PreloadTask(vidAuth, preloadConfig); // Get the MediaLoaderV2 instance MediaLoaderV2 mediaLoaderV2 = MediaLoaderV2.getInstance(); // Add the task and start preloading String taskId = mediaLoaderV2.addTask(mPreloadTask, PreloadListenerImpl)VidSts
// Build the preload task PreloadTask mPreloadTask = new PreloadTask(vidSts, preloadConfig); // Get the MediaLoaderV2 instance MediaLoaderV2 mediaLoaderV2 = MediaLoaderV2.getInstance(); // Add the task and start preloading String taskId = mediaLoaderV2.addTask(mPreloadTask, PreloadListenerImpl);UrlSource
// Build the preload task PreloadTask mPreloadTask = new PreloadTask(urlSource, preloadConfig); // Get the MediaLoaderV2 instance MediaLoaderV2 mediaLoaderV2 = MediaLoaderV2.getInstance(); // Add the task and start preloading String taskId = mediaLoaderV2.addTask(mPreloadTask, PreloadListenerImpl)Opsional: Kelola tugas.
mediaLoaderV2.cancelTask(taskId);// Cancel the preload task with the specified task ID mediaLoaderV2.pauseTask(taskId);// Pause the preload task with the specified task ID mediaLoaderV2.resumeTask(taskId);// Resume the preload task with the specified task IDOpsional: Hapus file yang dimuat.
Anda dapat menghapus file yang dimuat untuk menghemat ruang. SDK ApsaraVideo Player untuk Android tidak menyediakan metode untuk menghapus file yang dimuat. Anda harus menghapus file di direktori yang sesuai dalam aplikasi Anda.
Preload dinamis
Fitur preload dinamis memungkinkan Anda mengelola cache video yang sedang diputar dan video yang dipreloads. Anda juga dapat mengontrol jumlah video yang dipreloads. Hal ini membantu menjaga keseimbangan antara pengalaman pemutaran dan biaya.
Preload video HLS multi-bitrate
Anda dapat melakukan preload video dalam definisi yang sama dengan aliran video saat ini saat memanggil metode listPlayer selama pemutaran video HLS multi-bitrate. Anda dapat menggunakan mode preload berbeda sesuai kebutuhan.
Peroleh kecepatan unduh
SDK ApsaraVideo Player untuk Android menyediakan metode getExtraValue untuk mengkueri kecepatan unduh video tertentu. Callback onInfo dipanggil untuk memperoleh hasil kueri. Contoh kode:
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentDownloadSpeed){
// The download speed.
long extraValue = infoBean.getExtraValue();
}
}
});Atribut Jaringan
HTTPDNS
Fitur HTTPDNS menggunakan teknologi resolusi DNS untuk mengirim permintaan resolusi nama domain ke server HTTPDNS tertentu dan memperoleh hasil resolusi dengan cepat dan stabil. Hal ini mencegah pembajakan DNS.
SDK ApsaraVideo Player menyediakan layanan HTTPDNS untuk nama domain yang dipercepat oleh Alibaba Cloud CDN. Anda dapat menggunakan fitur HTTPDNS yang disempurnakan untuk mengimplementasikan penjadwalan tepat dan memastikan hasil resolusi domain real-time segera berlaku. Hal ini meningkatkan performa jaringan.
Contoh kode untuk menggunakan fitur HTTPDNS yang disempurnakan
Anda hanya dapat menggunakan fitur HTTPDNS yang disempurnakan untuk nama domain yang dipercepat. Sebelum menggunakan fitur tersebut, pastikan nama domain yang dipercepat telah ditambahkan dan dikonfigurasi. Untuk informasi lebih lanjut tentang cara menambahkan dan mengonfigurasi nama domain untuk CDN di ApsaraVideo VOD, lihat Tambahkan nama domain yang dipercepat. Untuk informasi lebih lanjut tentang nama domain yang dipercepat, lihat Apa itu Alibaba Cloud CDN?.
// Enable the enhanced HTTPDNS feature.
AliPlayerGlobalSettings.enableEnhancedHttpDns(true);
// Optional. Add an HTTPDNS pre-resolved domain name.
DomainProcessor.getInstance().addPreResolveDomain("player.***alicdn.com");HTTP/2
Secara default, HTTP/2 diaktifkan untuk SDK ApsaraVideo Player untuk Android V5.5.0.0 atau yang lebih baru.
SDK ApsaraVideo Player untuk Android mendukung HTTP/2. Anda dapat mengaktifkan HTTP/2 untuk mengimplementasikan multiplexing permintaan. Hal ini mencegah blocking head-of-line (HOL) dan meningkatkan performa pemutaran. Contoh kode:
AliPlayerGlobalSettings.setUseHttp2(true);Buat koneksi TCP sebelum permintaan pemutaran diinisiasi melalui HTTP
Anda dapat membuat koneksi Transmission Control Protocol (TCP) sebelum permintaan pemutaran diinisiasi melalui HTTP. Hal ini mengurangi waktu tunggu, memastikan ketepatan waktu dan konsistensi pemutaran video, meningkatkan pengalaman pengguna, dan mengoptimalkan penggunaan resource jaringan dan sistem. Contoh kode:
// Specify the domain parameter in the host[:port] format. Separate multiple domain names with semicolons (;). The port parameter is optional.
// Configure globally.
// Add or delete TCP connections. If you specify an empty string, no TCP connections are created.
AliPlayerGlobalSettings.setOption(AliPlayerGlobalSettings.SET_PRE_CONNECT_DOMAIN, "domain1;domain2");Unduh Video
Untuk contoh kode detail, lihat modul API-Example Unduh video dan pemutaran offline (Download). Proyek ini adalah proyek contoh Android untuk SDK ApsaraVideo Player yang ditulis dalam Java. Ini membantu developer dengan cepat menguasai integrasi inti SDK.
SDK ApsaraVideo Player untuk Android memungkinkan Anda mengunduh video ke perangkat lokal untuk pemutaran offline di ApsaraVideo Player. Mode unduh normal dan mode unduh aman didukung.
Unduh normal
Video yang diunduh dalam mode unduh normal tidak dienkripsi oleh Alibaba Cloud dan dapat diputar menggunakan pemutar pihak ketiga.
Unduh aman
Video yang diunduh dalam mode unduh aman dienkripsi oleh Alibaba Cloud. Anda tidak dapat menggunakan pemutar pihak ketiga untuk memutar video yang diunduh. Anda hanya dapat menggunakan ApsaraVideo Player untuk memutarnya.
Catatan penggunaan
Anda hanya dapat mengunduh video yang diputar berdasarkan VidSts atau VidAuth.
Untuk menggunakan fitur unduh video, Anda harus mengaktifkan fitur tersebut dan mengonfigurasi mode unduh di konsol ApsaraVideo VOD. Untuk informasi lebih lanjut, lihat Unduh offline.
Anda dapat melanjutkan unduhan video.
Prosedur
Opsional. Konfigurasikan file keamanan untuk verifikasi enkripsi. Anda hanya perlu mengonfigurasi file keamanan saat menggunakan mode unduh aman.
CatatanPastikan informasi dalam file keamanan untuk verifikasi enkripsi sesuai dengan informasi aplikasi. Jika tidak, unduhan video gagal.
Jika Anda menggunakan mode unduh aman, Anda harus mengonfigurasi file kunci yang dihasilkan di konsol ApsaraVideo VOD di SDK Pemutar. File kunci digunakan untuk mendekripsi dan memverifikasi video untuk diunduh dan diputar. Untuk informasi lebih lanjut tentang cara menghasilkan file kunci, lihat bagian Aktifkan unduh aman dalam topik "Konfigurasikan pengaturan unduh".
Kami menyarankan Anda mengonfigurasi pengaturan ini hanya sekali dalam aplikasi. Contoh berikut menunjukkan cara melakukannya:
PrivateService.initService(getApplicationContext(), "The path in which the encryptedApp.dat file is stored"); // We recommend that you store the encryptedApp.dat file on your mobile phone and set this parameter to the path in which the file is stored.Buat dan konfigurasikan pengunduh video.
Buat pengunduh menggunakan AliDownloaderFactory. Contoh kode:
AliMediaDownloader mAliDownloader = null; ...... // Create a downloader. mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); // Set the path for storing downloaded files. mAliDownloader.setSaveDir("The storage path");Konfigurasikan listener.
Pengunduh menyediakan beberapa listener. Contoh kode:
Siapkan sumber unduhan.
Anda dapat memanggil metode
prepareuntuk menyiapkan sumber unduhan. Sumber VidSts dan VidAuth didukung. Contoh kode:VidSts
// Create a VidSts instance. VidSts aliyunVidSts = new VidSts(); aliyunVidSts.setVid("Vid information"); // The video ID (VideoId). aliyunVidSts.setAccessKeyId("<yourAccessKeyId>"); // The AccessKey ID of the temporary STS AccessKey pair. You must generate this by calling the AssumeRole operation of Security Token Service (STS). aliyunVidSts.setAccessKeySecret("<yourAccessKeySecret>"); // The AccessKey secret of the temporary STS AccessKey pair. You must generate this by calling the AssumeRole operation of Security Token Service (STS). aliyunVidSts.setSecurityToken("<yourSecurityToken>"); // The Security Token Service (STS) token. You must generate this by calling the AssumeRole operation of Security Token Service (STS). aliyunVidSts.setRegion("Region where the video-on-demand service is deployed"); // The region where the video-on-demand service is deployed. Default value: cn-shanghai. // If you have enabled HLS encryption parameter pass-through in the VOD console and the default parameter name is MtsHlsUriToken, you must configure VidPlayerConfigGen and pass it to vid. For more information, see the following example. // If you have not enabled HLS encryption parameter pass-through in the VOD console, you do not need to integrate the following code. VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); aliyunVidSts.setPlayerConfig(vidConfig); // Prepare the download source. mAliDownloader.prepare(aliyunVidSts);VidAuth
// Create the VidAuth download source. VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Video ID"); // The video ID. vidAuth.setPlayAuth("<yourPlayAuth>");// The playback credential, which is generated by calling GetVideoPlayAuth. vidAuth.setRegion("Access region"); // This parameter is deprecated in ApsaraVideo Player SDK V5.5.5.0 or later. If you use ApsaraVideo Player SDK V5.5.5.0 or later, the player automatically parses the region information. If you use ApsaraVideo Player SDK V5.5.5.0 or earlier, this parameter is required. Specify the ID of the region in which ApsaraVideo VOD is activated for this parameter. Default value: cn-shanghai. // If you have enabled parameter pass-through for HLS encryption in the ApsaraVideo VOD console and the default parameter name is MtsHlsUriToken, you need to set the config parameter and pass it to the VID. For more information, see the following code. VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); vidAuth.setPlayerConfig(config); // Prepare the download source. mAliDownloader.prepare(vidAuth);
CatatanFile output dan file input dalam format yang sama dan tidak dapat diubah.
Jika Anda mengaktifkan parameter pass-through untuk enkripsi HLS di konsol ApsaraVideo VOD, parameter defaultnya adalah MtsHIsUriToken. Untuk informasi lebih lanjut, lihat Parameter pass-through untuk enkripsi HLS. Kemudian, atur nilai MtsHIsUriToken ke sumber ApsaraVideo VOD dengan mengikuti kode di atas.
Setelah persiapan berhasil, pilih item untuk diunduh dan mulai mengunduh.
Setelah persiapan berhasil, callback
OnPreparedListenerdipanggil. Objek TrackInfo berisi informasi seperti definisi video. Pilih track untuk diunduh. Contoh kode:public void onPrepared(MediaInfo mediaInfo) { // Preparation succeeded. List<TrackInfo> trackInfos = mediaInfo.getTrackInfos(); // For example, download the first track. mAliDownloader.selectItem(trackInfos.get(0).getIndex()); // Start downloading. mAliDownloader.start(); }(Opsional) Perbarui sumber unduhan.
Sumber VidSts atau VidAuth mungkin kedaluwarsa sebelum unduhan selesai. Oleh karena itu, kami menyarankan Anda memperbarui sumber unduhan sebelum memulai unduhan. Contoh kode:
// Update the download source. mAliDownloader.updateSource(VidSts); // Start downloading. mAliDownloader.start();Lepaskan pengunduh setelah unduhan berhasil atau gagal.
Setelah unduhan berhasil, panggil callback
onCompletionatauonErroruntuk memanggilreleaseguna melepaskan pengunduh. Contoh kode:mAliDownloader.stop(); mAliDownloader.release();Opsional. Hapus file yang diunduh.
Anda dapat menghapus file yang diunduh selama unduhan atau setelah unduhan selesai. Contoh kode:
// Delete files through the downloader object. mAliDownloader.deleteFile(); // Delete files through the static method. Returns 0 if successful. AliDownloaderFactory.deleteFile("The path of the downloaded folder","Video ID","Video format","Index of the downloaded video");
Langkah selanjutnya
Anda dapat memutar video yang diunduh menggunakan ApsaraVideo Player. Lakukan langkah-langkah berikut:
Setelah unduhan selesai, peroleh jalur mutlak file video.
String path = mAliDownloader.getFilePath();Atur jalur mutlak file video yang diunduh sebagai sumber URL untuk pemutaran.
UrlSource urlSource = new UrlSource(); urlSource.setUri("Playback URL");// Set the absolute path of the downloaded video file. aliPlayer.setDataSource(urlSource);
Mainkan video terenkripsi
SDK ApsaraVideo Player untuk Android memungkinkan Anda memutar video on-demand yang dienkripsi berdasarkan enkripsi HLS, enkripsi privat Alibaba Cloud, atau enkripsi DRM (digital rights management). SDK memungkinkan Anda memutar aliran langsung yang hanya dienkripsi berdasarkan enkripsi DRM. Untuk informasi lebih lanjut tentang cara memutar video terenkripsi, lihat Mainkan video terenkripsi.
Pemutaran Native RTS
SDK Pemutar Android mengintegrasikan SDK Native RTS untuk mengimplementasikan fitur streaming real-time (RTS) secara native. Untuk informasi lebih lanjut, lihat Implementasikan penarikan aliran RTS di Android.