Saltearse al contenido

Pestaña TACLINK

TACLINK es la primera pestaña del tile de streams. Muestra cada pista de vídeo peer-to-peer actualmente publicada en la sala de la operación, sin importar su origen — drones Android de mano, DJI docks, bodycams, cámaras de móvil, cualquier cosa con una pista de vídeo publicada.

Qué hay en la cuadrícula

Cada fila de status.video.streams[] se convierte en una tarjeta con:

  • Miniatura en directo — el primer frame de la pista, actualizada con cada keyframe.
  • Nombre del drone — resuelto mediante búsqueda de asset en Firebase a partir del drone ID del peer. Antes de completarse la resolución, se muestra el propio drone ID. Los peers DJI usan como fallback el SN del dock si no hay ningún drone vinculado.
  • Badge de dispositivo — píldora de texto que muestra cuál es la fuente: p. ej. “Dock 3” para aeronaves de DJI dock, “Android” para handhelds, “Bodycam” para cámaras corporales.
  • Badge DJI — sólo en peers DJI (peerId.startsWith('dji-dock-')). Muestra “DJI Cloud API” en un color de acento distintivo para que los operadores sepan que al hacer clic se enrutará a través del transporte DJI Cloud.
  • Latencia de depuración (sólo en modo depuración) — milisegundos, consultados cada 2 s desde getStats().
  • Botón Abrir — emite el evento streamSelected al resto de la consola.

Las pistas secundarias del drone están ocultas

La mayoría de drones producen más de una pista de vídeo — p. ej. una pista FPV primaria + una lente zoom + una vista térmica. Sólo la pista primaria se muestra en la cuadrícula TACLINK. Las pistas secundarias (aquellas cuyo trackId empieza por VIDEO_DRONE_TRACK_ID + '_') son accesibles desde dentro del tile de drone-stream una vez que has seleccionado la primaria de ese drone. Motivo: el ciclado a nivel de cuadrícula debe representar “qué drone”, no “qué lente”, para que los operadores no se saturen con miniaturas duplicadas.

Detección de peers DJI

El tile usa isDjiPeer(peerId)peerId.startsWith('dji-dock-') — para detectar participantes DJI. Por dock entran dos formatos de identidad DJI en la sala:

  • Peer de telemetría — identidad dji-dock-{sn}. Publica el canal de datos protobuf (estado del dock, estado de la aeronave, telemetría de flight-status). No transporta vídeo.
  • Peer de ingress de vídeo — identidad dji-dock-{sn}-{videoSlug}. Publicado por el ingress WHIP (ya sea el autopilot o un streams/start manual). Transporta la pista H.264 real.

TACLINK muestra el peer de vídeo en la cuadrícula. Cuando se abre la tarjeta, el tile resuelve el peer de telemetría (telemetryPeerIdForDjiPeer(peerId) elimina el slug de vídeo) para que las lecturas de estado del dock sigan funcionando — las búsquedas dockStatusByPeer[telemetryId] y aircraftStatusByPeer[telemetryId] apuntan al peer correcto.

El chip del modelo de dock

Para peers DJI, la tarjeta muestra un chip “Dock 1 / Dock 2 / Dock 3” basado en el modelo reportado por el dock. Resolución:

  1. Buscar dockStatusByPeer[telemetryId].dockModel.
  2. Si está vacío, usar aircraftStatusByPeer[telemetryId].dockModel.
  3. Normalizar el string (p. ej. dock_3Dock 3).

Si ninguna fuente tiene aún un string de modelo (conexión nueva, telemetría todavía no publicada), el chip se renderiza como “DJI” sin número de versión.

Abrir un stream

Haz clic en cualquier tarjeta o en el botón Abrir explícito. El tile emite streamSelected con:

{
peerId: 'dji-dock-1ZNDH1D0010098-1ZNDH1D0010098_39_0_7_normal_0',
trackId: 'video-1',
isDrone: true,
dockSn: '1ZNDH1D0010098',
mode: 'djiCloud'
}

…o para un handheld:

{
peerId: 'peer-abc-123',
trackId: 'video-drone-main',
isDrone: true,
mode: 'taclink'
}

La consola padre escucha esto e intercambia la fuente enlazada del tile de drone-stream.

Cicla entre streams

Los botones chevron a nivel de cabecera ciclan el stream seleccionado hacia delante/atrás. Indicador de posición N / total. Wrap-around en los extremos.

Filtros y ordenación

La cuadrícula TACLINK actualmente no tiene UI de filtros — cada stream activo se renderiza. Si tienes muchos streams simultáneos, la cuadrícula maneja hasta ~16 miniaturas con elegancia antes de que el rendimiento se degrade (todas las miniaturas están en directo, no son estáticas — realmente están decodificando). Para escenarios de muchos streams, abre streams específicos en el tile de drone-stream y deja la cuadrícula colapsada.

El orden es efectivamente “orden de publicación” — los streams aparecen en el orden en que se unieron a la sala. Los streams más nuevos aparecen al final.

Limitaciones conocidas

  • Sin filtros de cuadrícula (por tipo, drone, equipo) en la build actual. Previsto.
  • Sin mute por stream desde la cuadrícula — el mute ocurre dentro del tile de drone-stream.
  • Sin pinning — no puedes fijar un stream específico para que se renderice siempre en la posición 0.

Relacionado