.NET Server SDK

Das Vonage-Video .NET SDK bietet Methoden für:

Einrichtung

NuGet (empfohlen):

Suchen Sie entweder in Ihrem Paketmanager nach "Vonage", oder führen Sie den folgenden Befehl mit der Option Paketmanager-Konsole:

PM> Install-Package Vonage

Oder ein Terminal:

dotnet add package Vonage

Verwendung

Initialisierung

Die Vonage-Pakete verwenden ein JWT für die Autorisierung. Das SDK übernimmt die JWT-Generierung im Hintergrund für Sie, benötigt aber eine ApplicationId und PrivateKey als Anmeldeinformationen, um das Token zu erzeugen.

Diese Anmeldedaten sollten in den Projekteinstellungen gespeichert werden. Werfen Sie einen Blick auf die Konfiguration Abschnitt erfahren Sie, wie Sie das einrichten können.

Dann können Sie alle Abhängigkeiten für das .NET SDK mit der folgenden Erweiterung registrieren:

// For 'Scoped' lifecycle
builder.Services.AddVonageClientScoped(builder.Configuration);
// Foor 'Transient' lifecycle
builder.Services.AddVonageClientTransient(builder.Configuration);

Dies ermöglicht es Ihnen, einen beliebigen Client in Ihre Komponenten zu injizieren, wie z.B.:

public CustomerController(IVideoClient client) {}
// or
public CustomerController(VonageClient client) {}

Andernfalls ist es immer noch möglich, den gesamten Client manuell zu instanziieren. Dazu müssen Sie sowohl ApplicationId und PrivateKey in Variablen, und erstellen Sie eine Credentials Artikel.

using Vonage;
using Vonage.Request;

...
var credentials = Credentials.FromAppIdAndPrivateKeyPath(applicationId, privateKeyPath);
var client = new VonageClient(credentials).VideoClient;

Der Video-Client stellt verschiedene Funktionalitäten unserer Video APIs zur Verfügung.

Umgang mit Videoergebnissen

Jede Methode gibt die Antwort in Form einer Result<T> Monade, wobei T ist der Typ der Antwort.

Er enthält entweder einen Erfolgsstatus (T), wenn der Vorgang erfolgreich war, oder einen Fehlerstatus (IResultFailure), wenn etwas schief gelaufen ist. Der Fehler enthält eine Fehlermeldung und kann in die entsprechende Ausnahme umgewandelt werden. Er kann jede Art von Problem darstellen:

  • ungültige Anfrage
  • fehlgeschlagene Authentifizierung
  • gescheiterte Anfrage
  • fehlgeschlagene Daten-Deserialisierung
  • usw.

Sie können verwenden .Match() um Methoden für beide Zustände bereitzustellen, oder Sie können die .GetSuccessUnsafe um die Antwort zu erhalten und eine Ausnahme abzufangen, wenn der Prozess fehlgeschlagen ist. Sie enthält auch andere Methoden zur Manipulation, Umwandlung und Extraktion des zugrunde liegenden Ergebnisses.

Details und Erklärungen zum Modus auf der Repository.

Sitzungen erstellen

Um eine Vonage-Videositzung zu erstellen, rufen Sie die Nummer des Kunden an. VideoClient.SessionClient.CreateSessionAsync(CreateSessionRequest)Methode. Sie können eine default Anfrage mit allen Standardwerten, oder erstellen Sie eine benutzerdefinierte Anfrage mit der .Build() Methode.

  • location IPv4-Adresse: Eine IPv4-Adresse, die als Hinweis auf den Standort verwendet wird. (Standard: string.empty)
  • MediaMode : Gibt an, ob die Sitzung die Vonage Video-Media-Router) (MediaMode.ROUTED) oder versuchen, Streams direkt zwischen Clients zu übertragen (MediaMode.RELAYED, die Standardeinstellung). Eine geroutete Sitzung ist erforderlich für einige Vonage Video-Funktionen (z. B. Archivierung) erforderlich.
  • ArchiveMode ArchiveMode.ALWAYS: Gibt an, ob die Sitzung automatisch archiviert wird (ArchiveMode.ALWAYS) oder nicht (ArchiveMode.MANUAL, Voreinstellung)

Der Rückgabewert ist ein Result<CreateSessionResponse> Objekt.

// Create a session that will attempt to transmit streams directly between clients 
Result<CreateSessionRequest> request = CreateSessionRequest.Default;
// Or create a custom request
Result<CreateSessionRequest> request = CreateSessionRequest.Build()
    .WithLocation("192.168.1.1")
    .WithMediaMode(MediaMode.Routed)
    .WithArchiveMode(ArchiveMode.Always)
    .Create();
    
// Send the request to the API
Result<CreateSessionResponse> response = await client.SessionClient.CreateSessionAsync(request);

Token generieren

Sobald eine Sitzung erstellt ist, können Sie damit beginnen, Token zu erzeugen, die die Clients bei der Verbindung mit der Sitzung verwenden können. Sie können ein Token erzeugen, indem Sie die Funktion GenerateToken Methode.

var generator = services.GetRequiredService<IVideoTokenGenerator>(); 
var credentials = ...
var claims = TokenAdditionalClaims.Parse(sessionId); 

var token = generator.GenerateToken(credentials, claims)

Arbeiten mit Archiven

Sie können nur Sitzungen archivieren, die den Vonage Video Media Router verwenden (Sitzungen, bei denen der Medienmodus auf geroutet eingestellt ist).

Erstellen eines Archivs

Sie können die Aufzeichnung einer Vonage-Videositzung starten über VideoClient.ArchiveClient.CreateArchiveAsync(CreateSessionRequest) Methode. Der Rückgabewert ist ein Result<CreateArchiveRequest> Objekt.

Beachten Sie, dass Sie ein Archiv nur in einer Sitzung starten können, mit der Clients verbunden sind.

// Creates an archive with default values.
Result<CreateArchiveRequest> request = CreateArchiveRequest.Build()
    .WithApplicationId(applicationId)
    .WithSessionId(sessionId)
    .Create();
// Or use any optional value on the builder.    
Result<CreateArchiveRequest> request =  CreateArchiveRequest.Build()
    .WithApplicationId(applicationId)
    .WithSessionId(sessionId)
    .WithName("Archive Name")
    .WithRenderResolution(RenderResolution.FullHighDefinitionLandscape)
    .WithArchiveLayout(new Layout(LayoutType.BestFit, string.Empty, LayoutType.Pip))
    .WithOutputMode(OutputMode.Composed)
    .WithStreamMode(StreamMode.Auto)
    .DisableAudio()
    .DisableVideo()
    .Create();

// Send the request to the API
Result<Archive> response = await client.ArchiveClient.CreateArchiveAsync(request);

Hier finden Sie alle Methoden, die Sie für den Builder verwenden können:

  • WithName ermöglicht es Ihnen, einen Namen für das Archiv hinzuzufügen (zur Identifizierung).
  • DisableVideo können Sie die Videoaufzeichnung deaktivieren.
  • DisableAudio können Sie die Audioaufnahme deaktivieren.
  • WithResolution können Sie die Auflösung der Aufnahme einstellen. Bitte beachten Sie, dass Sie nicht festlegen können die resolution wenn Sie die outputMode Parameter zu OutputMode.INDIVIDUAL.
  • WithOutputMode können Sie den Ausgabemodus für den Stream festlegen. Standardmäßig werden alle Streams in einer einzigen ( zusammengesetzte) Datei aufgezeichnet. Sie können die verschiedenen Streams in der Sitzung in einzelnen Dateien aufzeichnen (anstelle einer einzigen zusammengesetzten Datei) aufzeichnen, indem Sie OutputMode.INDIVIDUAL.
  • WithStreamMode können Sie angeben, ob Streams automatisch oder manuell ausgewählt werden sollen.

Anhalten eines Archivs

Sie können die Aufzeichnung eines gestarteten Archivs stoppen, indem Sie den Link VideoClient.ArchiveClient.StopArchiveAsync(StopArchiveRequest) Methode.

Result<StopArchiveRequest> request = StopArchiveRequest.Build()
    .WithApplicationId(applicationId)
    .WithArchiveId(archiveId)
    .Create();
Result<Archive> response = await client.ArchiveClient.StopArchiveAsync(request);

Abrufen eines Archivs

Sie können eine Archivemit all seinen Informationen, unter Verwendung die VideoClient.ArchiveClient.GetArchiveAsync(GetArchiveRequest) Methode.

var request = GetArchiveRequest.Build()
    .WithApplicationId(applicationId)
    .WithArchiveId(archiveId)
    .Create();
Result<Archive> response = await client.ArchiveClient.GetArchiveAsync(request);

Löschen eines Archivs

Sie können ein Archiv löschen, indem Sie die VideoClient.ArchiveClient.DeleteArchiveAsync(DeleteArchiveRequest) Methode.

var request = DeleteArchiveRequest.Build()
    .WithApplicationId(applicationId)
    .WithArchiveId(archiveId)
    .Create();
Result<Unit> response = await client.ArchiveClient.DeleteArchiveAsync(request);

Abrufen aller Archive

Sie können eine Liste aller von Ihnen erstellten Archive (bis zu 1000 Archive) abrufen, indem Sie die Seite VideoClient.ArchiveClient.GetArchivesAsync(GetArchivesRequest) Methode.

Diese Anfrage unterstützt die Paginierung mit WithCount und WithOffset über den Erbauer.

// Get a list with the first 1000 archives
var request = GetArchivesRequest.Build()
    .WithApplicationId(applicationId)
    .WithSessionId(sessionId)
    .Create();
// Get the first 50 archives
var request = GetArchivesRequest.Build()
    .WithApplicationId(applicationId)
    .WithSessionId(sessionId)
    .WithCount(50)
    .Create();
// Get the next 50 archives
var request = GetArchivesRequest.Build()
    .WithApplicationId(applicationId)
    .WithSessionId(sessionId)
    .WithCount(50)
    .WithOffset(50)
    .Create();
    
Result<GetArchivesResponse> response = await client.ArchiveClient.GetArchivesAsync(request);

Arbeiten mit Strömen

Abrufen eines Streams

Sie können eine Streammit all seinen Informationen, unter Verwendung die VideoClient.SessionClient.GetStreamAsync(GetStreamRequest) Methode.

var request = GetStreamRequest.Build()
        .WithApplicationId(applicationId)
        .WithSessionId(sessionId)
        .WithStreamId(streamId)
        .Create();
Result<GetStreamResponse> response = await client.SessionClient.GetStreamAsync(request);

Abrufen aller Streams

Sie können alle Streams in einer Sitzung abrufen, indem Sie die VideoClient.SessionClient.GetStreamsAsync(GetStreamsRequest) Methode.

var request = GetStreamsRequest.Build()
        .WithApplicationId(applicationId)
        .WithSessionId(sessionId)
        .Create();
Result<GetStreamsResponse> response = await client.SessionClient.GetStreamsAsync(request);

Trennen der Verbindung erzwingen

Ihr Anwendungsserver kann die Verbindung eines Clients zu einer Vonage Video-Sitzung mithilfe von die VideoClient.ModerationClient.DisconnectConnectionAsync(DisconnectConnectionRequest) Methode.

var request = DisconnectConnectionRequest.Build()
        .WithApplicationId(applicationId)
        .WithSessionId(sessionId)
        .WithConnectionId(connectionId)
        .Create();
Result<Unit> response = await client.ModerationClient.DisconnectConnectionAsync(request);

Senden von Signalen

Sobald eine Sitzung erstellt ist, können Sie Signale an alle Teilnehmer der Sitzung oder an eine bestimmte Verbindung senden.

Die Content Parameter ist eine Instanz von SignalContent, wo Sie Folgendes einstellen können type und data.

  • type (Zeichenfolge): Die Zeichenkette für das Signal. Sie können maximal 128 Zeichen senden, wobei nur die folgenden Zeichen sind erlaubt: A-Z, a-z, Numbers (0-9), '-', '_', und '~'.
  • data (Zeichenkette): Der Datenstring für das Signal. Sie können maximal 8kB senden.
// Send a signal to a specific connection
var request = SendSignalRequest.Build()
    .WithApplicationId(applicationId)
    .WithSessionId(sessionId)
    .WithConnectionId(connectionId)
    .WithContent(new SignalContent("type", "data"))
    .Create();
Result<Unit> response = await client.SignalingClient.SendSignalAsync(request);

// Send a signal to all connections in a session
var request = SendSignalsRequest.Build()
    .WithApplicationId(applicationId)
    .WithSessionId(sessionId)
    .WithContent(new SignalContent("type", "data"))
    .Create();
Result<Unit> response = await client.SignalingClient.SendSignalsAsync(request);

Arbeiten mit Live-Streaming-Übertragungen

Starten einer Sendung

Sie können eine Live-Streaming-Übertragung einer Vonage-Videositzung starten, indem Sie die Seite VonageClient.BroadcastClient.StartBroadcastsAsync(StartBroadcastRequest) Methode.

var request = StartBroadcastRequest.Build()
    .WithApplicationId(applicationId)
    .WithSessionId(sessionId)
    .WithLayout(new Layout(LayoutType.BestFit, string.Empty, LayoutType.HorizontalPresentation))
    .WithOutputs(new StartBroadcastRequest.BroadcastOutput())
    .Create();
Result<Broadcast> response = await client.BroadcastClient.StartBroadcastsAsync(request);

Anhalten einer Sendung

Sie können eine Sendung mit dem Befehl VonageClient.BroadcastClient.StopBroadcastsAsync(StopBroadcastRequest) Methode.

var request = StopBroadcastRequest.Build()
    .WithApplicationId(applicationId)
    .WithBroadcastId(broadcastId)
    .Create();
Result<Broadcast> response = await client.BroadcastClient.StopBroadcastAsync(request);

Siehe auch die Dokumentation für das VonageClient.BroadcastClient.StopBroadcastsAsync(StopBroadcastRequest) und VonageClient.BroadcastClient.GetBroadcastsAsync(GetBroadcastRequest) Methoden.

Abrufen einer Sendung

Sie können eine Sendung mit dem Befehl VonageClient.BroadcastClient.StopBroadcastsAsync(StopBroadcastRequest) Methode.

var request = GetBroadcastRequest.Build()
    .WithApplicationId(applicationId)
    .WithBroadcastId(broadcastId)
    .Create();
Result<Broadcast> response = await client.BroadcastClient.GetBroadcastAsync(request);

Abrufen von Sendungen

Sie können alle Sendungen mit der Funktion VonageClient.BroadcastClient.StopBroadcastsAsync(StopBroadcastRequest) Methode. Diese Methode unterstützt auch die Paginierung.

var request = GetBroadcastsRequest.Build()
    .WithApplicationId(applicationId)
    .WithSessionId(sessionId)
    .WithCount(50)
    .WithOffset(50)
    .Create();
Result<GetBroadcastsResponse> response = await client.BroadcastClient.GetBroadcastsAsync(request);

SIP

Einleiten eines SIP-Anrufs

Sie können eine SIP-Plattform mit einer Vonage Video-Sitzung verbinden, indem Sie die VonageClient.SipClient.InitiateCallAsync(InitiateCallRequest) Methode.

var request = InitiateCallRequest.Build()
        .WithApplicationId(applicationId)
        .WithSessionId(sessionId)
        .WithToken(token)
        .WithSipUri(sipUri)
        .Create();
Result<InitiateCallResponse> response = await client.SipClient.InitiateCallAsync(request);

Einen Ton abspielen

Sie können DTMF-Ziffern an alle Teilnehmer einer aktiven Vonage Video-Sitzung oder an einen bestimmten, mit dieser Sitzung verbundenen Client senden. Sitzung verbunden ist.

// Send digits to all participants in the session
var request = PlayToneIntoCallRequest.Build()
        .WithApplicationId(applicationId)
        .WithSessionId(sessionId)
        .WithDigits(digits)
        .Create();
Result<Unit> response = await client.SipClient.PlayToneIntoCallAsync(request);

// Send digits to a specific connection
var request = PlayToneIntoConnectionRequest.Build()
        .WithApplicationId(applicationId)
        .WithSessionId(sessionId)
        .WithConnectionId(connectionId)
        .WithDigits(digits)
        .Create();
Result<Unit> response = await client.SipClient.PlayToneIntoConnectionAsync(request);  

Erzwingen, dass Clients in einer Sitzung das veröffentlichte Audio stummschalten

Sie können den Herausgeber zwingen, die Veröffentlichung von Audiodaten für einen bestimmten Stream oder für alle Streams in einer Sitzung zu beenden.

// Mute all streams in a session, and mark the session as "muted"
var request = MuteStreamsRequest.Build()
        .WithApplicationId(applicationId)
        .WithSessionId(sessionId)
        .WithConfiguration(new MuteStreamsRequest.MuteStreamsConfiguration(true, Array.Empty<string>()))
        .Create();
Result<MuteStreamsResponse> response = await client.ModerationClient.MuteStreamsAsync(request);

// Mute a specific stream
var request = MuteStreamRequest.Build()
        .WithApplicationId(applicationId)
        .WithSessionId(sessionId)
        .WithStreamId(streamId)
        .Create();
Result<MuteStreamResponse> response = await client.ModerationClient.MuteStreamAsync(request);  

Anforderungen

Sie benötigen eine Anwendung mit Video Fähigkeiten aktiviert. Die Website ApplicationId und die PrivateKey wird für die Authentifizierung benötigt.

Sie benötigen einen Vonage Video API-Schlüssel und ein API-Geheimnis, die Sie erhalten, wenn Sie sich bei Ihrem Vonage Video API-Konto.

Das Vonage .NET SDK zielt auf netstandard2.0die kompatibel ist mit alle unterstützten Frameworks.

Anmerkungen zur Veröffentlichung

Siehe die .NET SDK Änderungsprotokoll Seite für Details zu jeder Version.