Bildschirmfreigabe – Windows

Sie können einen Stream veröffentlichen, der eine Videoansicht Ihres Bildschirms (anstelle einer Kamera) als Quelle verwendet. Ein mit der Sitzung verbundener Client kann den Stream abonnieren (und anzeigen), genauso wie er einen Stream abonnieren würde, der eine Kamera als Quelle verwendet.

Dieses Thema umfasst die folgenden Abschnitte:

Veröffentlichen eines Streams mit einer Bildschirmfreigabequelle

Um den Bildschirm des Geräts anstelle einer Kamera als Videoquelle zu verwenden, müssen Sie eine benutzerdefinierter Video-Capturer.

Hier ist ein einfaches Beispiel, in dem ein benutzerdefinierter Video-Capturer definiert wird, um die Bildschirmfreigabe zu implementieren (wobei der Bildschirm anstelle einer Kamera als Videoquelle verwendet wird):

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

Setzen Sie die VideoSourceType Eigenschaft des Publisher-Objekts auf OpenTok.VideoSourceType.Screen. Dadurch wird der veröffentlichte Stream als Videoquelle für die Bildschirmfreigabe (anstelle einer Kamera) gekennzeichnet.

Standardmäßig, skalierbares Video ist für Streams zur Bildschirmfreigabe deaktiviert. Sie können skalierbares Video für Streams zur gemeinsamen Nutzung von Bildschirmen aktivieren, indem Sie den Publisher.Builder.ScalableScreenshare Eigentum. Anmerkung: skalierbares Video für Screen-Sharing-Streams ist ein beta Funktion.

Festlegen des Videotyps ("Bildschirm" oder "Kamera") für einen Stream

Das Stream-Objekt enthält eine VideoSourceType Eigenschaft. Diese kann auf einen der folgenden Werte gesetzt werden, die in der Enumeration „OpenTok.VideoSourceType“ definiert sind:

  • Camera - ein Standard-Videostream, der eine Kamera als Videoquelle verwendet
  • Screen - einen Video-Stream zur gemeinsamen Nutzung des Bildschirms
  • Custom - ein von einem Web-Client veröffentlichter Stream, der ein HTML-VideoTrack-Element als Videoquelle verwendet

Abonnieren von Streams zur Bildschirmfreigabe

Sie können einen Stream, der eine Screen-Sharing-Videoquelle verwendet, auf dieselbe Weise abonnieren wie einen Stream, der eine Kamera als Quelle verwendet. Siehe Abonnieren von Streams.