SDK de servidor .NET

El vídeo de Vonage SDK .NET proporciona métodos para:

Instalación

NuGet (recomendado):

Busque "Vonage" en su gestor de paquetes o ejecute el siguiente comando con el comando Consola del gestor de paquetes:

PM> Install-Package Vonage

O un terminal:

dotnet add package Vonage

Utilización

Inicialización de

Los paquetes de Vonage utilizan un JWT para la autorización. El SDK maneja la generación de JWT en segundo plano por ti, pero requerirá un ApplicationId y PrivateKey como credenciales para generar el token.

Estas credenciales deben guardarse en la configuración del proyecto. Siéntase libre de echar un vistazo a la Configuración para saber cómo configurarlo.

A continuación, puede registrar todas las dependencias para el SDK .NET utilizando la siguiente extensión:

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

Esto le permite inyectar cualquier cliente a sus componentes, como:

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

De lo contrario, aún es posible instanciar todo el cliente manualmente. Necesitará tener ambos ApplicationId y PrivateKey en variables, y crear un Credentials artículo.

using Vonage;
using Vonage.Request;

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

El cliente Video expone varias funcionalidades de nuestras Video APIs.

Cómo gestionar los resultados de los vídeos

Cada método devolverá la respuesta envuelta en un fichero Result<T> Mónada, donde T es el tipo de respuesta.

Contiene un estado de éxito (T) si la operación ha tenido éxito o un estado de Fallo (IResultFailure) si algo ha ido mal. El fallo contiene un mensaje de error y puede convertirse en la excepción correspondiente. Puede representar cualquier tipo de problema:

  • solicitud inválida
  • autenticación fallida
  • solicitud fallida
  • deserialización de datos fallida
  • etc.

Puede utilizar .Match() para proporcionar métodos para ambos estados, o puede llamar a .GetSuccessUnsafe para obtener la respuesta y capturar una excepción si el proceso falla. También contiene otros métodos para manipular, transformar y extraer el resultado subyacente.

Detalles y explicaciones sobre el modo repositorio.

Creación de sesiones

Para crear una sesión de video de Vonage, llama al cliente de VideoClient.SessionClient.CreateSessionAsync(CreateSessionRequest)método. Puede utilizar un default con todos los valores por defecto, o crear uno personalizado utilizando la función .Build() método.

  • location Dirección IPv4 utilizada como pista de localización. (por defecto: string.empty)
  • MediaMode Especifica si la sesión utilizará la función Router multimedia de vídeo de Vonage) (MediaMode.ROUTED) o intentar transmitir flujos directamente entre clientes (MediaMode.RELAYED, por defecto). Se requiere una sesión enrutada para algunas funciones de Vonage Video (como el archivado).
  • ArchiveMode Especifica si la sesión se archivará automáticamente (ArchiveMode.ALWAYS) o no (ArchiveMode.MANUAL, por defecto). (ArchiveMode.ALWAYS) o no (ArchiveMode.MANUAL, por defecto)

El valor de retorno es un Result<CreateSessionResponse> objeto.

// 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);

Generación de fichas

Una vez creada una Sesión, puede empezar a generar Tokens para que los clientes los utilicen cuando se conecten a ella. Puede generar un token llamando a la función GenerateToken método.

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

var token = generator.GenerateToken(credentials, claims)

Trabajar con archivos

Sólo puedes archivar sesiones que utilicen el enrutador de medios de video de Vonage (sesiones con el modo de medios configurado como enrutado).

Crear un archivo

Puedes iniciar la grabación de una sesión de video de Vonage usando VideoClient.ArchiveClient.CreateArchiveAsync(CreateSessionRequest) método. El valor de retorno es un Result<CreateArchiveRequest> objeto.

Tenga en cuenta que sólo puede iniciar un Archivo en una Sesión que tenga clientes conectados.

// 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);

Aquí tienes todos los métodos que puedes utilizar en el constructor:

  • WithName permite añadir un nombre al archivo (para utilizarlo como identificación).
  • DisableVideo permite desactivar la grabación de vídeo.
  • DisableAudio permite desactivar la grabación de audio.
  • WithResolution permite establecer la resolución de la grabación. Tenga en cuenta que no puede especificar la dirección resolution cuando configure el outputMode a OutputMode.INDIVIDUAL.
  • WithOutputMode permite establecer el modo de salida del flujo. Por defecto, todos los flujos se graban en un único archivo ( compuesto). Puede grabar los diferentes flujos de la sesión en archivos individuales (en lugar de en un único archivo compuesto). único) indicando OutputMode.INDIVIDUAL.
  • WithStreamMode permite indicar si los flujos se seleccionan automática o manualmente.

Detener un archivo

Puede detener la grabación de un Archivo iniciado utilizando la página VideoClient.ArchiveClient.StopArchiveAsync(StopArchiveRequest) método.

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

Recuperar un archivo

Puede recuperar un Archivecon toda su información, utilizando el sitio VideoClient.ArchiveClient.GetArchiveAsync(GetArchiveRequest) método.

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

Borrar un archivo

Puede eliminar un archivo mediante la opción VideoClient.ArchiveClient.DeleteArchiveAsync(DeleteArchiveRequest) método.

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

Recuperar todos los archivos

Puede recuperar una lista de todos los Archivos que haya creado, hasta 1000 archivos, utilizando la dirección VideoClient.ArchiveClient.GetArchivesAsync(GetArchivesRequest) método.

Esta solicitud admite la paginación mediante WithCount y WithOffset en el constructor.

// 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);

Trabajar con flujos

Recuperar un flujo

Puede recuperar un Streamcon toda su información, utilizando el sitio VideoClient.SessionClient.GetStreamAsync(GetStreamRequest) método.

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

Recuperar todos los flujos

Puede recuperar todos los flujos de una sesión mediante la función VideoClient.SessionClient.GetStreamsAsync(GetStreamsRequest) método.

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

Forzar la desconexión

Tu servidor de aplicaciones puede desconectar a un cliente de una sesión de Vonage Video usando el sitio VideoClient.ModerationClient.DisconnectConnectionAsync(DisconnectConnectionRequest) método.

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

Envío de señales

Una vez creada una sesión, puede enviar señales a todas las personas de la sesión o a una conexión específica.

En Content es una instancia de SignalContentdonde puede configurar type y data.

  • type (cadena): La cadena de tipo para la señal. Puede enviar un máximo de 128 caracteres, y sólo se permiten los siguientes caracteres: A-Z, a-z, Numbers (0-9), '-', '_' y '~'.
  • data (cadena): La cadena de datos para la señal. Puede enviar un máximo de 8kB.
// 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);

Trabajar con retransmisiones en directo

Iniciar una emisión

Puedes iniciar una transmisión en vivo de una sesión de video de Vonage usando el sitio VonageClient.BroadcastClient.StartBroadcastsAsync(StartBroadcastRequest) método.

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

Detener una emisión

Puede detener una emisión utilizando la tecla VonageClient.BroadcastClient.StopBroadcastsAsync(StopBroadcastRequest) método.

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

Consulte también la documentación de VonageClient.BroadcastClient.StopBroadcastsAsync(StopBroadcastRequest) y VonageClient.BroadcastClient.GetBroadcastsAsync(GetBroadcastRequest) métodos.

Recuperar una emisión

Puede recuperar una emisión utilizando la función VonageClient.BroadcastClient.StopBroadcastsAsync(StopBroadcastRequest) método.

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

Recuperación de emisiones

Puede recuperar todas las emisiones utilizando la función VonageClient.BroadcastClient.StopBroadcastsAsync(StopBroadcastRequest) método. Este método también admite la paginación.

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

SIP

Iniciar una llamada SIP

Puedes conectar una plataforma SIP a una sesión de Vonage Video usando el sitio VonageClient.SipClient.InitiateCallAsync(InitiateCallRequest) método.

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

Reproducir un tono

Puedes enviar dígitos DTMF a todos los participantes de una sesión activa de Vonage Video o a un cliente específico conectado a esa sesión.

// 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);  

Obligar a los clientes de una sesión a silenciar el audio publicado

Puede forzar al editor a dejar de publicar audio, para un flujo específico o para todos los flujos de una sesión.

// 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);  

Requisitos

Necesita una aplicación con Video capacidades activadas. La dirección ApplicationId y el PrivateKey para la autenticación.

Necesitas una clave y un secreto de API de Video API de Vonage, que puedes obtener iniciando sesión en tu sitio Cuenta API de Video de Vonage.

El SDK .NET de Vonage está dirigido a netstandard2.0que es compatible con todos los marcos compatibles.

Notas de publicación

Véase el Registro de cambios del SDK .NET para obtener más información sobre cada versión.