Recon
Video y audio de Recon
Transmite video en vivo y grabado desde cada una de las cámaras de un robot Recon, y su audio en vivo: obtén las URL de transmisión de todas las cámaras con getAllMediaUris, elige la cámara que quieres y reprodúcela como cualquier cámara de Rhombus.
En esta página
Esta página se tradujo automáticamente. Si encuentras errores o tienes sugerencias, escríbenos.
Un robot lleva una o más cámaras y un micrófono. Cada uno es una faceta del robot: las facetas de video se llaman v0, v1, etc., y las de audio, a0. Sus transmisiones funcionan igual que las de una cámara de Rhombus, así que se aplican las guías de transmisión y Medios y transmisiones. Los ejemplos usan la función auxiliar robot_api de la descripción general.
Necesitas una credencial con acceso solo en vivo al robot para las transmisiones en vivo, y acceso de solo lectura para el video grabado.
Obtén las URL de transmisión
getAllMediaUris devuelve las URL de todas las facetas a la vez:
media = robot_api("getAllMediaUris", {"deviceUuid": ROBOT_UUID})
for facet, uris in media["videoFacetUris"].items():
print(facet, uris.get("wanLiveM3u8Uri"))
for facet, uris in media["audioFacetUris"].items():
print(facet, uris.get("wanLiveOpusUri"))| Campo | Contiene |
|---|---|
videoFacetUris | Para cada faceta de video: wanLiveM3u8Uri (HLS), wanLiveMpdUri (DASH), wanLiveH264Uri (H.264 por WebSocket), wanVodM3u8UriTemplate y wanVodMpdUriTemplate (video grabado), y sus equivalentes lan… |
audioFacetUris | Para cada faceta de audio: wanLiveOpusUri (Opus por WebSocket) y lanLiveOpusUris |
wanLiveRobotUri | El socket en vivo del robot, para control y telemetría |
lanCheckUrls | URL que responden 204 cuando tu cliente puede llegar al robot por la red local |
Vuelve a obtener las URL antes de reconectarte a una transmisión. El host de medios del robot puede cambiar.
Elige una cámara
getFullState indica qué facetas tiene el robot y hacia dónde apunta cada cámara:
state = robot_api("getFullState", {"deviceUuid": ROBOT_UUID, "force": False})["fullState"]
directions = (state.get("robotPlatformCapability") or {}).get("facetOrientationDegrees") or {}
names = state.get("facetNameMap") or {}
for facet in state.get("supportedFacets", []):
if facet in media["videoFacetUris"]:
print(facet, names.get(facet, ""), directions.get(facet), "degrees")supportedFacetsenumera las facetas que el robot tiene realmente. Usa solo las facetas que aparecen tanto ahí como engetAllMediaUris.facetOrientationDegreesda la dirección de cada cámara, en sentido antihorario desde la dirección de avance del robot:0mira hacia adelante y180, hacia atrás.facetNameMapcontiene el nombre de cada faceta.
Reproduce video en vivo
Reproduce la URL de una faceta como la de una cámara. En un navegador, genera un token federado en tu servidor y agrégalo a la URL:
const url = `${videoFacetUris.v0.wanLiveM3u8Uri}?x-auth-scheme=federated-token&x-auth-ft=${encodeURIComponent(token)}`;
if (video.canPlayType("application/vnd.apple.mpegurl")) {
video.src = url;
} else {
const hls = new Hls();
hls.loadSource(url);
hls.attachMedia(video);
}Desde un servidor o una app nativa, envía en su lugar los encabezados de tu clave de API en cada solicitud. DASH y el WebSocket H.264 funcionan como se describe en Video en vivo y grabado.
Video grabado
Las plantillas wanVodM3u8UriTemplate y wanVodMpdUriTemplate de una faceta reproducen lo que grabó esa cámara. Reemplaza {START_TIME} (hora Unix en segundos) y {DURATION} (segundos) en la plantilla:
template = media["videoFacetUris"]["v0"]["wanVodM3u8UriTemplate"]
url = template.replace("{START_TIME}", str(start_seconds)).replace("{DURATION}", "300")Para encontrar los momentos que vale la pena ver, usa los eventos del robot: cada llegada a una parada de patrulla tiene un timestampMs.
Audio en vivo
wanLiveOpusUri es un WebSocket que transmite audio Opus desde el micrófono del robot. Autentícalo igual que el WebSocket H.264 (WebSocket (H.264 y audio)).
En la red local
Cuando tu cliente está en la red del robot, solicita una de las lanCheckUrls. Si responde 204, usa las URL lan… para tener menos latencia y no generar tráfico por internet. Streaming por LAN explica los certificados y la autenticación en la red local.