Saltar a contenido

Bloques Bridge

Media Blocks SDK .Net

Los bridges pueden usarse para enlazar dos pipelines y cambiar dinámicamente entre ellos. Por ejemplo, puede cambiar entre diferentes archivos o cámaras en el primer Pipeline sin interrumpir el streaming en el segundo Pipeline.

Para enlazar fuente y sink, deles el mismo nombre. Cada par de bridge tiene un nombre de canal único.

Bridge audio sink y source

Los bridges pueden usarse para conectar diferentes pipelines de medios y usarlos independientemente. BridgeAudioSourceBlock se usa para conectarse a BridgeAudioSinkBlock y soporta audio sin comprimir.

Información del bloque

Información de BridgeAudioSourceBlock

Dirección del pin Tipo de medio Cantidad de pines
Salida de audio audio sin comprimir 1

Información de BridgeAudioSinkBlock

Dirección del pin Tipo de medio Cantidad de pines
Entrada de audio audio sin comprimir 1

Pipelines de ejemplo

Primer pipeline con una fuente de audio y un bridge audio sink

graph LR;
    VirtualAudioSourceBlock-->BridgeAudioSinkBlock;

Segundo pipeline con un bridge audio source y un renderizador de audio

graph LR;
    BridgeAudioSourceBlock-->AudioRendererBlock;

Código de ejemplo

El pipeline fuente con fuente de audio virtual y bridge audio sink.

// crear pipeline fuente
var sourcePipeline = new MediaBlocksPipeline();

// crear fuente de audio virtual y bridge audio sink
var audioSourceBlock = new VirtualAudioSourceBlock(new VirtualAudioSourceSettings());
var bridgeAudioSink = new BridgeAudioSinkBlock(new BridgeAudioSinkSettings());

// conectar fuente y sink
sourcePipeline.Connect(audioSourceBlock.Output, bridgeAudioSink.Input);

// iniciar pipeline
await sourcePipeline.StartAsync();

El pipeline sink con bridge audio source y renderizador de audio.

// crear pipeline sink
var sinkPipeline = new MediaBlocksPipeline();

// crear bridge audio source y renderizador de audio
var bridgeAudioSource = new BridgeAudioSourceBlock(new BridgeAudioSourceSettings());
var audioRenderer = new AudioRendererBlock();

// conectar fuente y sink
sinkPipeline.Connect(bridgeAudioSource.Output, audioRenderer.Input);

// iniciar pipeline
await sinkPipeline.StartAsync();

Bridge video sink y source

Los bridges pueden usarse para conectar diferentes pipelines de medios y usarlos independientemente. BridgeVideoSinkBlock se usa para conectarse al BridgeVideoSourceBlock y soporta video sin comprimir.

Información de los bloques

Información de BridgeVideoSinkBlock

Dirección del pin Tipo de medio Cantidad de pines
Entrada de video video sin comprimir 1

Información de BridgeVideoSourceBlock

Dirección del pin Tipo de medio Cantidad de pines
Salida de video video sin comprimir 1

Pipelines de ejemplo

Primer pipeline con una fuente de video y un bridge video sink

graph LR;
    VirtualVideoSourceBlock-->BridgeVideoSinkBlock;

Segundo pipeline con un bridge video source y un renderizador de video

graph LR;
    BridgeVideoSourceBlock-->VideoRendererBlock;

Código de ejemplo

Pipeline fuente con una fuente de video virtual y bridge video sink.

// crear pipeline fuente
var sourcePipeline = new MediaBlocksPipeline();

// crear fuente de video virtual y bridge video sink
var videoSourceBlock = new VirtualVideoSourceBlock(new VirtualVideoSourceSettings());
var bridgeVideoSink = new BridgeVideoSinkBlock(new BridgeVideoSinkSettings());

// conectar fuente y sink
sourcePipeline.Connect(videoSourceBlock.Output, bridgeVideoSink.Input);

// iniciar pipeline
await sourcePipeline.StartAsync();

Pipeline sink con un bridge video source y renderizador de video.

// crear pipeline sink
var sinkPipeline = new MediaBlocksPipeline();

// crear bridge video source y renderizador de video
var bridgeVideoSource = new BridgeVideoSourceBlock(new BridgeVideoSourceSettings());
var videoRenderer = new VideoRendererBlock(sinkPipeline, VideoView1);

// conectar fuente y sink
sinkPipeline.Connect(bridgeVideoSource.Output, videoRenderer.Input);

// iniciar pipeline
await sinkPipeline.StartAsync();

Bridge subtitle sink y source

Los bridges pueden usarse para conectar diferentes pipelines de medios y usarlos independientemente. BridgeSubtitleSourceBlock se usa para conectarse al BridgeSubtitleSinkBlock y soporta tipo de medio de texto.

Información del bloque

Información de BridgeSubtitleSourceBlock

Dirección del pin Tipo de medio Cantidad de pines
Salida de video texto 1

Información de BridgeSubtitleSinkBlock

Dirección del pin Tipo de medio Cantidad de pines
Salida de video texto 1

Proxy source

El par de bloques proxy source/proxy sink puede usarse para conectar diferentes pipelines de medios y usarlos independientemente.

Información del bloque

Nombre: ProxySourceBlock.

Dirección del pin Tipo de medio Cantidad de pines
Salida Cualquier sin comprimir 1

Pipelines de ejemplo

Primer pipeline con una fuente de video y un proxy video sink

graph LR;
    VirtualVideoSourceBlock-->ProxySinkBlock;

Segundo pipeline con un proxy video source y un renderizador de video

graph LR;
    ProxySourceBlock-->VideoRendererBlock;

Código de ejemplo

// pipeline fuente con fuente de video virtual y proxy sink
var sourcePipeline = new MediaBlocksPipeline();
var videoSourceBlock = new VirtualVideoSourceBlock(new VirtualVideoSourceSettings());
var proxyVideoSink = new ProxySinkBlock();
sourcePipeline.Connect(videoSourceBlock.Output, proxyVideoSink.Input);

// pipeline sink con proxy video source y renderizador de video
var sinkPipeline = new MediaBlocksPipeline();
var proxyVideoSource = new ProxySourceBlock(proxyVideoSink);
var videoRenderer = new VideoRendererBlock(sinkPipeline, VideoView1);
sinkPipeline.Connect(proxyVideoSource.Output, videoRenderer.Input);

// iniciar pipelines
await sourcePipeline.StartAsync();
await sinkPipeline.StartAsync();

Plataformas

Todos los bloques bridge son soportados en Windows, macOS, Linux, iOS y Android.

Bridge Buffer sink y source

Los bloques BridgeBuffer proporcionan comunicación de alto rendimiento basada en buffer de memoria entre pipelines, ideal para compartir frames de video sin sobrecarga de codificación.

Información del bloque

Información de BridgeBufferSinkBlock

Dirección del pin Tipo de medio Cantidad de pines
Entrada de video video sin comprimir 1

Información de BridgeBufferSourceBlock

Dirección del pin Tipo de medio Cantidad de pines
Salida auto 1

Código de ejemplo

// Primer pipeline con fuente de video y bridge buffer sink
var sourcePipeline = new MediaBlocksPipeline();
var videoSource = new SystemVideoSourceBlock(videoSettings);

var videoInfo = new VideoFrameInfoX(1920, 1080, VideoFormatX.NV12);
var bufferSink = new BridgeBufferSinkBlock("buffer-channel", videoInfo);
sourcePipeline.Connect(videoSource.Output, bufferSink.Input);

// Segundo pipeline con bridge buffer source y renderizador
var sinkPipeline = new MediaBlocksPipeline();
var bufferSource = new BridgeBufferSourceBlock("buffer-channel");
var videoRenderer = new VideoRendererBlock(sinkPipeline, VideoView1);
sinkPipeline.Connect(bufferSource.Output, videoRenderer.Input);

await sourcePipeline.StartAsync();
await sinkPipeline.StartAsync();

InterPipe sink y source

Los bloques InterPipe usan los elementos interpipesink/interpipesrc de GStreamer para comunicación eficiente entre pipelines con soporte para audio y video.

Información del bloque

Información de InterPipeSinkBlock

Dirección del pin Tipo de medio Cantidad de pines
Entrada audio o video 1

Información de InterPipeSourceBlock

Dirección del pin Tipo de medio Cantidad de pines
Salida audio o video 1

Código de ejemplo

// Primer pipeline con fuente de video e interpipe sink
var sourcePipeline = new MediaBlocksPipeline();
var videoSource = new SystemVideoSourceBlock(videoSettings);

var videoInfo = new VideoFrameInfoX(1920, 1080, VideoFormatX.NV12);
var interpipeSink = new InterPipeSinkBlock("interpipe-channel", videoInfo);
sourcePipeline.Connect(videoSource.Output, interpipeSink.Input);

// Segundo pipeline con interpipe source y renderizador
var sinkPipeline = new MediaBlocksPipeline();
var interpipeSource = new InterPipeSourceBlock("interpipe-channel", MediaBlockPadMediaType.Video);
var videoRenderer = new VideoRendererBlock(sinkPipeline, VideoView1);
sinkPipeline.Connect(interpipeSource.Output, videoRenderer.Input);

await sourcePipeline.StartAsync();
await sinkPipeline.StartAsync();

RS Inter sink y source

Los bloques RSInter usan el plugin GStreamer rsinter basado en Rust para comunicación de alto rendimiento entre pipelines.

Información del bloque

Información de RSInterSinkBlock

Dirección del pin Tipo de medio Cantidad de pines
Entrada audio o video 1

Información de RSInterSourceBlock

Dirección del pin Tipo de medio Cantidad de pines
Salida audio o video 1

Código de ejemplo

// Primer pipeline con fuente de video y rsinter sink
var sourcePipeline = new MediaBlocksPipeline();
var videoSource = new SystemVideoSourceBlock(videoSettings);

var rsinterSink = new RSInterSinkBlock(MediaBlockPadMediaType.Video, "rsinter-channel");
sourcePipeline.Connect(videoSource.Output, rsinterSink.Input);

// Segundo pipeline con rsinter source y renderizador
var sinkPipeline = new MediaBlocksPipeline();
var rsinterSource = new RSInterSourceBlock(MediaBlockPadMediaType.Video, "rsinter-channel");
var videoRenderer = new VideoRendererBlock(sinkPipeline, VideoView1);
sinkPipeline.Connect(rsinterSource.Output, videoRenderer.Input);

await sourcePipeline.StartAsync();
await sinkPipeline.StartAsync();

Plataformas

Todos los bloques bridge son soportados en Windows, macOS, Linux, iOS y Android.

Nota: Los bloques InterPipe y RSInter requieren que los plugins GStreamer correspondientes estén instalados.