Compartir pantalla — Windows

Puedes publicar una transmisión que utilice una captura de pantalla (en lugar de una cámara) como fuente. Un cliente conectado a la sesión puede suscribirse a la transmisión (y verla), del mismo modo que se suscribiría a una transmisión que utilizara una cámara como fuente.

Este tema incluye las siguientes secciones:

Publicar un flujo con una fuente de pantalla compartida

Para utilizar la pantalla del dispositivo, en lugar de una cámara, como fuente de vídeo, tendrá que implementar una función capturador de vídeo personalizado.

A continuación se muestra un ejemplo sencillo en el que se define un capturador de vídeo personalizado para implementar el uso compartido de pantalla (utilizando la pantalla en lugar de una cámara como fuente de vídeo):

public class ScreenSharingCapturer : IVideoCapturer
{
    System.Threading.Timer timer;
    IVideoFrameConsumer frameConsumer;
    const int WIDTH = 640;
    const int HEIGHT = 480;
    const int FPS = 30;

    public void Init(IVideoFrameConsumer frameConsumer)
    {
        this.frameConsumer = frameConsumer;
    }

    public void Start()
    {
        timer = new System.Threading.Timer((Object stateInfo) =>
        {
            using (Bitmap bitmap = new Bitmap(WIDTH, HEIGHT, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
            {
                using (Graphics graphics = Graphics.FromImage(bitmap as Image))
                {
                    graphics.CopyFromScreen(0, 0, 0, 0, new Size(WIDTH, HEIGHT), CopyPixelOperation.SourceCopy);
                }
                using (var frame = OpenTok.VideoFrame.CreateYuv420pFrameFromBitmap(bitmap))
                {
                    frameConsumer.Consume(frame);
                }
            }

        }, null, 0, 1000 / FPS);
    }

    public void Stop()
    {
        if (timer != null)
        {
            using (var timerDisposed = new ManualResetEvent(false))
            {
                timer.Dispose(timerDisposed);
                timerDisposed.WaitOne();
            }
        }
        timer = null;
    }

    public void Destroy()
    {
    }

    public VideoCaptureSettings GetCaptureSettings()
    {
        VideoCaptureSettings settings = new VideoCaptureSettings();
        settings.Width = WIDTH;
        settings.Height = HEIGHT;
        settings.Fps = FPS;
        settings.MirrorOnLocalRender = false;
        settings.PixelFormat = PixelFormat.FormatYuv420p;

        return settings;
    }
}

Fije el VideoSourceType del objeto Editor a OpenTok.VideoSourceType.Screen. Esto indica que el flujo publicado tiene una fuente de vídeo de pantalla compartida (en lugar de una cámara).

Por defecto, vídeo escalable está desactivado para las transmisiones de pantalla compartida. Puedes activar el vídeo escalable para las transmisiones de pantalla compartida mediante el Publisher.Builder.ScalableScreenshare propiedad. Nota: vídeo escalable para flujos de pantalla compartida es un beta característica.

Determinar el tipo de vídeo ("pantalla" o "cámara") para un flujo

El objeto Stream contiene un VideoSourceType propiedad. Se puede establecer en uno de los siguientes valores, definidos en la enumeración OpenTok.VideoSourceType:

  • Camera — una transmisión de vídeo estándar que utiliza una cámara como fuente de vídeo
  • Screen - un flujo de vídeo de pantalla compartida
  • Custom - un flujo publicado por un cliente web que utiliza un elemento HTML VideoTrack como fuente de vídeo

Suscribirse a las retransmisiones con pantalla compartida

Puede suscribirse a una transmisión que utilice una fuente de vídeo de pantalla compartida del mismo modo que se suscribe a una transmisión que utiliza una cámara como fuente. Consulte Suscripción a flujos.