Receta: restransmitir un feed a YouTube, Twitch y Facebook
Ingerí una vez, empujá a todas partes. Sumá YouTube, Twitch y Facebook como destinos RTMP simultáneos desde un solo stream en vivo — cada uno su propio egress aislado, con claves enmascaradas y reintentos automáticos.
Por qué restransmitir
Tu audiencia no está en una sola plataforma. Algunos miran en YouTube, otros en Twitch, otros en tu propio embed. Restransmitir te deja producir una vez y aparecer en todas al mismo tiempo, sin correr tres codificadores. StreamHub ingiere un solo feed y lo reparte a cualquier cantidad de destinos RTMP externos, cada uno como su propio push aislado.
La arquitectura en palabras
Traés el medio una sola vez — un push RTMP, un publicador WHIP, o una ingesta pull RTSP — así existe un stream en vivo. Después, por destino, StreamHub arranca un egress dedicado que empuja esa sala a la URL RTMP de la plataforma. Cada destino es independiente: si uno falla (una clave equivocada, un tropiezo de la plataforma) nunca tumba a los otros. La API guarda tus claves de stream del lado servidor y solo devuelve una URL enmascarada.
1. Primero poné un stream en vivo
Restream reenvía un stream que ya está en vivo, así que empezá con cualquier ingesta y arrancá a publicar. Por ejemplo, un push RTMP desde OBS (ver la receta de RTMP) hacia la app live, sala show. Confirmá que está en vivo:
export BASE="https://your-server.example.com/api/v1"
export TOKEN="sk_...."
curl -s $BASE/apps/live/streams -H "Authorization: Bearer $TOKEN"
Anotá el id del stream — es sala/participante, url-codificado en las rutas (ej. show/pub1 → show%2Fpub1).
2. Sumar YouTube
Para YouTube pegás solo la clave de stream — la URL base es un preset incluido:
curl -s -X POST "$BASE/apps/live/streams/show%2Fpub1/restream" \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"platform":"youtube","key":"xxxx-xxxx-xxxx-xxxx","name":"YouTube Live"}'
El campo platform acepta youtube, twitch, facebook o custom (el default). Los presets arman la URL completa por vos:
- youtube →
rtmp://a.rtmp.youtube.com/live2/<key> - twitch →
rtmp://live.twitch.tv/app/<key> - facebook →
rtmps://live-api-s.facebook.com:443/rtmp/<key>
3. Sumar los demás (en simultáneo)
Repetí la llamada por plataforma. Cada una se vuelve su propio egress y corre en paralelo:
curl -s -X POST "$BASE/apps/live/streams/show%2Fpub1/restream" \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"platform":"twitch","key":"live_123_abc","name":"Twitch"}'
Para una plataforma sin preset, usá custom y pasá la URL completa vos mismo:
curl -s -X POST "$BASE/apps/live/streams/show%2Fpub1/restream" \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"platform":"custom","url":"rtmp://live.example.net/app/streamkey","name":"Sitio socio"}'
4. Ver y gestionar los destinos
Listá cada destino y su estado por endpoint:
curl -s "$BASE/apps/live/streams/show%2Fpub1/restream" -H "Authorization: Bearer $TOKEN"
Cada entrada devuelve platform, urlMasked (nunca la clave cruda), status (starting | active | failed | stopped), retries y timestamps. Detené un destino sin molestar al resto:
curl -s -X DELETE "$BASE/apps/live/streams/show%2Fpub1/restream/<egressId>" \
-H "Authorization: Bearer $TOKEN"
Los callbacks de ciclo de vida restream_started, restream_stopped y restream_failed mantienen tu backend en sync (las URLs del payload van enmascaradas).
Qué deberías ver
En unos segundos cada plataforma muestra tu stream. En la API, cada destino reporta active. Matar uno (por ejemplo, una clave de Twitch equivocada pasa a failed) deja a YouTube y los demás intactos.
Resolución de problemas
- Un destino muestra
failed— la clave suele estar mal o la plataforma rechazó la conexión. StreamHub reintenta con backoff exponencial (5s, 10s, 20s) hasta 3 veces, luego lo deja enfailed; corregí la clave y volvé a agregarlo. - 409 Conflict al agregar — ese destino exacto ya está restransmitiendo desde esta sala. Quitá el viejo primero.
- ¿Un solo destino? — si solo empujás a un lugar, el más simple
POST /apps/live/broadcast/startcon unrtmpUrlcompleto lo hace en una sola llamada. Restream es la vía multi-destino. - Presupuesto de egress — cada destino se factura contra la cuota
max_egress_gb_monthdel tenant, igual que la grabación y el egress HLS.
Cierre
Restransmitir viene integrado y es open source — sin un SaaS de multistream de terceros en el camino, y tus claves nunca salen de tu servidor. Si manejás una operación de difusión y querés layouts, salidas al aire multiplataforma programadas, o failover conectado a alertas, es un armado de consultoría directo sobre las primitivas mostradas acá.