Bloques Bridge¶
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.