Topik ini menyediakan contoh penggunaan fitur lanjutan SDK ApsaraVideo Player untuk Flutter. Untuk deskripsi lengkap semua fitur, lihat referensi API.
Pemutaran
Putar daftar video pendek
Buat pemain daftar.
FlutterAliListPlayer fAliListPlayer = FlutterAliPlayerFactory.createAliListPlayer();Tambah dan hapus sumber daya.
Pemutar daftar hanya mendukung playback dari UrlSource dan VidSts.
// Parameter uid menentukan ID unik sebuah video. Gunakan UID untuk mengidentifikasi video. Video yang memiliki UID yang sama dianggap identik. fAliListPlayer.addUrlSource(url,uid); fAliListPlayer.addVidSource(vid,uid); fAliListPlayer.removeSource(uid);Atur jumlah video yang akan dipreloading.
Mengatur jumlah video yang dipreloading secara wajar dapat mengurangi waktu startup secara efektif. Kode berikut memberikan contohnya:
// Atur jumlah video yang dipreloading. Total jumlah video yang dimuat dihitung menggunakan rumus berikut: 1 + count × 2. fAliListPlayer.setPreloadCount(count);Putar sumber video.
// Parameter uid wajib diisi. Untuk playback berbasis URL, cukup tentukan UID-nya saja. Untuk playback berbasis STS, tentukan informasi STS-nya. fAliListPlayer.moveTo();
Beralih antara decoding perangkat lunak dan perangkat keras
SDK ApsaraVideo Player untuk Flutter mendukung decoding perangkat keras untuk H.264 dan H.265. Fitur ini diaktifkan secara default dan dapat dikontrol menggunakan metode setEnableHardwareDecoder. Jika inisialisasi decoding perangkat keras gagal, pemutar secara otomatis beralih ke decoding perangkat lunak untuk memastikan playback tidak terganggu. Kode berikut memberikan contohnya:
// Aktifkan decoding perangkat keras. Fitur ini diaktifkan secara default.
fAliplayer.setEnableHardwareDecoder(enable);Beralih definisi video berdasarkan kondisi jaringan
SDK ApsaraVideo Player untuk Flutter mendukung adaptive bitrate streaming untuk aliran video HLS dan DASH. Setelah metode prepare berhasil dipanggil, Anda dapat memanggil metode getMediaInfo untuk mengambil informasi setiap aliran, yang dikembalikan sebagai TrackInfo. Kode berikut memberikan contohnya:
fAliplayer.getMediaInfo().then((value) {
// Nilai 'value' adalah map. Anda dapat menggunakan value['tracks'] untuk mendapatkan daftar TrackInfos. Untuk memahami cara mengurai TrackInfo, lihat AVPMediaInfo info = AVPMediaInfo.fromJson(value); dalam demo.
});Selama playback, Anda dapat memanggil metode selectTrack milik pemutar untuk beralih aliran playback. Metode ini menggunakan trackIndex dari TrackInfo sebagai parameternya. Hasil pergantian tersebut dikembalikan dalam callback saat listener OnTrackChangedListener dipicu.
// Beralih bitrate.
fAliplayer.selectTrack(index);
// Beralih bitrate dan aktifkan streaming adaptif.
fAliplayer.selectTrack(-1);Ambil snapshot
SDK ApsaraVideo Player untuk Flutter memungkinkan Anda mengambil snapshot dari frame video saat ini. Fitur ini diimplementasikan menggunakan metode setOnSnapShot.
// Listener untuk snapshot yang berhasil.
fAliplayer.setOnSnapShot((path,playerId) {
});
// Ambil snapshot. 'path' adalah jalur tempat citra disimpan.
fAliplayer.snapshot(path);Pratinjau video
SDK ApsaraVideo Player untuk Flutter dapat dikonfigurasi dengan ApsaraVideo VOD untuk mengaktifkan fitur pratinjau video. Fitur pratinjau didukung untuk playback berbasis VidAuth (disarankan) dan playback berbasis VidSts. Untuk informasi selengkapnya tentang cara mengonfigurasi dan menggunakan fitur pratinjau, lihat Pratinjau video.
Setelah Anda mengonfigurasi fitur pratinjau, Anda dapat mengatur durasi pratinjau untuk pemutar menggunakan parameter previewTime dalam metode setVidAuth. Kode berikut memberikan contohnya:
// previewTime adalah durasi pratinjau dalam detik.
// Playback berbasis VidAuth
fAliplayer.setVidAuth(
vid: "Masukkan VID resource",
region: "Masukkan wilayah resource",
playAuth: "Masukkan PlayAuth resource",
previewTime: "Masukkan durasi pratinjau dalam detik");
// Playback berbasis VidSts
fAliplayer.setVidSts(
vid: "Masukkan VID resource",
region: "Masukkan wilayah resource",
accessKeyId: "Masukkan ID AccessKey resource",
accessKeySecret: "Masukkan Rahasia AccessKey resource",
securityToken: "Masukkan token keamanan resource",
previewTime: "Masukkan durasi pratinjau dalam detik");Konfigurasi lainnya
SDK ApsaraVideo Player untuk Flutter menyediakan konfigurasi playback tambahan. Konfigurasi ini harus diterapkan ke pemutar sebelum memanggil metode prepare().
var configMap = {
'mStartBufferDuration':_mStartBufferDurationController.text,// Durasi buffer sebelum playback dimulai, dalam milidetik.
'mHighBufferDuration':_mHighBufferDurationController.text,// Batas atas buffer, dalam milidetik.
'mMaxBufferDuration':_mMaxBufferDurationController.text,// Durasi buffer maksimum, dalam milidetik.
'mMaxDelayTime': _mMaxDelayTimeController.text,// Latensi maksimum untuk streaming langsung, dalam milidetik. Catatan: Parameter ini hanya berlaku untuk streaming langsung.
'mNetworkTimeout': _mNetworkTimeoutController.text,// Periode timeout jaringan, dalam milidetik.
'mNetworkRetryCount':_mNetworkRetryCountController.text,/// Jumlah percobaan ulang setelah timeout jaringan.
'mMaxProbeSize': _mMaxProbeSizeController.text,// Ukuran probe maksimum.
'mReferrer': _mReferrerController.text,// Referrer.
'mHttpProxy': _mHttpProxyController.text,// Proxy HTTP.
'mEnableSEI': mEnableSEI,// Menentukan apakah SEI diaktifkan.
'mClearFrameWhenStop': !mShowFrameWhenStop,/// Menentukan apakah frame terakhir dihapus saat playback berhenti.
'mDisableVideo': mDisableVideo,// Menentukan apakah video dinonaktifkan.
'mDisableAudio': mDisableAudio,// Menentukan apakah audio dinonaktifkan.
'mUserAgent':mUserAgent,// User agent.
};
// Terapkan konfigurasi.
fAliplayer.setConfig(configMap);Kinerja
Pre-rendering
SDK ApsaraVideo Player untuk Flutter mendukung pre-rendering untuk menampilkan frame pertama video dengan cepat sebelum playback dimulai.
Berikut contohnya:
fAliplayer.setOption(FlutterAvpdef.ALLOW_PRE_RENDER, 1);Cache lokal
SDK ApsaraVideo Player untuk Flutter menyediakan fitur cache lokal untuk menyimpan video selama playback. Hal ini membantu mengurangi konsumsi traffic data saat pengguna memutar ulang video. Untuk menggunakan fitur ini, Anda harus mengatur enableLocalCache pada pemutar sebelum memanggil metode prepare. Kode berikut memberikan contohnya:
/**
* Aktifkan cache lokal. Jika fitur ini diaktifkan, video akan di-cache ke file lokal.
*
* @param enable - Saklar untuk fitur cache lokal. true: aktifkan cache lokal. false: nonaktifkan cache lokal. Nilai default: false.
* @param maxBufferMemoryKB - Parameter ini sudah usang dan tidak berpengaruh pada v5.4.7.1 dan versi selanjutnya.
* @param localCacheDir - Direktori file cache. Harus berupa jalur mutlak.
* @param mDocTypeForIOS - Jenis direktori sandbox untuk iOS.
*/
FlutterAliplayer.enableLocalCache(bool enable,String maxBufferMemoryKB,String localCacheDir,DocTypeForIOS mDocTypeForIOS);
/**
* Konfigurasi untuk membersihkan file cache.
*
* @param expireMin - Parameter ini sudah usang dan tidak berpengaruh pada v5.4.7.1 dan versi selanjutnya.
* @param maxCapacityMB - Ukuran cache maksimum dalam MB. Nilai default: 20 GB. Saat sistem membersihkan cache, jika total ukuran file cache melebihi batas ini, sistem akan mengurutkan item cache berdasarkan waktu akses terakhir dan menghapus file tertua satu per satu hingga total ukuran kurang dari atau sama dengan batas tersebut.
* @param freeStorageMB - Ruang disk kosong minimum dalam MB. Nilai default: 0. Saat sistem membersihkan cache, jika ruang disk kosong saat ini kurang dari nilai ini, sistem juga akan menghapus file cache tertua satu per satu hingga ruang disk kosong lebih besar dari atau sama dengan nilai ini atau hingga semua file cache dihapus.
*/
FlutterAliplayer.setCacheFileClearConfig(String expireMin,String maxCapacityMB,String freeStorageMB);Aktifkan atau nonaktifkan caching lokal untuk URL tunggal
Untuk mengaktifkan atau menonaktifkan cache lokal untuk satu URL, Anda dapat mengonfigurasi pengaturan ini dalam konfigurasi pemutar. Kode berikut memberikan contohnya:
// Dapatkan konfigurasi.
fAliplayer.getPlayConfig().then((config){
// Nonaktifkan atau aktifkan cache lokal.
config.enableLocalCache = false;
// Terapkan pengaturan.
fAliplayer.setPlayConfig(config);
});Preloading
SDK ApsaraVideo Player untuk Flutter menyediakan fitur preloading, yang merupakan peningkatan dari fitur cache lokal. Fitur ini meningkatkan kecepatan startup video dengan memungkinkan Anda menentukan ukuran cache video dalam memori.
Fitur preloading memiliki batasan berikut:
Mendukung pemuatan file media tunggal, seperti file MP4, MP3, FLV, dan HLS.
Mendukung preloading untuk video yang diputar dari UrlSource. Preloading tidak didukung untuk video yang diputar dari VidAuth atau VidSts.
Aktifkan fitur cache lokal. Untuk informasi selengkapnya, lihat Cache lokal.
Buat instans
FlutterAliMediaLoaderV2.FlutterAliMediaLoaderV2 loaderV2 = FlutterAliMediaLoaderV2();Atur listener untuk tugas preload.
onError: Listener untuk error.loaderV2.onError = (ErrorInfo error) { };onCompleted: Listener untuk penyelesaian tugas.loaderV2.onCompleted = (taskId, urlOrVid) { };onCanceled: Listener untuk pembatalan tugas.loaderV2.onCanceled = (taskId, urlOrVid) { };
Atur parameter untuk tugas preload. Langkah ini opsional dan hanya berlaku untuk video multi-bitrate.
Anda dapat mengatur salah satu parameter berikut:
defaultQuality,defaultBandWidth, ataudefaultResolution.PreloadConfig config = PreloadConfig(); config.duration = 1000; // Nilai default: 1000 config.defaultQuality = "FD"; config.defaultBandWidth = 200000; config.defaultResolution = 1920 * 1080; loaderV2.setPreloadConfig(config);Tambahkan tugas preload dan ambil ID tugasnya.
VidAuth (Disarankan)
VidAuth auth = VidAuth( vid: "your videoId", playAuth: "your playAuth", region: "your region", ); loaderV2.addTask(auth).then((taskId) { print("MediaLoaderV2: taskId: $taskId"); });VidSts
VidSts vidSts = VidSts( vid: "your vid", accessKeyId: "your accessKeyId", accessKeySecret: "your accessKeySecret", securityToken: "your securityToken", ); loaderV2.addTask(vidSts).then((taskId) { print("MediaLoaderV2: taskId: $taskId"); });UrlSource
loaderV2.addTask(UrlSource(videoUrl: "videoUrl")).then((taskId) { print("MediaLoaderV2: taskId: $taskId"); });Jeda tugas preload.
loaderV2.pauseTask(taskId);Lanjutkan tugas preload.
loaderV2.resumeTask(taskId);Batalkan tugas preload.
loaderV2.cancelTask(taskId);Hancurkan instans
FlutterAliMediaLoaderV2.loaderV2.dispose();
Unduh video
SDK ApsaraVideo Player untuk Flutter memungkinkan Anda mengunduh video on-demand ke perangkat lokal untuk playback offline. SDK ini mendukung mode unduh normal dan aman.
Unduhan normal
Video yang diunduh dalam mode ini tidak dienkripsi oleh Alibaba Cloud dan dapat diputar menggunakan pemutar pihak ketiga.
Unduhan aman
Video yang diunduh dalam mode ini dienkripsi oleh Alibaba Cloud. Video tersebut hanya dapat diputar menggunakan SDK ApsaraVideo Player.
Catatan penggunaan
Anda hanya dapat mengunduh video yang diputar menggunakan VidSts atau VidAuth.
Untuk menggunakan fitur unduh video, Anda harus mengaktifkan fitur tersebut dan mengonfigurasi mode unduh di Konsol ApsaraVideo VOD. Untuk informasi selengkapnya, lihat Unduh offline.
Unduhan berkelanjutan didukung.
Prosedur
Opsi: Konfigurasikan file enkripsi dan verifikasi untuk unduhan aman. Langkah ini hanya diperlukan untuk unduhan aman dan dapat dilewati untuk unduhan normal.
CatatanPastikan file enkripsi dan verifikasi yang dikonfigurasi sesuai dengan informasi aplikasi. Jika tidak, unduhan video akan gagal.
Jika Anda menggunakan mode unduh aman, Anda harus mengonfigurasi file kunci yang dihasilkan di Konsol ApsaraVideo VOD untuk SDK ApsaraVideo Player. File kunci ini digunakan untuk mendekripsi dan memverifikasi video selama unduhan dan playback. Untuk informasi selengkapnya tentang cara menghasilkan file kunci, lihat Unduh aman.
Anda hanya perlu mengonfigurasi file kunci sekali. Kode berikut memberikan contohnya:
FlutterAliPlayerFactory.initService(byteData);Buat dan konfigurasikan downloader.
Kode berikut memberikan contohnya:
FlutterAliDownloader downloader = FlutterAliDownloader.init(); /// Atur jalur penyimpanan. downloader.setSaveDir(path)Mulai unduhan.
Setelah Anda memulai unduhan, listener akan diatur secara otomatis untuk mengembalikan informasi callback. Kode berikut memberikan contohnya:
/// 1. prepare /// Deskripsi parameter: Parameter type dapat diatur ke FlutterAvpdef.DOWNLOADTYPE_STS atau FlutterAvpdef.DOWNLOADTYPE_AUTH. Jika Anda mengatur type ke DOWNLOADTYPE_STS, parameter vid, accessKeyId, accessKeySecret, dan securityToken wajib diisi. Jika Anda mengatur type ke DOWNLOADTYPE_AUTH, parameter vid dan playAuth wajib diisi. downloader.prepare(type, vid).then((value) { // Nilai 'value' adalah map yang sesuai dengan kelas unduh kustom DownloadModel dalam demo. DownloadModel downloadModel = DownloadModel.fromJson(value); // 2. selectItem. Pilih definisi video yang akan diunduh berdasarkan trackInfo. List<TrackInfoModel> trackInfos = downloadModel.trackInfos; downloader.selectItem(vid,trackInfos[0].index); // 3. start downloader.start(vid, trackInfos[0].index).listen((event) { // Catatan: Event dapat berisi berbagai jenis informasi. Untuk informasi selengkapnya, lihat FlutterAvpdef.EventChanneldef. Kode berikut memberikan rinciannya: if (event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_PROGRESS){ // Progres unduhan dalam persentase. Dapatkan progres unduhan: event[EventChanneldef.DOWNLOAD_PROGRESS]. }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_PROCESS){ // Progres pemrosesan dalam persentase. Dapatkan progres pemrosesan: event[EventChanneldef.DOWNLOAD_PROCESS]. }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_COMPLETION){ // Unduhan selesai. Anda dapat menggunakan event['vid'] dan event['index'] untuk mendapatkan vid dan indeks yang sesuai guna mengidentifikasi video yang telah diunduh. Gunakan event['savePath'] untuk mendapatkan jalur lokal video yang diunduh. }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_ERROR){ // Unduhan gagal. Anda dapat menggunakan event['vid'] dan event['index'] untuk mendapatkan vid dan indeks yang sesuai guna mengidentifikasi video yang gagal diunduh. Anda dapat menggunakan event['errorCode'] dan event['errorMsg'] untuk mendapatkan kode kesalahan dan pesan kesalahan. } }); });Hentikan unduhan.
Kode berikut memberikan contohnya:
downloader.stop(vid, index)Hapus unduhan.
Ini akan menghapus tugas unduhan. Jika tugas berhasil dihapus, file lokal yang sesuai juga akan dihapus. Kode berikut memberikan contohnya:
downloader.delete(vid, index)Lepaskan objek unduhan.
Saat Anda tidak lagi memerlukan objek unduhan, panggil metode
releaseuntuk melepaskannya dan mencegah kebocoran memori. Kode berikut memberikan contohnya:downloader.release(vid, index)
Playback video terenkripsi
ApsaraVideo VOD mendukung Enkripsi HLS, Enkripsi privat Alibaba Cloud, dan Enkripsi DRM. Untuk informasi selengkapnya tentang memutar video terenkripsi, lihat Putar video terenkripsi.