ApsaraVideo Player SDK for Flutter propose des fonctionnalités avancées telles que la lecture en liste, le streaming adaptatif, la capture d'instantanés, la mise en cache locale, le préchargement et le téléchargement de vidéos. Pour obtenir la liste complète des fonctionnalités, consultez la documentation de référence de l'API.
Lecture
Lire des listes de courtes vidéos
-
Créez un lecteur de liste.
FlutterAliListPlayer fAliListPlayer = FlutterAliPlayerFactory.createAliListPlayer(); -
Ajoutez et supprimez des ressources.
Le lecteur de liste prend uniquement en charge la lecture à partir de UrlSource ou VidSts.
// The uid parameter specifies the unique ID of a video. You can use the UID to identify videos. Videos that have the same UID are considered the same. fAliListPlayer.addUrlSource(url,uid); fAliListPlayer.addVidSource(vid,uid); fAliListPlayer.removeSource(uid); -
Définissez le nombre de vidéos à précharger.
Spécifiez un nombre raisonnable de vidéos à précharger afin d'améliorer la vitesse de démarrage. L'exemple de code suivant illustre cette procédure :
// Set the number of videos to preload. The total number of loaded videos is calculated using the following formula: 1 + count * 2. fAliListPlayer.setPreloadCount(count); -
Lancez la lecture de la source vidéo.
// The uid parameter is required. For URL-based playback, specify only the uid. For STS-based playback, specify the STS information. fAliListPlayer.moveTo();
Basculer entre le décodage matériel et logiciel
ApsaraVideo Player SDK for Flutter prend en charge le décodage matériel H.264 et H.265 via la méthode setEnableHardwareDecoder, activée par défaut. Si l'initialisation du décodage matériel échoue, le lecteur bascule automatiquement vers le décodage logiciel. L'exemple de code suivant illustre cette procédure :
// Enable hardware decoding. This feature is enabled by default.
fAliplayer.setEnableHardwareDecoder(enable);
Adapter dynamiquement la définition vidéo selon les conditions réseau
ApsaraVideo Player SDK for Flutter prend en charge le streaming adaptatif pour les flux vidéo HLS et DASH (Dynamic Adaptive Streaming over HTTP). Une fois la méthode prepare exécutée avec succès, appelez getMediaInfo pour récupérer les informations relatives à chaque flux sous forme d'objet TrackInfo. L'exemple de code suivant illustre cette procédure :
fAliplayer.getMediaInfo().then((value) {
// The value is of the map type. You can use value['tracks'] to get the corresponding TrackInfos list. For more information about how to parse TrackInfo, see AVPMediaInfo info = AVPMediaInfo.fromJson(value); in the demo.
});
Pendant la lecture, vous pouvez appeler la méthode selectTrack pour changer de flux actif. Transmettez la valeur trackIndex issue de l'objet TrackInfo en tant que paramètre. Le résultat du changement est renvoyé dans le rappel après le déclenchement de l'écouteur OnTrackChangedListener.
// Switch the bitrate.
fAliplayer.selectTrack(index);
// Switch the bitrate and enable adaptive streaming.
fAliplayer.selectTrack(-1);
Capturer des instantanés
ApsaraVideo Player SDK for Flutter permet de capturer des instantanés via la méthode setOnSnapShot.
// The listener for successful snapshot capturing.
fAliplayer.setOnSnapShot((path,playerId) {
});
// Capture a snapshot. path specifies the path where the image is saved.
fAliplayer.snapshot(path);
Prévisualiser des vidéos
ApsaraVideo Player SDK for Flutter prend en charge la prévisualisation vidéo lorsqu'il est utilisé avec ApsaraVideo VOD. Les méthodes de lecture VidAuth (recommandée) et VidSts prennent toutes deux en charge cette fonctionnalité. Pour plus d'informations, consultez la section Prévisualisation vidéo.
Après avoir configuré la prévisualisation, définissez sa durée à l'aide de la méthode previewTime de l'interface setVidAuth. L'exemple de code suivant illustre cette procédure :
// previewTime specifies the preview duration in seconds.
// VidAuth-based playback
fAliplayer.setVidAuth(
vid: "Enter the VID of the resource",
region: "Enter the region of the resource",
playAuth: "Enter the PlayAuth of the resource",
previewTime: "Enter the preview duration in seconds");
// VidSts-based playback
fAliplayer.setVidSts(
vid: "Enter the VID of the resource",
region: "Enter the region of the resource",
accessKeyId: "Enter the AccessKey ID of the resource",
accessKeySecret: "Enter the AccessKey secret of the resource",
securityToken: "Enter the security token of the resource",
previewTime: "Enter the preview duration in seconds");
Autres configurations
Configurez les paramètres de lecture supplémentaires avant d'appeler la méthode prepare().
var configMap = {
'mStartBufferDuration':_mStartBufferDurationController.text,// The buffer duration before playback starts. Unit: milliseconds.
'mHighBufferDuration':_mHighBufferDurationController.text,// The high buffer duration. Unit: milliseconds.
'mMaxBufferDuration':_mMaxBufferDurationController.text,// The maximum buffer duration. Unit: milliseconds.
'mMaxDelayTime': _mMaxDelayTimeController.text,// The maximum latency for live streaming. Unit: milliseconds. Note: This parameter is valid only for live streaming.
'mNetworkTimeout': _mNetworkTimeoutController.text,// The network timeout period. Unit: milliseconds.
'mNetworkRetryCount':_mNetworkRetryCountController.text,// The number of retries after a network timeout.
'mMaxProbeSize': _mMaxProbeSizeController.text,// The maximum probe size.
'mReferrer': _mReferrerController.text,// The referrer.
'mHttpProxy': _mHttpProxyController.text,// The HTTP proxy.
'mEnableSEI': mEnableSEI,// Specifies whether to enable Supplemental Enhancement Information (SEI).
'mClearFrameWhenStop': !mShowFrameWhenStop,// Specifies whether to clear the frame when playback stops.
'mDisableVideo': mDisableVideo,// Specifies whether to disable video.
'mDisableAudio': mDisableAudio,// Specifies whether to disable audio.
'mUserAgent':mUserAgent,// The User-Agent.
};
// Apply the configuration.
fAliplayer.setConfig(configMap);
Performances
Pré-rendu
ApsaraVideo Player SDK for Flutter permet un rendu rapide de la première image vidéo avant le début de la lecture.
Cette fonctionnalité est désactivée par défaut.
Vous devez définir la
Viewavant d'appelerPrepareafin que les images soient rendues dans laViewdès qu'elles sont prêtes.L'activation de cette fonctionnalité affecte l'ordre de déclenchement des événements de réussite de la préparation et de rendu de la première image. Lorsqu'elle est désactivée, l'événement de réussite de la préparation se déclenche avant l'événement de rendu de la première image. Lorsqu'elle est activée, l'événement de rendu de la première image peut se déclencher avant l'événement de réussite de la préparation en raison des différences de vitesse de décodage et de rendu. Cela n'affecte pas la lecture.
L'exemple de code suivant illustre cette procédure :
fAliplayer.setOption(FlutterAvpdef.ALLOW_PRE_RENDER, 1);
Mise en cache locale
ApsaraVideo Player SDK for Flutter prend en charge la mise en cache locale, qui stocke les vidéos pendant la lecture afin de réduire le trafic lors de la relecture. Activez enableLocalCache avant d'appeler prepare. L'exemple de code suivant illustre cette procédure :
/**
* Enable local caching. After this feature is enabled, videos are cached to local files.
*
* @param enable - The switch for the local caching feature. true: enables local caching. false: disables local caching. Default value: false.
* @param maxBufferMemoryKB - This parameter is deprecated and has no effect in v5.4.7.1 and later.
* @param localCacheDir - The directory of the cached file. This must be an absolute path.
* @param mDocTypeForIOS - The type of the sandbox directory on your iOS device.
*/
FlutterAliplayer.enableLocalCache(bool enable,String maxBufferMemoryKB,String localCacheDir,DocTypeForIOS mDocTypeForIOS);
/**
* Configurations for clearing local cache files.
*
* @param expireMin - This parameter is deprecated and has no effect in v5.4.7.1 and later.
* @param maxCapacityMB - The maximum cache size. Unit: MB. Default value: 20 GB. When the system clears the cache, if the total cache size exceeds this limit, the system sorts cache items by their last access time and deletes the oldest cached files one by one until the total cache size is less than or equal to the limit.
* @param freeStorageMB - The minimum free disk space. Unit: MB. Default value: 0. When the system clears the cache, if the current free disk space is less than this value, the system also deletes cached files one by one according to the rules until the free disk space is greater than or equal to this value or all cached files are cleared.
*/
FlutterAliplayer.setCacheFileClearConfig(String expireMin,String maxCapacityMB,String freeStorageMB);
Activer ou désactiver la mise en cache locale pour une seule URL
Pour activer ou désactiver la mise en cache locale pour une URL spécifique, définissez le paramètre correspondant dans la player config. L'exemple de code suivant illustre cette procédure :
// Get the configurations.
fAliplayer.getPlayConfig().then((config){
// Disable or enable local caching.
config.enableLocalCache = false;
// Apply the configurations.
fAliplayer.setPlayConfig(config);
});
Préchargement
ApsaraVideo Player SDK for Flutter prend en charge le préchargement, qui améliore la mise en cache locale en vous permettant de spécifier la taille mémoire allouée au cache vidéo afin d'améliorer la vitesse de démarrage.
La fonctionnalité de préchargement présente les limitations suivantes :
Elle prend en charge le chargement de fichiers multimédias uniques, tels que les fichiers MP4, MP3, FLV et HLS.
Elle prend en charge le préchargement uniquement pour les vidéos lues via la méthode UrlSource. Le préchargement n'est pas pris en charge pour les vidéos lues via les méthodes VidAuth ou VidSts.
Activez la fonctionnalité de mise en cache locale. Pour plus d'informations, consultez la section Mise en cache locale.
-
Créez une instance de
FlutterAliMediaLoaderV2.FlutterAliMediaLoaderV2 loaderV2 = FlutterAliMediaLoaderV2(); -
Définissez les écouteurs pour la tâche de préchargement.
-
onError: Écouteur d'erreurs.loaderV2.onError = (ErrorInfo error) { }; -
onCompleted: Écouteur de fin de tâche.loaderV2.onCompleted = (taskId, urlOrVid) { }; -
onCanceled: Écouteur d'annulation de tâche.loaderV2.onCanceled = (taskId, urlOrVid) { };
-
-
Facultatif : Définissez les paramètres de la tâche de préchargement. Cette étape s'applique uniquement au streaming adaptatif.
Il vous suffit de définir l'un des paramètres suivants :
defaultQuality,defaultBandWidthoudefaultResolution.PreloadConfig config = PreloadConfig(); config.duration = 1000; // Default value: 1000 config.defaultQuality = "FD"; config.defaultBandWidth = 200000; config.defaultResolution = 1920 * 1080; loaderV2.setPreloadConfig(config); -
Ajoutez une tâche de préchargement et récupérez l'ID de la tâche.
VidAuth (recommandé)
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"); }); -
Mettez en pause la tâche de préchargement.
loaderV2.pauseTask(taskId); -
Reprenez la tâche de préchargement.
loaderV2.resumeTask(taskId); -
Annulez la tâche de préchargement.
loaderV2.cancelTask(taskId); -
Détruisez l'instance
FlutterAliMediaLoaderV2.loaderV2.dispose();
Téléchargement de vidéos
ApsaraVideo Player SDK for Flutter permet de télécharger des vidéos à la demande pour une lecture hors ligne. Deux modes de téléchargement sont disponibles : le téléchargement normal et le téléchargement sécurisé.
-
Téléchargement normal
Les vidéos téléchargées dans ce mode ne sont pas chiffrées par Alibaba Cloud et peuvent être lues à l'aide de lecteurs tiers.
-
Téléchargement sécurisé
Les vidéos téléchargées dans ce mode sont chiffrées par Alibaba Cloud et ne peuvent être lues qu'à l'aide d'ApsaraVideo Player SDK.
Instructions d'utilisation
La fonctionnalité de téléchargement de vidéos est disponible uniquement pour les méthodes VidSts et VidAuth.
Pour utiliser la fonctionnalité de téléchargement de vidéos, vous devez l'activer et configurer un mode de téléchargement dans la console ApsaraVideo VOD. Pour plus d'informations, consultez la section Téléchargement hors ligne.
Le téléchargement avec reprise est pris en charge.
Procédure
-
Facultatif : Configurez le fichier de sécurité pour la vérification du chiffrement. Cette étape est requise uniquement pour le téléchargement sécurisé. Vous pouvez ignorer cette étape pour le téléchargement normal.
RemarqueAssurez-vous que le fichier de sécurité configuré correspond aux informations de l'application. Sinon, le téléchargement de la vidéo échouera.
Si vous utilisez le téléchargement sécurisé, vous devez configurer le fichier de clé généré dans la console ApsaraVideo VOD dans ApsaraVideo Player SDK. Ce fichier de clé est utilisé pour le déchiffrement et la vérification lors du téléchargement et de la lecture de la vidéo. Pour plus d'informations sur la génération du fichier de clé, consultez la section Téléchargement sécurisé.
Voici une configuration unique :
FlutterAliPlayerFactory.initService(byteData); -
Créez et configurez un téléchargeur.
L'exemple de code suivant illustre cette procédure :
FlutterAliDownloader downloader = FlutterAliDownloader.init(); /// Set the save path. downloader.setSaveDir(path) -
Démarrez le téléchargement.
Après avoir démarré le téléchargement, des écouteurs sont automatiquement enregistrés et des informations de rappel sont renvoyées. L'exemple de code suivant illustre cette procédure :
/// 1. prepare /// Parameter description: The type parameter can be set to FlutterAvpdef.DOWNLOADTYPE_STS or FlutterAvpdef.DOWNLOADTYPE_AUTH. If you set type to DOWNLOADTYPE_STS, the vid, accessKeyId, accessKeySecret, and securityToken parameters are required. If you set type to DOWNLOADTYPE_AUTH, the vid and playAuth parameters are required. downloader.prepare(type, vid).then((value) { // The value is of the map type. It corresponds to the custom download class DownloadModel in the demo. DownloadModel downloadModel = DownloadModel.fromJson(value); // 2. selectItem. Select the definition of the video to download based on the trackInfo. List<TrackInfoModel> trackInfos = downloadModel.trackInfos; downloader.selectItem(vid,trackInfos[0].index); // 3. start downloader.start(vid, trackInfos[0].index).listen((event) { // Note: The event parameter may contain various types of information. For more information, see FlutterAvpdef.EventChanneldef. The following section describes the details. if (event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_PROGRESS){ // The download progress in percentage. Get the download progress: event[EventChanneldef.DOWNLOAD_PROGRESS]. }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_PROCESS){ // The processing progress in percentage. Get the processing progress: event[EventChanneldef.DOWNLOAD_PROCESS]. }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_COMPLETION){ // The download is complete. You can use event['vid'] and event['index'] to get the corresponding vid and index to identify which video is downloaded. You can use event['savePath'] to get the local path of the downloaded video. }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_ERROR){ // The download failed. You can use event['vid'] and event['index'] to get the corresponding vid and index to identify which video failed to download. You can use event['errorCode'] and event['errorMsg'] to get the error code and error message. } }); }); -
Arrêtez le téléchargement.
L'exemple de code suivant illustre cette procédure :
downloader.stop(vid, index) -
Supprimez le téléchargement.
La suppression d'un téléchargement entraîne également la suppression du fichier local. L'exemple de code suivant illustre cette procédure :
downloader.delete(vid, index) -
Libérez l'objet de téléchargement.
Appelez la méthode
releasepour libérer un objet de téléchargement qui n'est plus nécessaire et éviter les fuites de mémoire. L'exemple de code suivant illustre cette procédure :downloader.release(vid, index)
Lecture de vidéos chiffrées
ApsaraVideo VOD prend en charge le chiffrement HLS, la cryptographie propriétaire d'Alibaba Cloud et le chiffrement DRM (Digital Rights Management). Pour plus d'informations sur la lecture de vidéos chiffrées, consultez la section Lire une vidéo chiffrée.