setName(e.target.value)} />
{[
{ id: 'SRT', label: 'SRT', desc: 'Secure Reliable Transport — pull caller', icon: 'signal' },
{ id: 'RTMP', label: 'RTMP', desc: 'Real-Time Messaging Protocol', icon: 'globe' },
{ id: 'SDI', label: 'SDI', desc: 'Blackmagic DeckLink hardware', icon: 'video' },
{ id: 'DELTACAST', label: 'Deltacast', desc: 'Deltacast VideoMaster SDI', icon: 'video' },
].map(t => (
))}
{sourceType === 'SRT' && (
setSrtUrl(e.target.value)} style={{ flex: 1 }} />
Recorder connects out to this URL (caller mode).
{probeResult &&
}
)}
{sourceType === 'RTMP' && (
setRtmpUrl(e.target.value)} style={{ flex: 1 }} />
Recorder pulls this RTMP stream.
{probeResult &&
}
)}
{sourceType === 'SDI' && (
{sdiDevices === null && (
Detecting DeckLink devices…
)}
{sdiDevices !== null && sdiDevices.length > 0 && (
{sdiDevices.map((dev, di) => (
{(dev.model || dev.device || 'DeckLink').toUpperCase()} · {dev.hostname}
{Array.from({ length: dev.port_count || 4 }, (_, i) => i).map(idx => (
))}
))}
)}
{sdiDevices !== null && sdiDevices.length === 0 && (
No DeckLink devices auto-detected. Configure manually:
)}
)}
{sourceType === 'DELTACAST' && (
{dcDevices === null && (
Detecting Deltacast devices…
)}
{dcDevices !== null && dcDevices.length > 0 && (
{(() => {
// Group by node
const byNode = {};
dcDevices.forEach(dev => {
const key = dev.node_id || dev.hostname || 'unknown';
if (!byNode[key]) byNode[key] = { ...dev, ports: [] };
byNode[key].ports.push(dev);
});
return Object.values(byNode).map((node, ni) => (
{(node.model || 'Deltacast').toUpperCase()} · {node.hostname}
{node.ports.map(port => (
))}
));
})()}
)}
{dcDevices !== null && dcDevices.length === 0 && (
No Deltacast devices detected. Configure manually (test-card mode):
)}
)}
Master recording
{['video', 'audio', 'container'].map(t => (
))}
{recTab === 'video' && (
)}
{recTab === 'audio' && (
)}
{recTab === 'container' && (
)}
{proxyOn && (
Proxy
{['H.264', '2 Mbps', 'MP4', '1920×1080', 'AAC 128 kbps'].map(tag => (
{tag}
))}
Fixed proxy profile — not configurable.
)}
Destination
{submitErr && (
{submitErr}
)}