Bloques AWS S3 - VisioForge Media Blocks SDK .Net¶
Los bloques AWS S3 permiten la interacción con Amazon Simple Storage Service (S3) para leer archivos de medios como fuentes o escribir archivos de medios como sinks dentro de sus pipelines.
AWSS3SinkBlock¶
El AWSS3SinkBlock le permite escribir datos de medios de su pipeline a un archivo en un bucket de AWS S3. Esto es útil para almacenar medios grabados, archivos transcodificados u otras salidas directamente al almacenamiento en la nube.
Información del bloque¶
Nombre: AWSS3SinkBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Auto (depende del bloque conectado) | 1 |
Configuraciones¶
El AWSS3SinkBlock se configura usando AWSS3SinkSettings. Propiedades principales:
Uri(string): La URI de S3 donde se escribirá el archivo de medios (ej., "s3://nombre-de-su-bucket/ruta/a/archivo/salida.mp4").AccessKeyId(string): Su ID de clave de acceso de AWS.SecretAccessKey(string): Su clave de acceso secreta de AWS.Region(string): La región de AWS donde está ubicado el bucket (ej., "us-east-1").SessionToken(string, opcional): Token de sesión de AWS, si usa credenciales temporales.EndpointUrl(string, opcional): URL de endpoint personalizado compatible con S3.ContentType(string, opcional): El tipo MIME del contenido que se está cargando (ej., "video/mp4").StorageClass(string, opcional): Clase de almacenamiento de S3 (ej., "STANDARD", "INTELLIGENT_TIERING").ServerSideEncryption(string, opcional): Método de cifrado del lado del servidor (ej., "AES256", "aws:kms").ACL(string, opcional): Lista de Control de Acceso para el objeto cargado (ej., "private", "public-read").
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->VideoEncoderBlock;
VideoEncoderBlock-->MuxerBlock;
SystemAudioSourceBlock-->AudioEncoderBlock;
AudioEncoderBlock-->MuxerBlock;
MuxerBlock-->AWSS3SinkBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Crear fuente de video (ej., webcam)
var videoDevice = (await DeviceEnumerator.Shared.VideoSourcesAsync())[0];
var videoSourceSettings = new VideoCaptureDeviceSourceSettings(videoDevice);
var videoSource = new SystemVideoSourceBlock(videoSourceSettings);
// Crear fuente de audio (ej., micrófono)
var audioDevice = (await DeviceEnumerator.Shared.AudioSourcesAsync())[0];
var audioSourceSettings = audioDevice.CreateSourceSettings(audioDevice.Formats[0].ToFormat());
var audioSource = new SystemAudioSourceBlock(audioSourceSettings);
// Crear codificador de video
var h264Settings = new OpenH264EncoderSettings(); // Configuraciones de ejemplo del codificador
var videoEncoder = new H264EncoderBlock(h264Settings);
// Crear codificador de audio
var opusSettings = new OpusEncoderSettings(); // Configuraciones de ejemplo del codificador
var audioEncoder = new OpusEncoderBlock(opusSettings);
// Crear un muxer (ej., MP4MuxBlock)
var mp4MuxSettings = new MP4MuxSettings();
var mp4Muxer = new MP4MuxBlock(mp4MuxSettings);
// Configurar AWSS3SinkSettings
var s3SinkSettings = new AWSS3SinkSettings
{
Uri = "s3://nombre-de-su-bucket/salida/video-grabado.mp4",
AccessKeyId = "SU_ID_DE_CLAVE_DE_ACCESO_AWS",
SecretAccessKey = "SU_CLAVE_DE_ACCESO_SECRETA_AWS",
Region = "su-region-aws", // ej., "us-east-1"
ContentType = "video/mp4"
};
var s3Sink = new AWSS3SinkBlock(s3SinkSettings);
// Conectar ruta de video
pipeline.Connect(videoSource.Output, videoEncoder.Input);
pipeline.Connect(videoEncoder.Output, mp4Muxer.CreateNewInput(MediaBlockPadMediaType.Video));
// Conectar ruta de audio
pipeline.Connect(audioSource.Output, audioEncoder.Input);
pipeline.Connect(audioEncoder.Output, mp4Muxer.CreateNewInput(MediaBlockPadMediaType.Audio));
// Conectar muxer al sink S3
pipeline.Connect(mp4Muxer.Output, s3Sink.Input);
// Verificar si AWSS3Sink está disponible
if (!AWSS3SinkBlock.IsAvailable())
{
Console.WriteLine("El Bloque AWS S3 Sink no está disponible. Verifique los redistribuibles del SDK.");
return;
}
// Iniciar pipeline
await pipeline.StartAsync();
// ... esperar a que termine la grabación ...
// Detener pipeline
await pipeline.StopAsync();
Observaciones¶
Puede verificar si el AWSS3SinkBlock está disponible en tiempo de ejecución usando el método estático AWSS3SinkBlock.IsAvailable(). Esto asegura que los plugins GStreamer subyacentes necesarios y los componentes del SDK de AWS estén presentes.
Plataformas¶
Windows, macOS, Linux. (La disponibilidad depende del plugin AWS de GStreamer y el soporte del SDK de AWS en estas plataformas).