Exemples d'implémentation .NET Media Player SDK¶
Cette page rassemble des recettes C# prêtes à l'emploi pour les scénarios de lecture les plus courants utilisant Media Player SDK .Net. Chaque extrait est vérifié par rapport au code source du SDK et aux démos sous _SOURCE/_DEMOS/Media Player SDK/. Le moteur MediaPlayerCore (Windows uniquement) est utilisé dans les exemples ci-dessous ; le code multi-plateforme basé sur MediaPlayerCoreX suit la même structure générale avec des paramètres de source spécifiques au moteur.
Recettes disponibles¶
Lecture de base¶
- Ouvrir un fichier local et démarrer la lecture
- Mettre en pause, reprendre et arrêter un lecteur en cours d'exécution
- Régler le volume de sortie
Streaming¶
- Lire un flux réseau (HTTP / RTSP) par URL
- Basculer le moteur source vers le backend FFmpeg pour les flux en direct
Effets et traitement¶
- Capturer l'image courante sous forme de
Bitmap - Aller à une position spécifique et lire le temps de lecture
Recette — Lecteur simple¶
La classe suivante encapsule MediaPlayerCore avec des appels start/stop. Le constructeur reçoit une instance IVideoView (VideoView pour WPF, VideoViewWinForms pour WinForms, etc.) fournie par votre couche UI.
using System;
using System.Threading.Tasks;
using VisioForge.Core.MediaPlayer;
using VisioForge.Core.Types;
using VisioForge.Core.Types.Events;
public class SimplePlayer
{
private readonly MediaPlayerCore _player;
public SimplePlayer(IVideoView videoView)
{
_player = new MediaPlayerCore(videoView);
// Abonnement aux événements.
_player.OnStop += OnPlaybackStopped;
_player.OnError += OnPlaybackError;
}
public async Task PlayFileAsync(string filePath)
{
_player.Playlist_Clear();
_player.Playlist_Add(filePath);
await _player.PlayAsync();
}
public Task StopAsync() => _player.StopAsync();
private void OnPlaybackStopped(object sender, StopEventArgs e)
{
Console.WriteLine("Lecture terminée.");
}
private void OnPlaybackError(object sender, ErrorsEventArgs e)
{
Console.WriteLine($"Erreur : {e.Message}");
}
}
Recette — Lecteur avec contrôles de pause et de volume¶
MediaPlayerCore expose PauseAsync/ResumeAsync pour le contrôle de la lecture en cours et une API de volume par périphérique de sortie (Audio_OutputDevice_Volume_Set) qui accepte un entier dans la plage 0–100.
using System;
using System.Threading.Tasks;
using VisioForge.Core.MediaPlayer;
using VisioForge.Core.Types;
public class ControllablePlayer
{
private readonly MediaPlayerCore _player;
private bool _isPaused;
public ControllablePlayer(IVideoView videoView)
{
_player = new MediaPlayerCore(videoView);
}
public async Task PlayPauseAsync()
{
if (_isPaused)
{
await _player.ResumeAsync();
_isPaused = false;
}
else
{
await _player.PauseAsync();
_isPaused = true;
}
}
public Task SeekAsync(TimeSpan position) =>
_player.Position_Set_TimeAsync(position);
public void SetVolume(int volume)
{
// volume : 0 (muet) … 100 (maximum) pour le premier périphérique de sortie audio.
_player.Audio_OutputDevice_Volume_Set(0, volume);
}
public Task<TimeSpan> GetDurationAsync() => _player.Duration_TimeAsync();
public Task<TimeSpan> GetPositionAsync() => _player.Position_Get_TimeAsync();
}
Recette — Capturer l'image courante¶
Frame_GetCurrent() retourne l'image la plus récemment rendue sous forme de System.Drawing.Bitmap. Sauvegardez-la via l'API Bitmap.Save ou utilisez Frame_Save pour une écriture disque intégrée avec ImageFormat.
using System.Drawing.Imaging;
using System.Threading.Tasks;
public Task<bool> SaveCurrentFrameAsync(MediaPlayerCore player, string outputPath)
{
// Helper intégré : encode l'image courante en PNG (ou tout autre ImageFormat).
return player.Frame_SaveAsync(outputPath, ImageFormat.Png);
}
Recette — Lire un flux réseau¶
Pour consommer des URL RTSP, RTMP, HTTP, UDP ou TCP via le backend FFmpeg, basculez Source_Mode vers MediaPlayerSourceMode.FFMPEG et ajoutez l'URL à la liste de lecture comme n'importe quelle autre source.
using System.Threading.Tasks;
using VisioForge.Core.MediaPlayer;
using VisioForge.Core.Types.MediaPlayer;
public async Task PlayRtspAsync(MediaPlayerCore player, string url)
{
player.Source_Mode = MediaPlayerSourceMode.FFMPEG;
player.Playlist_Clear();
player.Playlist_Add(url);
await player.PlayAsync();
}
Recette — Navigation dans la liste de lecture¶
L'API de liste de lecture intégrée suit l'index courant pour vous. Playlist_PlayNext avance vers l'élément suivant ; OnStop se déclenche en fin de flux naturelle, où vous pouvez enchaîner la piste suivante.
using System;
using System.Threading.Tasks;
using VisioForge.Core.MediaPlayer;
using VisioForge.Core.Types.Events;
public class PlaylistPlayer
{
private readonly MediaPlayerCore _player;
public PlaylistPlayer(IVideoView videoView)
{
_player = new MediaPlayerCore(videoView);
_player.OnStop += OnTrackFinished;
}
public void AddToPlaylist(string filePath) => _player.Playlist_Add(filePath);
public Task PlayAsync() => _player.PlayAsync();
public Task<bool> NextAsync() => _player.Playlist_PlayNextAsync();
private async void OnTrackFinished(object sender, StopEventArgs e)
{
// Avance automatique vers l'entrée suivante de la liste sur EOS naturel.
if (e.Successful)
{
await _player.Playlist_PlayNextAsync();
}
}
}
Exemples d'implémentation phares¶
Exemples de traitement vidéo¶
- Comment obtenir une image spécifique depuis un fichier vidéo ?
- Comment lire un fragment du fichier source ?
- Comment afficher la première image ?
Exemples de lecture avancée¶
- Implémentation de la lecture depuis la mémoire
- Intégration de l'API de liste de lecture
- Image précédente et lecture vidéo inversée
Ressources supplémentaires¶
Pour une collection plus étendue d'exemples de code et de scénarios d'implémentation, visitez notre dépôt GitHub.