Aller au contenu

Exemples d'implémentation .NET Media Player SDK

Media Player SDK .Net

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 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

Exemples de lecture avancé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.