H.265 Stream Failover Relay com Web UI
Recebe um stream SRT (H.265/HEVC), monitora o fluxo de dados, e troca automaticamente para um vídeo de fallback quando o stream cai. Envia para múltiplos destinos RTMP com passthrough H.265 ou transcoding H.264.
Moblin/externo (H.265) → SRTLA://ip-vps:5000/Bbox → SRT:8282 → SRT → [Oracle Stream Studio] → RTMP
↑
[Fallback .ts]
- Oracle Stream Studio recebe o fluxo SRT via FFmpeg e lê pacotes MPEGTS
- Monitora continuamente se dados estão chegando
- Se o SRT parar por mais de 2 segundos (configurável):
- Troca para o fallback no próximo keyframe (zero artefatos)
- O fallback é um arquivo
.tspré-encodado em H.265 com os mesmos parâmetros
- Quando o SRT volta:
- Espera um keyframe no fluxo SRT
- Troca de volta para o stream ao vivo
| Tipo | CPU | Uso |
|---|---|---|
| H.265 Passthrough | ~0% | YouTube (Enhanced RTMP) |
| H.264 Transcode | ~50% (2 cores) | Twitch, Kick, Facebook |
git clone https://github.com/paraisospelosul/oracle-stream-studio.git /opt/oracle-stream-studio
cd /opt/oracle-stream-studio
bash scripts/install.shO script instala: FFmpeg 7.0+, Go, compila o Oracle Stream Studio, e configura o systemd.
A partir de uma imagem:
bash scripts/create_fallback.sh brb.pngA partir de um vídeo:
bash scripts/create_fallback.sh -d 120 meu_video.mp4go mod tidy
go build -o oracle-stream-studio .# Conectar ao SRTLA na porta 8282 (modo caller)
sudo ./oracle-stream-studio --fallback fallback.ts
# Escutar SRT na porta 5000 (modo listener)
sudo ./oracle-stream-studio --srt-mode listener --srt-addr 0.0.0.0:5000 --fallback fallback.ts
# Porta web customizada
sudo ./oracle-stream-studio --fallback fallback.ts --port 8080Abra http://SEU_IP no navegador.
| Flag | Default | Descrição |
|---|---|---|
--srt-addr |
localhost:8282 |
Endereço SRT (host:porta) |
--srt-mode |
caller |
Modo SRT: caller ou listener |
--fallback |
(obrigatório) | Caminho do arquivo MPEGTS de fallback |
--port |
80 |
Porta da Web UI |
--srt-timeout |
2000 |
Timeout SRT em ms antes de trocar para fallback |
--data-dir |
(dir do binário) | Diretório para configs e dados |
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/status |
Status geral (switcher + outputs) |
GET |
/api/outputs |
Lista saídas |
POST |
/api/outputs |
Adiciona saída |
PUT |
/api/outputs/{id} |
Atualiza saída |
DELETE |
/api/outputs/{id} |
Remove saída |
POST |
/api/outputs/{id}/start |
Inicia saída |
POST |
/api/outputs/{id}/stop |
Para saída |
curl -X POST http://localhost/api/outputs \
-H "Content-Type: application/json" \
-d '{
"name": "YouTube 1",
"url": "rtmp://a.rtmp.youtube.com/live2",
"stream_key": "SUA_CHAVE",
"codec": "h265"
}'curl -X POST http://localhost/api/outputs \
-H "Content-Type: application/json" \
-d '{
"name": "Twitch",
"url": "rtmp://live.twitch.tv/app",
"stream_key": "SUA_CHAVE",
"codec": "h264",
"bitrate": 6000,
"preset": "ultrafast"
}'- OS: Ubuntu 22.04+ ou Oracle Linux 9
- CPU: 4 cores (ARM Ampere recomendado)
- RAM: 4GB+ (24GB ideal)
- FFmpeg: 7.0+ (para Enhanced RTMP H.265)
- Rede: Porta 80 TCP (Web UI), porta SRT (UDP)
O arquivo .ts de fallback deve ter:
- Codec: H.265 (HEVC)
- Resolução: Mesma do stream (1920x1080)
- FPS: Mesmo do stream (30)
- Keyframe interval: 2 segundos (60 frames)
- Áudio: AAC, 48kHz, stereo
- Container: MPEGTS
Use o script create_fallback.sh para garantir compatibilidade.
O Oracle Stream Studio possui integração nativa de gerenciamento (Start/Stop, Logs e Edição de Configuração) com a suíte de recepção SRTLA.
Agradecimentos especiais a:
- Rationalirl: O criador e idealizador original do protocolo e da stack SRTLA (Belabox), que revolucionou as transmissões IRL de código aberto ao possibilitar o bonding robusto de conexões móveis.
- Datagutt: O atual mantenedor principal e desenvolvedor líder do ecossistema SRTLA. Agradecemos imensamente a ele pela evolução contínua do Belabox Receiver e do SRTLA moderno (que agora conta com telemetria avançada), fornecendo a base atualizada e robusta de agregação que a nossa comunidade utiliza ativamente na produção.
As entradas padrão do Bbox seguem os seguintes formatos de StreamID para autenticação (configurados no config.json):
| Direção | Protocolo | Porta | Formato do streamid |
Exemplo Prático |
|---|---|---|---|---|
| Entrada (Mochila) | SRTLA | 5000 |
live/stream/nomedostream?srtauth=suachave |
srtla://ip:5000?streamid=live/stream/belabox?srtauth=belabox |
| Saída (Local) | SRT | 8282 |
play/stream/nomedostream?srtauth=suachave |
srt://localhost:8282?streamid=play/stream/belabox?srtauth=belabox |
Score de Segurança: 10/10 🎯 (Auditado e certificado para ambientes Enterprise)
O Oracle Stream Studio foi projetado com defesa em profundidade e segurança robusta, implementando as seguintes proteções ativas:
- Autenticação Obrigatória: Suporte nativo a HTTP Basic Auth para blindar a Web UI contra acessos não autorizados.
- CORS & WebSocket Origin Checks: Restrição estrita de origens que só aceita conexões do mesmo Host do servidor e desenvolvimento local (
localhost/127.0.0.1). - Prevenção de DoS no WebSocket: Limitação física das mensagens a 4KB e rate limiting ativo de até 30 mensagens por segundo com auto-throttling para evitar flood de rede/CPU.
- Limites de Upload Inteligentes: Limite geral de 10MB para comandos JSON padrão na API REST e limite estendido de até 100MB para uploads de arquivos usando
MaxBytesReader. - Verificação de Espaço em Disco: Bloqueio ativo de novos uploads (
checkDiskSpace) caso a VPS tenha menos de 500MB de espaço livre em disco, evitando exaustão do sistema de arquivos. - Cabeçalhos de Segurança Modernos: Envio automático de cabeçalhos contra ataques web:
Content-Security-Policy(CSP restritivo protegendo contra injeções XSS)X-Frame-Options: SAMEORIGIN(proteção absoluta contra clickjacking)X-Content-Type-Options: nosniff(anti-MIME-sniffing)
- Prevenção de Path Traversal: Uso rigoroso de
filepath.Base()na manipulação, download e exclusão de arquivos de gravação. - Audit Trail (Logs de Auditoria): Logs estruturados contendo o prefixo
[AUDIT]registrando o timestamp, IP do cliente e detalhes de cada ação mutativa sensível (reinicializações, alterações de setup, controle de gravação e Docker). - CI/CD Integrado: Pipeline de integração contínua (
.github/workflows/test.yml) configurado para rodar verificações de integridade de código (go vet,golangci-lint), testes automatizados com cobertura de código e builds de build validation em cada push.
Para mais detalhes sobre qualidade, governança e conformidade:
- 🛡️ AUDIT_REPORT.md - Relatório de Auditoria de Segurança completo (10/10)
- 📊 COVERAGE_REPORT.md - Relatório detalhado de cobertura de testes (60%+)
- 🚀 PRODUCTION_READY.md - Certificado de Prontidão para Produção
- 🔒 SECURITY.md - Política de divulgação de vulnerabilidades
- 📝 CHANGELOG.md - Histórico de alterações e lançamentos
- 🤝 CONTRIBUTING.md - Guia de setup local e contribuições
- 🗺️ ROADMAP.md - Cronograma e metas futuras
- 👥 MAINTAINERS.md - Mantenedores principais e governança
MIT