Saltar a contenido

Ejemplos de implementación de Media Player SDK .NET

Media Player SDK .Net

Esta página recopila recetas en C# listas para usar para los escenarios de reproducción más comunes con Media Player SDK .Net. Cada fragmento está verificado contra el código fuente del SDK y las demos bajo _SOURCE/_DEMOS/Media Player SDK/. En los ejemplos siguientes se utiliza el motor MediaPlayerCore (solo Windows); el código multiplataforma basado en MediaPlayerCoreX sigue la misma estructura general con ajustes de fuente específicos del motor.

Recetas disponibles

Reproducción básica

  • Abrir un archivo local e iniciar la reproducción
  • Pausar, reanudar y detener un reproductor en marcha
  • Ajustar el volumen de salida

Streaming

  • Reproducir un flujo de red (HTTP / RTSP) por URL
  • Cambiar el motor de fuente al backend FFmpeg para flujos en directo

Efectos y procesamiento

  • Capturar el fotograma actual como Bitmap
  • Saltar a una posición concreta y leer el tiempo de reproducción

Receta — Reproductor simple

La siguiente clase encapsula MediaPlayerCore con llamadas start/stop. El constructor recibe una instancia IVideoView (VideoView para WPF, VideoViewWinForms para WinForms, etc.) que proporciona tu capa de 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);

        // Suscripción a eventos.
        _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("Reproducción finalizada.");
    }

    private void OnPlaybackError(object sender, ErrorsEventArgs e)
    {
        Console.WriteLine($"Error: {e.Message}");
    }
}

Receta — Reproductor con controles de pausa y volumen

MediaPlayerCore expone PauseAsync/ResumeAsync para el control de la reproducción en curso y una API de volumen por dispositivo de salida (Audio_OutputDevice_Volume_Set) que acepta un entero en el rango 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 (silencio) … 100 (máximo) para el primer dispositivo de salida de audio.
        _player.Audio_OutputDevice_Volume_Set(0, volume);
    }

    public Task<TimeSpan> GetDurationAsync() => _player.Duration_TimeAsync();

    public Task<TimeSpan> GetPositionAsync() => _player.Position_Get_TimeAsync();
}

Receta — Capturar el fotograma actual

Frame_GetCurrent() devuelve el fotograma más recientemente renderizado como System.Drawing.Bitmap. Guárdalo mediante la API Bitmap.Save o utiliza Frame_Save para escritura en disco integrada con ImageFormat.

using System.Drawing.Imaging;
using System.Threading.Tasks;

public Task<bool> SaveCurrentFrameAsync(MediaPlayerCore player, string outputPath)
{
    // Helper integrado: codifica el fotograma actual a PNG (o cualquier ImageFormat).
    return player.Frame_SaveAsync(outputPath, ImageFormat.Png);
}

Receta — Reproducir un flujo de red

Para consumir URLs RTSP, RTMP, HTTP, UDP o TCP a través del backend FFmpeg, cambia Source_Mode a MediaPlayerSourceMode.FFMPEG y añade la URL a la lista de reproducción como cualquier otra fuente.

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();
}

Receta — Navegación por la lista de reproducción

La API de lista de reproducción integrada lleva el índice actual por ti. Playlist_PlayNext avanza al elemento siguiente; OnStop se dispara al final natural del flujo, donde puedes encadenar la siguiente pista.

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 automático a la siguiente entrada de la lista al EOS natural.
        if (e.Successful)
        {
            await _player.Playlist_PlayNextAsync();
        }
    }
}

Ejemplos de implementación destacados

Ejemplos de procesamiento de video

Ejemplos avanzados de reproducción


Recursos adicionales

Para una colección más extensa de ejemplos de código y escenarios de implementación, visita nuestro repositorio de GitHub.