Add SRT Monitor Data Provider widget - #71
Open
rafalau wants to merge 12 commits into
Open
Conversation
New widget that receives and previews SRT (Secure Reliable Transport) streams directly inside vMixUTC using LibVLCSharp + libvlc. Features: - Listener and Caller modes - Configurable port, latency, AES passphrase, key length and stream ID - Embedded video preview with VideoView (Win32 HWND via LibVLCSharp.WPF) - Per-instance audio control via :no-audio media option — isolated between multiple SRT Monitor instances on the same layout - Default IP pre-filled from the current vMix connection - Vertical resize support (IsResizeableVertical) - Play/Stop icon buttons (Font Awesome) - State persisted through vMixUTC's DataProvider serialization mechanism Core changes: - vMixUTCSRTDataProvider: new project (SrtMonitorDataProvider.dll) - vMixControlExternalData: IsResizeableVertical = true - vMixControlContainer.xaml: vertical resize thumb - ControlTemplates.xaml: Height binding on ExternalDataWidgetControl - MainViewModel: ProcessHotkey skips focus steal when TextBox has focus - HighPrecisionTimer / Popcron.Sheets: target framework bump to v4.7.2 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The main vMixController.exe is built with 32BITPREF=1 (runs as WoW64/32-bit). The SRT plugin was compiled as x64 (PE32+), causing BadImageFormatException on load. Changed PlatformTarget from x64 to AnyCPU (PE32) so the managed DLL loads in both 32-bit and 64-bit host processes. VLC native DLLs remain in libvlc/win-x64/ and are loaded at runtime only when the user connects. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Detect process architecture at runtime and load libvlc from win-x86 when the host process is 32-bit (WoW64), instead of always hardcoding win-x64 which fails to load under the 32BITPREF=1 Release binary. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- vMixController Release: add Prefer32Bit=false so process runs as 64-bit (same as Debug), allowing win-x64 VLC to load correctly - SRTDataProvider: detect process arch at runtime for VLC path selection - OnWidgetUI: surface real VLC init error instead of hardcoded message - README: add download link and install instructions for the prebuilt ZIP Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New toggle "Enable Auto Sync" in the menu. When enabled, a background TCP connection subscribes to SUBSCRIBE ACTS on vMix port 8099. Any event fired by vMix (input added, switched, changed) triggers an immediate SyncTovMixState() with 300ms debounce, instead of waiting for the 20s polling cycle. - VmixTcpSubscriber: connects TCP 8099, sends SUBSCRIBE ACTS, fires debounced event on any ACTS line; auto-reconnects on disconnect - MainWindowSettings.AutoSync: persisted bool property - MainViewModel: starts/stops subscriber when AutoSync or IP changes - MainWindow.xaml: checkable "Enable Auto Sync" menu item Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SUBSCRIBE ACTS only fires on function calls, missing text edits and other direct vMix UI changes. Add a 2-second XML polling loop that compares the full vMix XML hash — if anything changed, triggers sync. TCP subscriber is kept as a complement for instant ACTS notification. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove complex hash/TCP approach. When Enable Auto Sync is active, a DispatcherTimer fires SyncTovMixState() every second — guaranteed to catch any change in vMix regardless of type. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- UpdateAsync(ignoreCache): new param passes ignoreCache:true to SendFunction so the batcher doesn't return stale data every 1s - AutoSyncTick calls Model.UpdateAsync(ignoreCache:true) directly - UpdateAutoSync() is now also called when WindowSettings is set, so the timer starts immediately if AutoSync was saved as true Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ructions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
SRT Monitor — Data Provider para vMixUTC
Widget de monitoramento de streams SRT integrado ao vMixUTC, desenvolvido como um Data Provider externo.
O que é
O SRT Monitor permite receber e visualizar streams de vídeo via protocolo SRT (Secure Reliable Transport) diretamente dentro do vMixUTC, sem precisar abrir um player externo. Ideal para monitorar sinais de entrada antes de colocá-los no ar no vMix.
Funcionalidades
Requisitos
libvlc (VLC nativo)
O widget depende das DLLs nativas do VLC. Elas não estão incluídas no repositório (são grandes demais).
libvlcepluginsdo diretório de instalação do VLC para:A estrutura esperada:
Tecnologias utilizadas
Arquitetura
O plugin implementa a interface
IvMixDataProviderdo vMixUTC:Cada widget cria sua própria instância de
LibVLCeMediaPlayer, garantindo isolamento total de vídeo e áudio entre múltiplos monitores na mesma tela.O controle de áudio usa a opção
:no-audiodiretamente na mídia quando o checkbox é desmarcado, e reconecta automaticamente ao alternar — evitando qualquer compartilhamento de estado no pipeline de áudio do Windows.Como compilar
# Restaurar pacotes NuGet e compilar (gera o DLL em vMixController/bin/Debug/DataProviders/) MSBuild vMixUTCSRTDataProvider.csproj /p:Configuration=Debug /p:Platform=AnyCPU /t:BuildCréditos
Idealizado por rafalau.
Implementado com assistência de Claude Sonnet 4.6 (Anthropic).