Streams veröffentlichen – Windows
Sobald Sie mit einer Sitzung verbundenkönnen Sie einen Stream veröffentlichen, den andere mit der Sitzung verbundene Clients anzeigen können.
Dieses Thema umfasst die folgenden Abschnitte:
- Initialisierung eines Publisher-Objekts
- Veröffentlichen eines Streams
- Einstellung der maximalen Bitrate für einen Stream
- Einen Anbieter am Streaming hindern
- Abrufen von Statistiken über den Stream eines Verlegers
- Testen des Streams eines Verlegers
Initialisierung eines Publisher-Objekts
Ein „Publisher“-Objekt wird verwendet, um einen Audio-Video-Stream vom Mikrofon und der Kamera des Systems für die Verwendung in einer OpenTok-Sitzung zu erfassen. Sie können einen „Publisher“ auch verwenden, um einen Bildschirmfreigabe Video-Stream.
Sie können einen einfachen Publisher erstellen, indem Sie die Publisher() Konstruktor und übergibt die Windows-Anwendungsinstanz:
publisher = new Publisher(Context.Instance);
publisher.Error += Publisher_Error;
private void Publisher_Error(object sender, Publsher.ErrorEventArgs e)
{
Console.WriteLine("Publisher error:" + e.ErrorCode);
}
Übergeben Sie das Publisher-Objekt an die Session.publish() Methode zum Veröffentlichen eines Streams in einer Sitzung. Siehe Veröffentlichen eines Streams.
Standardmäßig verwendet der Publisher den Standard-Video-Capturer, der das Standardmikrofon und die Standardkamera des Systems als Audio- und Videoquelle für den veröffentlichten Stream nutzt. Dies wird durch den „VideoCapturer“ im OpenTok-SDK festgelegt.
Sie können ein bestimmtes Video-Capturer-Objekt definieren, das der Herausgeber verwenden soll. Dieses Objekt nimmt Video von einer Videoquelle (z. B. einer Kamera) auf und verfügt über Einstellungen für das Video (z. B. Bildrate und Auflösung).
Sie können die VideoCapturer.EnumerateDevices() Methode zur Aufzählung der Videoaufnahmegeräte (Kameras) im System. Diese Methode gibt eine Liste von VideoDevice-Objekten zurück. Die Klasse VideoDevice enthält eine Reihe von CreateVideoCapturer() Methoden, um ein VideoCapturer-Objekt zu instanziieren, das das Videogerät verwendet:
VideoCapturer.CreateVideoCapturer(format)- Erstellt ein VideoCapturer-Objekt unter Verwendung der durch ein VideoFormat-Objekt definierten Einstellungen.VideoCapturer.CreateVideoCapturer(width, height, fps)- Erzeugt ein VideoCapturer-Objekt mit der Auflösung, die durch den ParameterwidthundheightParametern und mit der Bildrate, die durch denfpsParameter.VideoCapturer.CreateVideoCapturer(resolution, fps)- Erzeugt ein VideoCapturer-Objekt mit der Auflösung, die durch den Parameterresolutionund mit der Bildrate, die durch den ParameterfpsParameter. Die WebsiteOpenTok.VideoCapturer.Resolutionenum definiert Werte, die von derresolutionParameter:Low(320x240 Pixel),Medium(640 × 480 Pixel),High(1280x720 Pixel), undHigh1080p(1920x1080 Pixel).
Der Video-Capturer verwendet die Auflösung, die auf dem System unterstützt wird, das der von Ihnen angegebenen Auflösung am nächsten kommt.
Standardmäßig verwenden Publisher einen Standard-Video-Renderer für Windows Presentation Foundation, der durch die Klasse „VideoRenderer“ im OpenTok Windows SDK definiert ist. Sie können auch einen Renderer für das Video festlegen, indem Sie eine Klasse erstellen, die die Schnittstelle „IVideoRenderer“ implementiert. Sie können einen benutzerdefinierten Video-Renderer verwenden – siehe Verwendung eines benutzerdefinierten Video-Renderers.
Mit dem folgenden Code wird ein Publisher erstellt, der den Standard-Systemvideo-Capturer mit einer Auflösung von 720p verwendet (VideoCapturer.Resolution.High) und die Bildrate auf 30 Bilder pro Sekunde eingestellt:
var devices = VideoCapturer.EnumerateDevices();
var selectedDevice = devices[0];
capturer = selectedDevice.CreateVideoCapturer(VideoCapturer.Resolution.High,
VideoCapturer.VideoCapturer.FrameRate.Fps30);
publisher = new Publisher(Context.Instance, renderer: publisherVideoRenderer, capturer: capturer);
publisher.Error += Publisher_Error;
private void Publisher_Error(object sender, Publsher.ErrorEventArgs e)
{
Console.WriteLine("Publisher error:" + e.ErrorCode);
}
Anmerkung: In Sitzungen, die den OpenTok Media Router verwenden (Sitzungen mit dem Medienbetrieb Wenn der Medienmodus auf geroutet eingestellt ist, wird durch die Verringerung der Bildrate die vom Stream verwendete Bandbreite proportional reduziert. In Sitzungen, bei denen der Medienmodus auf "Relayed" eingestellt ist, wird die Bandbreite des Streams durch die Verringerung der Bildrate jedoch nicht verringert.
Sie übergeben weitere optionale Parameter der Publisher() Konstruktor, um benutzerdefinierte Einstellungen für den veröffentlichten Stream festzulegen:
name- Der Name des Herausgebervideos. DieStream.NameEigenschaft für einen von diesem Verlag veröffentlichten Stream auf diesen Wert gesetzt (auf allen Clients).hasAudioTrack- Ob eine Audiospur in den veröffentlichten Stream aufgenommen werden soll. Der Standard isttrue.hasVideoTrack- Ob eine Audiospur in den veröffentlichten Stream aufgenommen werden soll. Der Standard isttrue.stereo- Ob Stereo-Audio im veröffentlichten Stream aktiviert werden soll. Der Standard istfalse. Stellen Sie dies auftrueum Audio von einem Stereomikrofon zu veröffentlichen.
Sie können auch die vom Herausgeber verwendete Audioquelle ändern. Oder Sie können eine benutzerdefinierter Audiotreiber die von allen Verlegern und Abonnenten verwendet werden können.
Sie können einen benutzerdefinierten Video-Capturer verwenden, um einen Stream mit einer benutzerdefinierten Videoquelle zu veröffentlichen - siehe Verwendung eines benutzerdefinierten Video-Capturers. Sie können den benutzerdefinierten Video-Capturer auch verwenden, um einen Screen-Sharing-Stream zu veröffentlichen - siehe Bildschirmfreigabe.
Anmerkung: Die OpenTok.Publisher Klasse und der OpenTok.VideoCapturer implementieren die System.IDisposable Schnittstelle. Stellen Sie sicher, dass Sie die Dispose() Methode dieser Objekte, um ihre Ressourcen freizugeben, wenn Sie das Objekt nicht mehr benötigen (z. B. wenn der Publisher entfernt wird oder wenn die Anwendung oder das Fenster geschlossen wird).
Veröffentlichen eines Streams
Sobald Sie ein Publisher-Objekt erstellt haben (siehe Initialisierung eines Publisher-Objekts), können Sie es an die Publish(publisher) Methode eines Session-Objekts, um den Stream in der Session zu veröffentlichen:
session.Publish(publisher);
Dieser Code geht davon aus, dass session ist ein Session-Objekt, das publisher ein Publisher-Objekt ist und dass der Client eine Verbindung zur Sitzung hergestellt hat. Für weitere Informationen siehe Beitritt zu einer Sitzung.
Die Publisher sendet die StreamCreated Ereignis, wenn der Verleger mit dem Streaming in die Sitzung beginnt:
publisher.StreamCreated += Publisher_StreamCreated;
session.Publish(publisher);
private void Publisher_StreamCreated(object sender, Publisher.StreamEventArgs e)
{
Console.WriteLine("The publisher started streaming.");
}
Einstellung der maximalen Bitrate für einen Stream
Sie können die maximale Bitrate für einen veröffentlichten Stream festlegen. Die Festlegung der maximalen Bitrate kann dazu beitragen, den Bandbreitenverbrauch zu reduzieren, wenn ein Nutzer über eine gebührenpflichtige Verbindung zugreift. Siehe diese Dokumentation.
Einen Anbieter am Streaming hindern
Sie können das Streaming des Publishers in die Sitzung unterbinden, indem Sie die Funktion Unpublish(publisher) Methode des Session-Objekts:
session.unpublish(mPublisher);
Die Publisher sendet die StreamCreated Ereignis, wenn der Verleger mit dem Streaming in die Sitzung beginnt:
publisher.StreamCreated += Publisher_StreamDestroyed;
session.Publish(publisher);
private void Publisher_StreamDestroyed(object sender, Publisher.StreamEventArgs e)
{
Console.WriteLine("The publisher stopped streaming.");
}
Abrufen von Statistiken über den Stream eines Verlegers
Um Callback-Methoden für periodische Berichte über Audio- und Videostatistiken für einen Publisher zu registrieren, legen Sie einen Event-Handler für die Publisher AudioStatsUpdated und VideoUpdated Ereignisse. Um detaillierte Statistiken zu Peer-Verbindungen abzurufen, verwenden Sie die Publisher.GetRtcStatsReport() Methode.
Siehe das Handbuch für Entwickler von Client Observability für detaillierte Informationen.
Testen des Streams eines Verlegers
Sie können einen Teststream veröffentlichen und dessen Audio- und Videostatistiken überprüfen, um die Art des Streams (z. B. hochauflösend oder nur Audio) zu ermitteln, die von Ihrer Verbindung unterstützt wird.
Sie können dann den Stream abonnieren und die Subscriber.AudioStatsUpdated und Subscriber.VideoStatsUpdated Ereignisse, um Audio- und Videostatistiken für den von Ihnen veröffentlichten Stream zu erhalten.