SDK de servidor .NET

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

Instalación

NuGet (recomendado):

Busca «Vonage» en tu gestor de paquetes o ejecuta el siguiente comando utilizando el Consola del gestor de paquetes:

PM> Install-Package Vonage

O bien, en un terminal:

dotnet add package Vonage

Uso

Inicialización de

Los paquetes de Vonage utilizan un JWT para la autorización. El SDK se encarga de generar el JWT en segundo plano por ti, pero necesitará 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 te permite inyectar cualquier cliente en tus componentes, como por ejemplo:

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

De lo contrario, sigue siendo posible crear una instancia de todo el cliente manualmente. Tendrás que disponer de 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 vídeo

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

Contiene un estado de éxito (T) si la operación se ha realizado correctamente, 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 no válida
  • autenticación fallida
  • solicitud fallida
  • Error en la deserialización de datos
  • etc.

Puede utilizar .Match() para proporcionar métodos para ambos estados, o puede llamar a .GetSuccessUnsafe para obtener la respuesta y detectar una excepción en caso de que el proceso falle. Además, contiene otros métodos para manipular, transformar y extraer el resultado subyacente.

Detalles y explicaciones sobre el modo en la repositorio.

Creación de sesiones

Para crear una sesión de video de Vonage, llama al cliente de VideoClient.SessionClient.CreateSessionAsync(CreateSessionRequest)método. Puedes 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 : Indica si la sesión utilizará el Router multimedia de vídeo de Vonage) (MediaMode.ROUTED) o intentar transmitir flujos directamente entre clientes (MediaMode.RELAYED, el valor por defecto). Se requiere una sesión enrutada para algunas funcionalidades 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, puedes empezar a generar tokens para que los clientes los utilicen al conectarse a ella. Puedes 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).

Creación de un archivo

Puedes iniciar la grabación de una sesión de vídeo de Vonage utilizando 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);

A continuación se muestran todos los métodos que puedes utilizar en el generador:

  • WithName te permite añadir un nombre al archivo (para identificarlo).
  • DisableVideo te permite desactivar la grabación de vídeo.
  • DisableAudio permite desactivar la grabación de audio.
  • WithResolution te permite configurar la resolución de la grabación. Ten en cuenta que no puedes especificar la resolution cuando configures el outputMode parámetro 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);

Recuperación de 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

Puedes eliminar un archivo utilizando el 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

Puedes 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 todas las secuencias

Puedes recuperar todas las secuencias de una sesión utilizando la VideoClient.SessionClient.GetStreamsAsync(GetStreamsRequest) método.

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

Desconexión forzada

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.

El 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 retransmisión en directo de una sesión de Vonage Video utilizando el 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

Puedes detener una emisión utilizando el 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.

Recuperación de 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

Puedes recuperar todas las emisiones utilizando el 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);  

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

Puedes obligar al emisor a dejar de emitir audio, ya sea para una transmisión concreta o para todas las transmisiones 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

Necesitas 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.