es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creando un stream de video y audio con VLC

Estoy tratando de crear una aplicación que permita a un cliente compartir pantalla con audio estándar de escritorio, como en una llamada de Discord. ¿Cómo puedo hacer esto con una biblioteca de C# VLC o algo equivalente?

Para aclarar, estoy usando LibVLCSharp y estos son los argumentos que he intentado para los medios:

Media.AddOption("":screen-fps=24 :live-caching=0 :network-caching=0"");
Media.AddOption("":sout=#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:rtp{sdp=rtsp://:8080/screenshare}"");
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear una aplicación que permita compartir la pantalla al servidor con el audio estándar del escritorio, puedes utilizar la biblioteca C# VLC, LibVLCSharp. Aquí tienes algunas sugerencias:

    • Agrega las opciones necesarias al medio:
    Media.AddOption(":screen-fps=24 :live-caching=0 :network-caching=0");
    Media.AddOption(":sout=#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:rtp{sdp=rtsp://:8080/screenshare}");
    

    Estas opciones configuran VLC para capturar el escritorio a 24 fotogramas por segundo y transmitirlo con códec de video H.264 y códec de audio MPGA al servidor utilizando el protocolo RTP.

    • Utiliza VLC para capturar el escritorio:
    var factory = new MediaPlayerFactory();
    var mediaPlayer = factory.CreatePlayer<ivideoplayer>();
    mediaPlayer.Video.ScreenCaptureEnabled = true;
    mediaPlayer.Video.ScreenCaptureDisplayIndex = 0;
    mediaPlayer.Play(new Media(factory, "screen://", FromType.FromLocation));
    

    Este código configura VLC para capturar la pantalla del monitor principal y comenzar a reproducirla.

    • Transmite el audio al servidor por separado utilizando otra biblioteca, como NAudio.
      Puedes usar NAudio para capturar el audio desde el dispositivo de audio predeterminado y transmitirlo al servidor en paralelo con el video. Aquí tienes un ejemplo de código:
    var capture = new WasapiLoopbackCapture();
    var encoder = new NlMeansAudioFilter(new AacEncoder(new WaveFormat(44100, 2), 128));
    var udpStream = new UdpAudioSender("127.0.0.1", 8000);
    capture.DataAvailable += (_, e) =>
    {
        byte[] encoded = encoder.Encode(e.Buffer, e.BytesRecorded);
        udpStream.Send(encoded, encoded.Length);
    };
    capture.StartRecording();
    
    • En el lado del servidor, puedes usar VLC para recibir y mostrar el flujo de video del cliente:
    cvlc rtsp://:8080/screenshare
    

    Este código abre una instancia de VLC que escucha en el puerto 8080 para recibir flujos RTP con el nombre SDP “screenshare” y muestra el flujo de video recibido.

    En general, implementar el compartir pantalla con audio de escritorio en C# utilizando las bibliotecas VLC y NAudio requiere una configuración cuidadosa y coordinación entre el cliente y el servidor. Sin embargo, con las pautas mencionadas anteriormente, deberías poder comenzar y ajustar los parámetros según tus necesidades.

Comments are closed.