Resumen de streams
El tile de streams es un navegador unificado para cada fuente de vídeo en directo que tiene la misión. Tiene tres pestañas y un único evento de selección al que escucha el resto de la consola.
Las tres pestañas
TACLINK
Cada pista de vídeo peer-to-peer actualmente publicada en la sala de la misión — drones Android de mano, aeronaves de DJI dock, bodycams, cámaras de móvil. Renderizado como una cuadrícula de miniaturas en directo.
VMS
Cámaras CCTV e IP vinculadas a esta misión — HLS, MJPEG, MP4 directo o embed. Incluye un formulario para añadir cámara, prueba por cámara, controles PTZ y metadatos de integración con el mapa.
DOCKS
DJI docks actualmente asignados a esta misión, limitado al ámbito de tu organización. Estado, batería, texto de actividad y apertura con un clic.
Consulta las páginas por pestaña para más detalles:
Qué lee el tile de la sala
El tile se suscribe a WebRtcService.status$ y refleja status.video.streams[].
Cada entrada contiene:
peerId— la identidad del participante LiveKit (p. ej.dji-dock-{sn}para el peer de telemetría de un DJI dock;dji-dock-{sn}-{videoSlug}para su ingress de vídeo; otros IDs para peers de mano).trackId— la pista de vídeo específica dentro de ese peer. Las pistas secundarias de drone (zoom/térmica) llevan un sufijoVIDEO_DRONE_TRACK_ID + '_…'y se ocultan de la cuadrícula.stream— el propioMediaStream.active— si la pista está produciendo frames actualmente.
La resolución del nombre del drone se ejecuta en un efecto reactivo: cada nuevo
peer id se busca contra los assets de Firestore (firebaseApi.getAsset(droneId))
para mostrar un indicativo legible en lugar de un UUID. Los resultados se
almacenan en caché en un signal droneNames para que los renderizados
posteriores sean gratuitos.
Abrir un stream (el evento de selección)
Al hacer clic en cualquier miniatura de stream se emite el evento
streamSelected desde el tile. La forma del payload:
{ peerId: string; trackId: string; isDrone: boolean; dockSn?: string; mode?: 'taclink' | 'djiCloud';}- Para peers de drone normales,
isDrone: true, sindockSn,mode: 'taclink'. - Para peers de DJI dock,
isDrone: true,dockSnresuelto desde el peer id,mode: 'djiCloud'— esto indica al tile de drone-stream que enrute a través del transporte DJI Cloud en lugar de TACLINK. - Para cámaras VMS, un flujo independiente (sin evento
streamSelected) enruta al tile de camera-stream o al panel del reproductor VMS.
El componente padre (normalmente operation.component) escucha el evento y
cambia el tile de drone-stream enlazado al stream seleccionado.
Overlays en modo depuración
Con el modo depuración activado, cada tarjeta de
stream muestra un pequeño badge de latencia con el tiempo de ida y vuelta en
milisegundos. El tile consulta RTCPeerConnection.getStats() para cada peer
conectado cada 2 segundos y extrae currentRoundTripTime del par de candidatos
seleccionado. Los valores por encima de ~200 ms indican pérdida de paquetes o un
relé TURN; por debajo de 100 ms indica una ruta directa sana o un relé rápido.
Los badges de depuración son aditivos — si los activas antes de abrir TACLINK, aparecerán para cada stream en cuanto cambies a esa pestaña.
Cicla entre streams
La cabecera del tile tiene botones chevron prev/next cuando hay más de un stream
disponible. Invocan cyclePrevStream() / cycleNextStream() que avanzan la
selección en módulo sobre el número de streams, con wrap-around en los
extremos. La cabecera muestra la posición actual como N / total.
No hay atajos de teclado conectados para ciclar; los operadores que quieran atajos deben reasignarlos desde la página de controles.
Persistencia de pestañas
La pestaña actual se guarda en el signal activeTab — es de ámbito de sesión
(no persiste entre recargas). Si siempre quieres TACLINK primero, ese es el
valor por defecto — las demás pestañas son opt-in por sesión.
Relacionado
- TACLINK
- Cámaras VMS
- DOCKS
- Reenvío de streams
- Grabaciones
- Drone stream tile — donde se abren los streams seleccionados.