Skip to content

Latest commit

 

History

29 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Oracle Stream Studio

H.265 Stream Failover Relay com Web UI

Security Audit Go Version License CI/CD Tests

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.

Arquitetura

Moblin/externo (H.265) → SRTLA://ip-vps:5000/Bbox → SRT:8282 → SRT → [Oracle Stream Studio] → RTMP
                                                                 ↑
                                                            [Fallback .ts]

Como funciona o failover

  1. Oracle Stream Studio recebe o fluxo SRT via FFmpeg e lê pacotes MPEGTS
  2. Monitora continuamente se dados estão chegando
  3. 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 .ts pré-encodado em H.265 com os mesmos parâmetros
  4. Quando o SRT volta:
    • Espera um keyframe no fluxo SRT
    • Troca de volta para o stream ao vivo

Tipos de saída

Tipo CPU Uso
H.265 Passthrough ~0% YouTube (Enhanced RTMP)
H.264 Transcode ~50% (2 cores) Twitch, Kick, Facebook

Instalação rápida (VPS Oracle)

git clone https://github.com/paraisospelosul/oracle-stream-studio.git /opt/oracle-stream-studio
cd /opt/oracle-stream-studio
bash scripts/install.sh

O script instala: FFmpeg 7.0+, Go, compila o Oracle Stream Studio, e configura o systemd.

Uso manual

1. Criar o arquivo de fallback

A partir de uma imagem:

bash scripts/create_fallback.sh brb.png

A partir de um vídeo:

bash scripts/create_fallback.sh -d 120 meu_video.mp4

2. Compilar

go mod tidy
go build -o oracle-stream-studio .

3. Executar

# 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 8080

4. Acessar a Web UI

Abra http://SEU_IP no navegador.

Flags

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

API REST

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

Exemplo: Adicionar saída YouTube (H.265)

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"
  }'

Exemplo: Adicionar saída Twitch (H.264)

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"
  }'

Requisitos do VPS

  • 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)

Requisitos do fallback

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.

Integração Belabox & Agradecimentos

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.

Padrões de Entrada/Saída do Bbox

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

Segurança Auditada & Conformidade 🛡Core

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.

📚 Documentação do Projeto

Para mais detalhes sobre qualidade, governança e conformidade:

Licença

MIT

About

I created this project using Claude Opus 4.6 and Gemini 3.5. The idea is to use Oracle's free VPS without a GPU to have a web manager for receiving video with the SRTLA protocol. For this, I'm using the BBOX-receiver from DataGutt and its own web menu controlled locally via browser, with multiple RTMP outputs for the platforms.

Resources

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages