SDK de servidor .NET
El vídeo de Vonage SDK de .NET ofrece métodos para:
- Generación sesiones y fichas para Vonage Video Applications que se ejecutan en la plataforma .NET. El SDK también incluye funciones para trabajar con Archivos de vídeo de Vonage.
- Vonage Video Applications que se ejecutan en la plataforma .NET
- Trabajar con Archivos de vídeo de Vonage
- Trabajar con Retransmisiones en directo de Vonage Video
- Trabajar con Interconexión SIP de vídeo de Vonage
- Envío de señales a los clientes conectados a una sesión
- Desconectar a los clientes de las sesiones
- Forzar a los clientes de una sesión a desconectarse o silenciar el audio publicado
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.
locationDirecció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).ArchiveModeEspecifica 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:
WithNamete permite añadir un nombre al archivo (para identificarlo).DisableVideote permite desactivar la grabación de vídeo.DisableAudiopermite desactivar la grabación de audio.WithResolutionte permite configurar la resolución de la grabación. Ten en cuenta que no puedes especificar laresolutioncuando configures eloutputModeparámetro aOutputMode.INDIVIDUAL.WithOutputModepermite 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) indicandoOutputMode.INDIVIDUAL.WithStreamModepermite 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.