[{"data":1,"prerenderedAt":2459},["ShallowReactive",2],{"navigation_docs_es":3,"-es-installation-control-and-encoder-same-host":431,"-es-installation-control-and-encoder-same-host-surround":2454},[4,25,83,133,247,262,332,365,411],{"title":5,"path":6,"stem":7,"children":8,"page":24},"Getting Started","\u002Fes\u002Fgetting-started","es\u002F1.getting-started",[9,14,19],{"title":10,"path":11,"stem":12,"icon":13},"Introducción","\u002Fes\u002Fgetting-started\u002Fintroduction","es\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Quickstart","\u002Fes\u002Fgetting-started\u002Fquickstart","es\u002F1.getting-started\u002F2.quickstart","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Conceptos","\u002Fes\u002Fgetting-started\u002Fconcepts","es\u002F1.getting-started\u002F3.concepts","i-lucide-book-open",false,{"title":26,"path":27,"stem":28,"children":29,"page":24},"Live Production","\u002Fes\u002Flive-production","es\u002F2.live-production",[30,35,55,69],{"title":31,"path":32,"stem":33,"icon":34},"On air","\u002Fes\u002Flive-production\u002Fon-air","es\u002F2.live-production\u002F1.on-air","i-lucide-radio",{"title":36,"path":37,"stem":38,"children":39,"page":24},"Live Streams","\u002Fes\u002Flive-production\u002Flive-streams","es\u002F2.live-production\u002F2.live-streams",[40,45,50],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Fes\u002Flive-production\u002Flive-streams\u002Foverview","es\u002F2.live-production\u002F2.live-streams\u002F1.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Options","\u002Fes\u002Flive-production\u002Flive-streams\u002Flive-stream-options","es\u002F2.live-production\u002F2.live-streams\u002F2.live-stream-options","i-lucide-file-text",{"title":51,"path":52,"stem":53,"icon":54},"Inicio y parada","\u002Fes\u002Flive-production\u002Flive-streams\u002Fstart-stop","es\u002F2.live-production\u002F2.live-streams\u002F3.start-stop","i-lucide-play-circle",{"title":56,"path":57,"stem":58,"children":59,"page":24},"Scheduler","\u002Fes\u002Flive-production\u002Fscheduler","es\u002F2.live-production\u002F3.scheduler",[60,64],{"title":41,"path":61,"stem":62,"icon":63},"\u002Fes\u002Flive-production\u002Fscheduler\u002Foverview","es\u002F2.live-production\u002F3.scheduler\u002F1.overview","i-lucide-calendar-clock",{"title":65,"path":66,"stem":67,"icon":68},"Planned actions","\u002Fes\u002Flive-production\u002Fscheduler\u002Fplanned-actions","es\u002F2.live-production\u002F3.scheduler\u002F2.planned-actions","i-lucide-alarm-clock",{"title":70,"path":71,"stem":72,"children":73,"page":24},"Recordings","\u002Fes\u002Flive-production\u002Frecordings","es\u002F2.live-production\u002F4.recordings",[74,78],{"title":41,"path":75,"stem":76,"icon":77},"\u002Fes\u002Flive-production\u002Frecordings\u002Foverview","es\u002F2.live-production\u002F4.recordings\u002F1.overview","i-lucide-circle-dot",{"title":79,"path":80,"stem":81,"icon":82},"Editor","\u002Fes\u002Flive-production\u002Frecordings\u002Feditor","es\u002F2.live-production\u002F4.recordings\u002F2.editor","i-lucide-scissors",{"title":84,"path":85,"stem":86,"children":87,"page":24},"Configuration","\u002Fes\u002Fconfiguration","es\u002F3.configuration",[88,102,107,120],{"title":89,"path":90,"stem":91,"children":92,"page":24},"Devices","\u002Fes\u002Fconfiguration\u002Fdevices","es\u002F3.configuration\u002F1.devices",[93,97],{"title":89,"path":94,"stem":95,"icon":96},"\u002Fes\u002Fconfiguration\u002Fdevices\u002Fdevices","es\u002F3.configuration\u002F1.devices\u002F1.devices","i-lucide-server",{"title":98,"path":99,"stem":100,"icon":101},"Groups","\u002Fes\u002Fconfiguration\u002Fdevices\u002Fgroups","es\u002F3.configuration\u002F1.devices\u002F2.groups","i-lucide-network",{"title":103,"path":104,"stem":105,"icon":106},"Sources","\u002Fes\u002Fconfiguration\u002Fsources","es\u002F3.configuration\u002F2.sources","i-lucide-cable",{"title":108,"path":109,"stem":110,"children":111,"page":24},"Encodings","\u002Fes\u002Fconfiguration\u002Fencodings","es\u002F3.configuration\u002F3.encodings",[112,116],{"title":108,"path":113,"stem":114,"icon":115},"\u002Fes\u002Fconfiguration\u002Fencodings\u002Fprofiles","es\u002F3.configuration\u002F3.encodings\u002F1.profiles","i-lucide-sliders-horizontal",{"title":98,"path":117,"stem":118,"icon":119},"\u002Fes\u002Fconfiguration\u002Fencodings\u002Fgroups","es\u002F3.configuration\u002F3.encodings\u002F2.groups","i-lucide-layers",{"title":121,"path":122,"stem":123,"children":124,"page":24},"Destinations","\u002Fes\u002Fconfiguration\u002Fdestinations","es\u002F3.configuration\u002F4.destinations",[125,129],{"title":121,"path":126,"stem":127,"icon":128},"\u002Fes\u002Fconfiguration\u002Fdestinations\u002Fdestinations","es\u002F3.configuration\u002F4.destinations\u002F1.destinations","i-lucide-send",{"title":98,"path":130,"stem":131,"icon":132},"\u002Fes\u002Fconfiguration\u002Fdestinations\u002Fpublishing-groups","es\u002F3.configuration\u002F4.destinations\u002F2.publishing-groups","i-lucide-share-2",{"title":134,"path":135,"stem":136,"children":137,"page":24},"Settings","\u002Fes\u002Fsettings","es\u002F4.settings",[138,151,156,172,188],{"title":139,"path":140,"stem":141,"children":142,"page":24},"Users","\u002Fes\u002Fsettings\u002Fusers","es\u002F4.settings\u002F1.users",[143,147],{"title":139,"path":144,"stem":145,"icon":146},"\u002Fes\u002Fsettings\u002Fusers\u002Fusers","es\u002F4.settings\u002F1.users\u002F1.users","i-lucide-user",{"title":98,"path":148,"stem":149,"icon":150},"\u002Fes\u002Fsettings\u002Fusers\u002Fuser-groups","es\u002F4.settings\u002F1.users\u002F2.user-groups","i-lucide-users",{"title":152,"path":153,"stem":154,"icon":155},"Security","\u002Fes\u002Fsettings\u002Fsecurity","es\u002F4.settings\u002F2.security","i-lucide-shield",{"title":157,"icon":158,"path":159,"stem":160,"children":161,"page":24},"Assets","i-lucide-image","\u002Fes\u002Fsettings\u002Fassets","es\u002F4.settings\u002F3.assets",[162,167],{"title":163,"path":164,"stem":165,"icon":166},"Logos","\u002Fes\u002Fsettings\u002Fassets\u002Flogos","es\u002F4.settings\u002F3.assets\u002F1.logos","i-lucide-images",{"title":168,"path":169,"stem":170,"icon":171},"Files","\u002Fes\u002Fsettings\u002Fassets\u002Ffiles","es\u002F4.settings\u002F3.assets\u002F2.files","i-lucide-clapperboard",{"title":173,"icon":174,"path":175,"stem":176,"children":177,"page":24},"External Storage","i-lucide-folder-cog","\u002Fes\u002Fsettings\u002Fexternal-storage","es\u002F4.settings\u002F4.external-storage",[178,183],{"title":179,"path":180,"stem":181,"icon":182},"Remote Folders","\u002Fes\u002Fsettings\u002Fexternal-storage\u002Fremote-folders","es\u002F4.settings\u002F4.external-storage\u002F1.remote-folders","i-lucide-folder-archive",{"title":184,"path":185,"stem":186,"icon":187},"Target Folders","\u002Fes\u002Fsettings\u002Fexternal-storage\u002Ftarget-folders","es\u002F4.settings\u002F4.external-storage\u002F2.target-folders","i-lucide-folder-up",{"title":189,"path":190,"stem":191,"children":192,"page":24},"Integrations","\u002Fes\u002Fsettings\u002Fintegrations","es\u002F4.settings\u002F5.integrations",[193,197,202,216],{"title":41,"path":194,"stem":195,"icon":196},"\u002Fes\u002Fsettings\u002Fintegrations\u002Foverview","es\u002F4.settings\u002F5.integrations\u002F1.overview","i-lucide-plug",{"title":198,"path":199,"stem":200,"icon":201},"MediaCopilot","\u002Fes\u002Fsettings\u002Fintegrations\u002Fmediacopilot","es\u002F4.settings\u002F5.integrations\u002F2.mediacopilot","i-lucide-sparkles",{"title":203,"icon":204,"path":205,"stem":206,"children":207,"page":24},"C21 Live Cloud","i-lucide-cloud","\u002Fes\u002Fsettings\u002Fintegrations\u002Fc21livecloud","es\u002F4.settings\u002F5.integrations\u002F3.c21livecloud",[208,211],{"title":41,"path":209,"stem":210,"icon":204},"\u002Fes\u002Fsettings\u002Fintegrations\u002Fc21livecloud\u002Foverview","es\u002F4.settings\u002F5.integrations\u002F3.c21livecloud\u002F1.overview",{"title":212,"path":213,"stem":214,"icon":215},"Accounts","\u002Fes\u002Fsettings\u002Fintegrations\u002Fc21livecloud\u002Faccounts","es\u002F4.settings\u002F5.integrations\u002F3.c21livecloud\u002F2.accounts","i-lucide-key-round",{"title":217,"icon":155,"path":218,"stem":219,"children":220,"page":24},"DRM Providers","\u002Fes\u002Fsettings\u002Fintegrations\u002Fdrm","es\u002F4.settings\u002F5.integrations\u002F4.drm",[221,225,229,233,237,242],{"title":41,"path":222,"stem":223,"icon":224},"\u002Fes\u002Fsettings\u002Fintegrations\u002Fdrm\u002Foverview","es\u002F4.settings\u002F5.integrations\u002F4.drm\u002F1.overview","i-lucide-shield-check",{"title":226,"path":227,"stem":228,"icon":155},"Widevine","\u002Fes\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fwidevine","es\u002F4.settings\u002F5.integrations\u002F4.drm\u002F2.widevine",{"title":230,"path":231,"stem":232,"icon":155},"PlayReady","\u002Fes\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fplayready","es\u002F4.settings\u002F5.integrations\u002F4.drm\u002F3.playready",{"title":234,"path":235,"stem":236,"icon":155},"FairPlay","\u002Fes\u002Fsettings\u002Fintegrations\u002Fdrm\u002Ffairplay","es\u002F4.settings\u002F5.integrations\u002F4.drm\u002F4.fairplay",{"title":238,"path":239,"stem":240,"icon":241},"Providers","\u002Fes\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fproviders","es\u002F4.settings\u002F5.integrations\u002F4.drm\u002F5.providers","i-lucide-shield-half",{"title":243,"path":244,"stem":245,"icon":246},"Workflow","\u002Fes\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fworkflow","es\u002F4.settings\u002F5.integrations\u002F4.drm\u002F6.workflow","i-lucide-workflow",{"title":248,"path":249,"stem":250,"children":251,"page":24},"System Status","\u002Fes\u002Fsystem-status","es\u002F5.system-status",[252,257],{"title":253,"path":254,"stem":255,"icon":256},"Commands","\u002Fes\u002Fsystem-status\u002Fcommands","es\u002F5.system-status\u002F1.commands","i-lucide-square-terminal",{"title":258,"path":259,"stem":260,"icon":261},"Logs","\u002Fes\u002Fsystem-status\u002Flogs","es\u002F5.system-status\u002F2.logs","i-lucide-scroll-text",{"title":263,"path":264,"stem":265,"children":266,"page":24},"How Tos","\u002Fes\u002Fhow-tos","es\u002F6.how-tos",[267,272,277,282,286,291,296,300,304,309,313,318,323,328],{"title":268,"path":269,"stem":270,"icon":271},"Arrancar y detener un Live stream","\u002Fes\u002Fhow-tos\u002Fstart-stream-via-api","es\u002F6.how-tos\u002F1.start-stream-via-api","i-lucide-terminal",{"title":273,"path":274,"stem":275,"icon":276},"Ingestar una emisión de YouTube Live","\u002Fes\u002Fhow-tos\u002Fingest-youtube-live","es\u002F6.how-tos\u002F10.ingest-youtube-live","i-lucide-youtube",{"title":278,"path":279,"stem":280,"icon":281},"Source Synchronized Encoding (SSE) — redundancia bit-idéntica","\u002Fes\u002Fhow-tos\u002Fsource-synchronized-encoding","es\u002F6.how-tos\u002F11.source-synchronized-encoding","i-lucide-copy-check",{"title":283,"path":284,"stem":285,"icon":34},"Emitir radio como vídeo","\u002Fes\u002Fhow-tos\u002Fbroadcast-radio-as-video","es\u002F6.how-tos\u002F12.broadcast-radio-as-video",{"title":287,"path":288,"stem":289,"icon":290},"Real Time streaming hacia Dolby Millicast","\u002Fes\u002Fhow-tos\u002Freal-time-streaming","es\u002F6.how-tos\u002F13.real-time-streaming","i-lucide-zap",{"title":292,"path":293,"stem":294,"icon":295},"Publicar en almacenamiento de objetos (S3, Azure Blob)","\u002Fes\u002Fhow-tos\u002Fpublish-to-object-storage","es\u002F6.how-tos\u002F14.publish-to-object-storage","i-lucide-database",{"title":297,"path":298,"stem":299,"icon":224},"Proteger un Live stream con multi-DRM","\u002Fes\u002Fhow-tos\u002Fmulti-drm-destination","es\u002F6.how-tos\u002F2.multi-drm-destination",{"title":301,"path":302,"stem":303,"icon":63},"Programar una emisión semanal recurrente","\u002Fes\u002Fhow-tos\u002Fweekly-recurring-broadcast","es\u002F6.how-tos\u002F3.weekly-recurring-broadcast",{"title":305,"path":306,"stem":307,"icon":308},"Cortar un clip en el Editor y enviarlo a MediaCopilot","\u002Fes\u002Fhow-tos\u002Fexport-recording-to-mediacopilot","es\u002F6.how-tos\u002F4.export-recording-to-mediacopilot","i-lucide-upload-cloud",{"title":310,"path":311,"stem":312,"icon":158},"Aplicar un logo a un Live stream en emisión","\u002Fes\u002Fhow-tos\u002Fapply-logo-overlay","es\u002F6.how-tos\u002F5.apply-logo-overlay",{"title":314,"path":315,"stem":316,"icon":317},"Hacer blackout o sustituir el programa de un Live stream","\u002Fes\u002Fhow-tos\u002Fbroadcast-blackout","es\u002F6.how-tos\u002F6.broadcast-blackout","i-lucide-square",{"title":319,"path":320,"stem":321,"icon":322},"Cambiar la fuente de un Live stream en emisión","\u002Fes\u002Fhow-tos\u002Fruntime-source-switch","es\u002F6.how-tos\u002F7.runtime-source-switch","i-lucide-repeat-2",{"title":324,"path":325,"stem":326,"icon":327},"Activar \u002F desactivar un Publishing en mitad de la emisión","\u002Fes\u002Fhow-tos\u002Ftoggle-publishing-mid-broadcast","es\u002F6.how-tos\u002F8.toggle-publishing-mid-broadcast","i-lucide-toggle-right",{"title":329,"path":330,"stem":331,"icon":34},"Contribuir una señal en directo a MediaCopilot Live","\u002Fes\u002Fhow-tos\u002Fcontribute-to-mediacopilot-live","es\u002F6.how-tos\u002F9.contribute-to-mediacopilot-live",{"title":333,"path":334,"stem":335,"children":336,"page":24},"Installation","\u002Fes\u002Finstallation","es\u002F7.installation",[337,342,347,352,357,361],{"title":338,"path":339,"stem":340,"icon":341},"Preparar el host","\u002Fes\u002Finstallation\u002Fprepare-host","es\u002F7.installation\u002F1.prepare-host","i-lucide-server-cog",{"title":343,"path":344,"stem":345,"icon":346},"Instalar C21 Live Control","\u002Fes\u002Finstallation\u002Fcontrol","es\u002F7.installation\u002F2.control","i-lucide-cloud-download",{"title":348,"path":349,"stem":350,"icon":351},"Instalar C21 Live Encoder","\u002Fes\u002Finstallation\u002Fencoder","es\u002F7.installation\u002F3.encoder","i-lucide-cpu",{"title":353,"path":354,"stem":355,"icon":356},"Actualizaciones","\u002Fes\u002Finstallation\u002Fupdates","es\u002F7.installation\u002F4.updates","i-lucide-refresh-cw",{"title":358,"path":359,"stem":360,"icon":215},"Licencias","\u002Fes\u002Finstallation\u002Flicenses","es\u002F7.installation\u002F5.licenses",{"title":362,"path":363,"stem":364,"icon":96},"Instalar C21 Live Control y C21 Live Encoder en un único host","\u002Fes\u002Finstallation\u002Fcontrol-and-encoder-same-host","es\u002F7.installation\u002F6.control-and-encoder-same-host",{"title":366,"path":367,"stem":368,"children":369,"page":24},"Developers","\u002Fes\u002Fdevelopers","es\u002F8.developers",[370,374,392],{"title":41,"path":371,"stem":372,"icon":373},"\u002Fes\u002Fdevelopers\u002Foverview","es\u002F8.developers\u002F1.overview","i-lucide-code",{"title":375,"icon":373,"path":376,"stem":377,"children":378,"page":24},"API","\u002Fes\u002Fdevelopers\u002Fapi","es\u002F8.developers\u002F2.api",[379,382,387],{"title":41,"path":380,"stem":381,"icon":373},"\u002Fes\u002Fdevelopers\u002Fapi\u002Foverview","es\u002F8.developers\u002F2.api\u002F1.overview",{"title":383,"path":384,"stem":385,"icon":386},"Autenticación","\u002Fes\u002Fdevelopers\u002Fapi\u002Fauthentication","es\u002F8.developers\u002F2.api\u002F2.authentication","i-lucide-key",{"title":388,"path":389,"stem":390,"icon":391},"Paginación y errores","\u002Fes\u002Fdevelopers\u002Fapi\u002Fpagination-errors","es\u002F8.developers\u002F2.api\u002F3.pagination-errors","i-lucide-list-ordered",{"title":393,"icon":394,"path":395,"stem":396,"children":397,"page":24},"MCP Server","i-lucide-bot","\u002Fes\u002Fdevelopers\u002Fmcp-server","es\u002F8.developers\u002F3.mcp-server",[398,401,406],{"title":41,"path":399,"stem":400,"icon":394},"\u002Fes\u002Fdevelopers\u002Fmcp-server\u002Foverview","es\u002F8.developers\u002F3.mcp-server\u002F1.overview",{"title":402,"path":403,"stem":404,"icon":405},"Tools","\u002Fes\u002Fdevelopers\u002Fmcp-server\u002Ftools","es\u002F8.developers\u002F3.mcp-server\u002F2.tools","i-lucide-wrench",{"title":407,"path":408,"stem":409,"icon":410},"Examples","\u002Fes\u002Fdevelopers\u002Fmcp-server\u002Fexamples","es\u002F8.developers\u002F3.mcp-server\u002F3.examples","i-lucide-play",{"title":412,"path":413,"stem":414,"children":415,"page":24},"Resources","\u002Fes\u002Fresources","es\u002F9.resources",[416,421,426],{"title":417,"path":418,"stem":419,"icon":420},"Enlaces","\u002Fes\u002Fresources\u002Flinks","es\u002F9.resources\u002F1.links","i-lucide-link",{"title":422,"path":423,"stem":424,"icon":425},"Release Notes","\u002Fes\u002Fresources\u002Frelease-notes","es\u002F9.resources\u002F2.release-notes","i-lucide-clipboard-list",{"title":427,"path":428,"stem":429,"icon":430},"Glosario","\u002Fes\u002Fresources\u002Fglossary","es\u002F9.resources\u002F3.glossary","i-lucide-book-a",{"id":432,"title":362,"body":433,"description":2447,"extension":2448,"links":2449,"meta":2450,"navigation":2451,"path":363,"seo":2452,"stem":364,"__hash__":2453},"docs_es\u002Fes\u002F7.installation\u002F6.control-and-encoder-same-host.md",{"type":434,"value":435,"toc":2428},"minimark",[436,441,457,467,479,483,491,597,600,616,623,627,665,672,676,2288,2291,2294,2329,2336,2388,2392,2424],[437,438,440],"h2",{"id":439},"cuándo-usar-este-despliegue","Cuándo usar este despliegue",[442,443,444,445,449,450,453,454,456],"p",{},"Un único host ejecuta ",[446,447,448],"strong",{},"C21 Live Control"," (un stack Docker compose) y ",[446,451,452],{},"C21 Live Encoder"," (el motor de codificación y su Apache, instalados en el host).\nLive Control gobierna el Encoder de su propio host desde la sección ",[446,455,89],{},", y puede gobernar además otros Encoders en otros hosts.",[442,458,459,460,463,464,466],{},"Este despliegue encaja cuando hay pocos hosts disponibles; por ejemplo, una VM cloud que tiene que aportar a la vez el plano de control y la primera\ncapacidad de codificación. Si dispones de más de un host, el despliegue estándar — el Control y cada Encoder en su propio host — es más sencillo de operar:\nsigue ",[461,462,343],"a",{"href":344}," e ",[461,465,348],{"href":349},".",[468,469,471,474,475,466],"callout",{"icon":470},"i-lucide-triangle-alert",[446,472,473],{},"Actualizar Live Control interrumpe el Encoder local."," Cada actualización de Live Control reinicia el servicio Docker, y el servicio del Encoder se para\ny arranca con él. Los Live streams del Encoder del mismo host se cortan entre uno y dos minutos y después se recuperan solos.\nPlanifica cada actualización de Live Control en una ventana de mantenimiento — consulta ",[461,476,478],{"href":477},"#actualizaciones-en-un-host-compartido","Actualizaciones en un host compartido",[437,480,482],{"id":481},"cómo-conviven-los-dos-productos","Cómo conviven los dos productos",[442,484,485,486,490],{},"Los dos productos sirven HTTPS en el puerto ",[487,488,489],"code",{},"443"," por defecto, así que uno de ellos tiene que moverse. Todo lo demás convive sin cambios.",[492,493,494,513],"table",{},[495,496,497],"thead",{},[498,499,500,504,507,510],"tr",{},[501,502,503],"th",{},"Puerto",[501,505,506],{},"Live Control",[501,508,509],{},"Live Encoder",[501,511,512],{},"En un host compartido",[514,515,516,539,555,569,583],"tbody",{},[498,517,518,524,527,530],{},[519,520,521],"td",{},[487,522,523],{},"443\u002Ftcp",[519,525,526],{},"HTTPS — UI operador y API REST",[519,528,529],{},"HTTPS — API del Encoder y salidas",[519,531,532,535,536,466],{},[446,533,534],{},"Conflicto."," Live Control pasa a ",[487,537,538],{},"9443",[498,540,541,546,549,552],{},[519,542,543],{},[487,544,545],{},"80\u002Ftcp",[519,547,548],{},"—",[519,550,551],{},"HTTP",[519,553,554],{},"Sin cambios.",[498,556,557,562,565,567],{},[519,558,559],{},[487,560,561],{},"9080\u002Ftcp",[519,563,564],{},"HTTP (redirige a HTTPS)",[519,566,548],{},[519,568,554],{},[498,570,571,576,579,581],{},[519,572,573],{},[487,574,575],{},"3100\u002Ftcp",[519,577,578],{},"Servidor MCP",[519,580,548],{},[519,582,554],{},[498,584,585,590,592,595],{},[519,586,587],{},[487,588,589],{},"8484\u002Ftcp",[519,591,548],{},[519,593,594],{},"Entrega de salidas",[519,596,554],{},[442,598,599],{},"Se mueve Live Control y no el Encoder porque:",[601,602,603,611],"ul",{},[604,605,606,607,610],"li",{},"Live Control llega a cada Encoder registrado en ",[487,608,609],{},"https:\u002F\u002F\u003Cip-del-encoder>\u002F"," — el formulario del Device pide una IP, no un puerto.",[604,612,613,614,466],{},"Los players, CDNs y orígenes que recogen la salida local del Encoder la piden al puerto ",[487,615,489],{},[442,617,618,619,622],{},"Los dos productos comparten además el ",[446,620,621],{},"fingerprint del host",": la licencia de ambos queda ligada al mismo valor.",[437,624,626],{"id":625},"antes-de-empezar","Antes de empezar",[601,628,629,646,649,652,662],{},[604,630,631,632,635,636,638,639,463,642,645],{},"Un host que cumpla los prerrequisitos de ",[446,633,634],{},"los dos"," productos — consulta ",[461,637,338],{"href":339},",\n",[461,640,343],{"href":641},"\u002Fes\u002Finstallation\u002Fcontrol#antes-de-empezar",[461,643,348],{"href":644},"\u002Fes\u002Finstallation\u002Fencoder#antes-de-empezar",".\nDimensiona CPU y RAM para la carga del Encoder más el stack del Control, que está limitado a 4 cores y 3 GiB de RAM.",[604,647,648],{},"Ubuntu 24.04 LTS (lo exige el Encoder) con IP fija.",[604,650,651],{},"El certificado de plataforma y su clave privada para el host, emitidos por Cires21 para la IP del host (cadena completa: leaf e intermedia).\nEl certificado autofirmado que generan los instaladores no basta: Live Control tiene que poder validar el certificado del Encoder para registrarlo.",[604,653,654,655,658,659,661],{},"La misma versión de destino para los dos productos, y ",[446,656,657],{},"6.12.0 o posterior en todos los Encoders que gobierne este Control"," — locales y remotos.\nDesde 6.12.0, Live Control entrega los logos y los ficheros de blackout al Encoder antes de cada orden. Los Encoders anteriores los descargan de\nLive Control en el puerto ",[487,660,489],{},", que en este host responde como el Encoder, así que en ellos fallan los logos y los blackouts.",[604,663,664],{},"Una ventana de mantenimiento — el instalador del Encoder actualiza el servidor SSH y corta las sesiones SSH entre uno y dos minutos.",[468,666,667,668,671],{"icon":271},"Lanza los dos instaladores desacoplados de la sesión SSH (por ejemplo con ",[487,669,670],{},"nohup",") para que el reinicio de SSH no aborte la instalación,\ny sigue el progreso en el log.",[437,673,675],{"id":674},"pasos","Pasos",[677,678,679,684,694,698,710,791,794,802,806,817,900,920,983,989,993,1045,1052,1056,1059,1087,1090,1166,1172,1176,1184,1316,1319,1374,1381,1385,1396,1402,1425,1429,1432,1508,1514,1531,1534,1599,1611,1688,1694,2024,2030,2100,2153,2164,2168,2178,2207,2214,2218,2282],"steps",{},[680,681,683],"h3",{"id":682},"_1-prepara-el-host","1. Prepara el host",[442,685,686,687,689,690,693],{},"Aplica ",[461,688,338],{"href":339}," — DNS, NTP, swap y política de actualizaciones del SO. Para el firewall, sigue el paso 8 de esta\npágina en lugar de la sección ",[487,691,692],{},"ufw"," de aquella: en un host compartido los puertos del Control los publica Docker y necesitan otro juego de reglas.",[680,695,697],{"id":696},"_2-instala-primero-live-control","2. Instala primero Live Control",[442,699,700,701,703,704,706,707,709],{},"Live Control va primero porque su instalador exige que el puerto ",[487,702,489],{}," esté libre. Cuando pase a ",[487,705,538],{}," en el paso siguiente, el ",[487,708,489],{}," queda libre para el Encoder.",[711,712,717],"pre",{"className":713,"code":714,"language":715,"meta":716,"style":716},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo nohup bash -c \"curl -fsSL https:\u002F\u002Fget.cires21.com\u002Flivecontrol \\\n  | bash -s -- --version \u003CX.Y.Z> --yes; echo INSTALL_EXIT=\\$?\" > \u002Ftmp\u002Flc-install.log 2>&1 &\ntail -f \u002Ftmp\u002Flc-install.log      # Espera a INSTALL_EXIT=0\n","bash","",[487,718,719,749,776],{"__ignoreMap":716},[720,721,724,728,732,735,738,742,745],"span",{"class":722,"line":723},"line",1,[720,725,727],{"class":726},"sBMFI","sudo",[720,729,731],{"class":730},"sfazB"," nohup",[720,733,734],{"class":730}," bash",[720,736,737],{"class":730}," -c",[720,739,741],{"class":740},"sMK4o"," \"",[720,743,744],{"class":730},"curl -fsSL https:\u002F\u002Fget.cires21.com\u002Flivecontrol ",[720,746,748],{"class":747},"sTEyZ","\\\n",[720,750,752,755,758,761,764,767,770,773],{"class":722,"line":751},2,[720,753,754],{"class":730},"  | bash -s -- --version \u003CX.Y.Z> --yes; echo INSTALL_EXIT=",[720,756,757],{"class":747},"\\$",[720,759,760],{"class":730},"?",[720,762,763],{"class":740},"\"",[720,765,766],{"class":740}," >",[720,768,769],{"class":730}," \u002Ftmp\u002Flc-install.log",[720,771,772],{"class":740}," 2>&1",[720,774,775],{"class":740}," &\n",[720,777,779,782,785,787],{"class":722,"line":778},3,[720,780,781],{"class":726},"tail",[720,783,784],{"class":730}," -f",[720,786,769],{"class":730},[720,788,790],{"class":789},"sHwdD","      # Espera a INSTALL_EXIT=0\n",[442,792,793],{},"Guarda los datos de acceso y las credenciales iniciales que el instalador imprime al final del log.",[468,795,797,798,801],{"icon":796},"i-lucide-shield-alert","A partir de aquí la UI operador y el servidor MCP son accesibles desde cualquier dirección que llegue al host, y ",[487,799,800],{},"admin"," conserva su contraseña inicial.\nEn un host expuesto a Internet, aplica la parte del Control del firewall (paso 8) justo después del paso 3, antes de seguir.",[680,803,805],{"id":804},"_3-pasa-el-https-de-live-control-al-puerto-9443","3. Pasa el HTTPS de Live Control al puerto 9443",[442,807,808,809,812,813,816],{},"Crea un override de compose en el directorio de instalación de Live Control (",[487,810,811],{},"\u002Fopt\u002Flivecontrol"," por defecto). El instalador solo regenera\n",[487,814,815],{},"docker-compose.yml",", así que este fichero sobrevive a las actualizaciones.",[711,818,820],{"className":713,"code":819,"language":715,"meta":716,"style":716},"sudo tee \u002Fopt\u002Flivecontrol\u002Fdocker-compose.override.yml >\u002Fdev\u002Fnull \u003C\u003C'EOF'\n# Host compartido Control + Encoder: el Encoder sirve HTTPS en 443.\nservices:\n  livecontrol:\n    ports: !override\n      - \"9080:80\"\n      - \"9443:443\"\nEOF\nsudo systemctl restart livecontrol   # Recrea los contenedores con los puertos nuevos\n",[487,821,822,843,848,853,859,865,871,877,883],{"__ignoreMap":716},[720,823,824,826,829,832,834,837,840],{"class":722,"line":723},[720,825,727],{"class":726},[720,827,828],{"class":730}," tee",[720,830,831],{"class":730}," \u002Fopt\u002Flivecontrol\u002Fdocker-compose.override.yml",[720,833,766],{"class":740},[720,835,836],{"class":730},"\u002Fdev\u002Fnull",[720,838,839],{"class":740}," \u003C\u003C",[720,841,842],{"class":740},"'EOF'\n",[720,844,845],{"class":722,"line":751},[720,846,847],{"class":730},"# Host compartido Control + Encoder: el Encoder sirve HTTPS en 443.\n",[720,849,850],{"class":722,"line":778},[720,851,852],{"class":730},"services:\n",[720,854,856],{"class":722,"line":855},4,[720,857,858],{"class":730},"  livecontrol:\n",[720,860,862],{"class":722,"line":861},5,[720,863,864],{"class":730},"    ports: !override\n",[720,866,868],{"class":722,"line":867},6,[720,869,870],{"class":730},"      - \"9080:80\"\n",[720,872,874],{"class":722,"line":873},7,[720,875,876],{"class":730},"      - \"9443:443\"\n",[720,878,880],{"class":722,"line":879},8,[720,881,882],{"class":740},"EOF\n",[720,884,886,888,891,894,897],{"class":722,"line":885},9,[720,887,727],{"class":726},[720,889,890],{"class":730}," systemctl",[720,892,893],{"class":730}," restart",[720,895,896],{"class":730}," livecontrol",[720,898,899],{"class":789},"   # Recrea los contenedores con los puertos nuevos\n",[442,901,902,905,906,909,910,913,914,916,917,919],{},[487,903,904],{},"livecontrol restart"," no basta aquí: reinicia los contenedores sin aplicar el nuevo mapeo de puertos.\nLa etiqueta ",[487,907,908],{},"!override"," requiere Docker Compose 2.24.4 o posterior — compruébalo con ",[487,911,912],{},"docker compose version",".\nVerifica que Live Control responde en ",[487,915,538],{}," y que el ",[487,918,489],{}," está libre:",[711,921,923],{"className":713,"code":922,"language":715,"meta":716,"style":716},"curl -sk -o \u002Fdev\u002Fnull -w \"%{http_code}\\n\" https:\u002F\u002F127.0.0.1:9443\u002F   # 200\nsudo ss -ltnp | grep ':443 '                                         # Sin salida\n",[487,924,925,955],{"__ignoreMap":716},[720,926,927,930,933,936,939,942,944,947,949,952],{"class":722,"line":723},[720,928,929],{"class":726},"curl",[720,931,932],{"class":730}," -sk",[720,934,935],{"class":730}," -o",[720,937,938],{"class":730}," \u002Fdev\u002Fnull",[720,940,941],{"class":730}," -w",[720,943,741],{"class":740},[720,945,946],{"class":730},"%{http_code}\\n",[720,948,763],{"class":740},[720,950,951],{"class":730}," https:\u002F\u002F127.0.0.1:9443\u002F",[720,953,954],{"class":789},"   # 200\n",[720,956,957,959,962,965,968,971,974,977,980],{"class":722,"line":751},[720,958,727],{"class":726},[720,960,961],{"class":730}," ss",[720,963,964],{"class":730}," -ltnp",[720,966,967],{"class":740}," |",[720,969,970],{"class":726}," grep",[720,972,973],{"class":740}," '",[720,975,976],{"class":730},":443 ",[720,978,979],{"class":740},"'",[720,981,982],{"class":789},"                                         # Sin salida\n",[442,984,985,986,466],{},"A partir de aquí la UI operador está en ",[487,987,988],{},"https:\u002F\u002F\u003Chost>:9443\u002F",[680,990,992],{"id":991},"_4-instala-live-encoder","4. Instala Live Encoder",[711,994,996],{"className":713,"code":995,"language":715,"meta":716,"style":716},"sudo nohup bash -c \"curl -fsSL https:\u002F\u002Fget.cires21.com\u002Fliveencoder \\\n  | bash -s -- --version \u003CX.Y.Z> --yes; echo INSTALL_EXIT=\\$?\" > \u002Ftmp\u002Fle-install.log 2>&1 &\ntail -f \u002Ftmp\u002Fle-install.log      # Espera a INSTALL_EXIT=0; SSH se corta 1–2 minutos durante la ejecución\n",[487,997,998,1015,1034],{"__ignoreMap":716},[720,999,1000,1002,1004,1006,1008,1010,1013],{"class":722,"line":723},[720,1001,727],{"class":726},[720,1003,731],{"class":730},[720,1005,734],{"class":730},[720,1007,737],{"class":730},[720,1009,741],{"class":740},[720,1011,1012],{"class":730},"curl -fsSL https:\u002F\u002Fget.cires21.com\u002Fliveencoder ",[720,1014,748],{"class":747},[720,1016,1017,1019,1021,1023,1025,1027,1030,1032],{"class":722,"line":751},[720,1018,754],{"class":730},[720,1020,757],{"class":747},[720,1022,760],{"class":730},[720,1024,763],{"class":740},[720,1026,766],{"class":740},[720,1028,1029],{"class":730}," \u002Ftmp\u002Fle-install.log",[720,1031,772],{"class":740},[720,1033,775],{"class":740},[720,1035,1036,1038,1040,1042],{"class":722,"line":778},[720,1037,781],{"class":726},[720,1039,784],{"class":730},[720,1041,1029],{"class":730},[720,1043,1044],{"class":789},"      # Espera a INSTALL_EXIT=0; SSH se corta 1–2 minutos durante la ejecución\n",[442,1046,1047,1048,1051],{},"En una VM cloud sin tarjetas de captura ni GPU, añade ",[487,1049,1050],{},"--skip-drivers"," a los flags del instalador. Live Control sigue en marcha durante la instalación del Encoder.",[680,1053,1055],{"id":1054},"_5-instala-las-licencias","5. Instala las licencias",[442,1057,1058],{},"Los dos productos muestran el mismo fingerprint:",[711,1060,1062],{"className":713,"code":1061,"language":715,"meta":716,"style":716},"sudo livecontrol license info\nsudo liveencoder license info\n",[487,1063,1064,1076],{"__ignoreMap":716},[720,1065,1066,1068,1070,1073],{"class":722,"line":723},[720,1067,727],{"class":726},[720,1069,896],{"class":730},[720,1071,1072],{"class":730}," license",[720,1074,1075],{"class":730}," info\n",[720,1077,1078,1080,1083,1085],{"class":722,"line":751},[720,1079,727],{"class":726},[720,1081,1082],{"class":730}," liveencoder",[720,1084,1072],{"class":730},[720,1086,1075],{"class":730},[442,1088,1089],{},"Envía ese único valor a tu representante de Cires21 junto con los slots de producto que cubre tu contrato. Cires21 devuelve un fichero de licencia por\nproducto; instala cada uno con su propia CLI:",[711,1091,1093],{"className":713,"code":1092,"language":715,"meta":716,"style":716},"sudo livecontrol license install \u002Fruta\u002Fa\u002Flicencia-control.txt\nsudo livecontrol restart\nsudo livecontrol license verify\n\nsudo liveencoder license install \u002Fruta\u002Fa\u002Flicencia-encoder.txt\nsudo liveencoder restart\nsudo liveencoder license verify\n",[487,1094,1095,1109,1118,1129,1135,1148,1156],{"__ignoreMap":716},[720,1096,1097,1099,1101,1103,1106],{"class":722,"line":723},[720,1098,727],{"class":726},[720,1100,896],{"class":730},[720,1102,1072],{"class":730},[720,1104,1105],{"class":730}," install",[720,1107,1108],{"class":730}," \u002Fruta\u002Fa\u002Flicencia-control.txt\n",[720,1110,1111,1113,1115],{"class":722,"line":751},[720,1112,727],{"class":726},[720,1114,896],{"class":730},[720,1116,1117],{"class":730}," restart\n",[720,1119,1120,1122,1124,1126],{"class":722,"line":778},[720,1121,727],{"class":726},[720,1123,896],{"class":730},[720,1125,1072],{"class":730},[720,1127,1128],{"class":730}," verify\n",[720,1130,1131],{"class":722,"line":855},[720,1132,1134],{"emptyLinePlaceholder":1133},true,"\n",[720,1136,1137,1139,1141,1143,1145],{"class":722,"line":861},[720,1138,727],{"class":726},[720,1140,1082],{"class":730},[720,1142,1072],{"class":730},[720,1144,1105],{"class":730},[720,1146,1147],{"class":730}," \u002Fruta\u002Fa\u002Flicencia-encoder.txt\n",[720,1149,1150,1152,1154],{"class":722,"line":867},[720,1151,727],{"class":726},[720,1153,1082],{"class":730},[720,1155,1117],{"class":730},[720,1157,1158,1160,1162,1164],{"class":722,"line":873},[720,1159,727],{"class":726},[720,1161,1082],{"class":730},[720,1163,1072],{"class":730},[720,1165,1128],{"class":730},[442,1167,1168,1169,1171],{},"Consulta ",[461,1170,358],{"href":359}," para ver los slots de cada producto.",[680,1173,1175],{"id":1174},"_6-instala-el-certificado-en-los-dos-productos","6. Instala el certificado en los dos productos",[442,1177,1178,1179,1181,1182,466],{},"Los dos productos presentan el mismo certificado: el Encoder a través de su Apache en ",[487,1180,489],{},", Live Control en ",[487,1183,538],{},[711,1185,1187],{"className":713,"code":1186,"language":715,"meta":716,"style":716},"# Live Encoder\nsudo install -m 644 \u003Chost>.crt \u002Fetc\u002Fssl\u002Fcerts\u002Fcert.pem\nsudo install -m 600 \u003Chost>.key \u002Fetc\u002Fssl\u002Fprivate\u002Fprivate-key.pem\nsudo apache2ctl configtest && sudo systemctl reload apache2\n\n# Live Control\nsudo livecontrol ssl import \u003Chost>.crt \u003Chost>.key\n",[487,1188,1189,1194,1225,1250,1274,1278,1283],{"__ignoreMap":716},[720,1190,1191],{"class":722,"line":723},[720,1192,1193],{"class":789},"# Live Encoder\n",[720,1195,1196,1198,1200,1203,1207,1210,1213,1216,1219,1222],{"class":722,"line":751},[720,1197,727],{"class":726},[720,1199,1105],{"class":730},[720,1201,1202],{"class":730}," -m",[720,1204,1206],{"class":1205},"sbssI"," 644",[720,1208,1209],{"class":740}," \u003C",[720,1211,1212],{"class":730},"hos",[720,1214,1215],{"class":747},"t",[720,1217,1218],{"class":740},">",[720,1220,1221],{"class":730},".crt",[720,1223,1224],{"class":730}," \u002Fetc\u002Fssl\u002Fcerts\u002Fcert.pem\n",[720,1226,1227,1229,1231,1233,1236,1238,1240,1242,1244,1247],{"class":722,"line":778},[720,1228,727],{"class":726},[720,1230,1105],{"class":730},[720,1232,1202],{"class":730},[720,1234,1235],{"class":1205}," 600",[720,1237,1209],{"class":740},[720,1239,1212],{"class":730},[720,1241,1215],{"class":747},[720,1243,1218],{"class":740},[720,1245,1246],{"class":730},".key",[720,1248,1249],{"class":730}," \u002Fetc\u002Fssl\u002Fprivate\u002Fprivate-key.pem\n",[720,1251,1252,1254,1257,1260,1263,1266,1268,1271],{"class":722,"line":855},[720,1253,727],{"class":726},[720,1255,1256],{"class":730}," apache2ctl",[720,1258,1259],{"class":730}," configtest",[720,1261,1262],{"class":740}," &&",[720,1264,1265],{"class":726}," sudo",[720,1267,890],{"class":730},[720,1269,1270],{"class":730}," reload",[720,1272,1273],{"class":730}," apache2\n",[720,1275,1276],{"class":722,"line":861},[720,1277,1134],{"emptyLinePlaceholder":1133},[720,1279,1280],{"class":722,"line":867},[720,1281,1282],{"class":789},"# Live Control\n",[720,1284,1285,1287,1289,1292,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313],{"class":722,"line":873},[720,1286,727],{"class":726},[720,1288,896],{"class":730},[720,1290,1291],{"class":730}," ssl",[720,1293,1294],{"class":730}," import",[720,1296,1209],{"class":740},[720,1298,1212],{"class":730},[720,1300,1215],{"class":747},[720,1302,1218],{"class":740},[720,1304,1221],{"class":730},[720,1306,1209],{"class":740},[720,1308,1212],{"class":730},[720,1310,1215],{"class":747},[720,1312,1218],{"class":740},[720,1314,1315],{"class":730},".key\n",[442,1317,1318],{},"Comprueba que Live Control valida el certificado del Encoder. Live Control llega al Encoder por la IP del host, igual que llegaría a un Encoder remoto:",[711,1320,1322],{"className":713,"code":1321,"language":715,"meta":716,"style":716},"sudo docker exec livecontrol curl -s -o \u002Fdev\u002Fnull -w \"%{ssl_verify_result}\\n\" https:\u002F\u002F\u003Cip-del-host>\u002F   # 0\n",[487,1323,1324],{"__ignoreMap":716},[720,1325,1326,1328,1331,1334,1336,1339,1342,1344,1346,1348,1350,1353,1355,1358,1361,1364,1366,1368,1371],{"class":722,"line":723},[720,1327,727],{"class":726},[720,1329,1330],{"class":730}," docker",[720,1332,1333],{"class":730}," exec",[720,1335,896],{"class":730},[720,1337,1338],{"class":730}," curl",[720,1340,1341],{"class":730}," -s",[720,1343,935],{"class":730},[720,1345,938],{"class":730},[720,1347,941],{"class":730},[720,1349,741],{"class":740},[720,1351,1352],{"class":730},"%{ssl_verify_result}\\n",[720,1354,763],{"class":740},[720,1356,1357],{"class":730}," https:\u002F\u002F",[720,1359,1360],{"class":740},"\u003C",[720,1362,1363],{"class":730},"ip-del-hos",[720,1365,1215],{"class":747},[720,1367,1218],{"class":740},[720,1369,1370],{"class":730},"\u002F",[720,1372,1373],{"class":789},"   # 0\n",[442,1375,1376,1377,1380],{},"Cualquier valor distinto de ",[487,1378,1379],{},"0"," indica que la cadena del certificado o la IP del certificado no coinciden, y el registro del Encoder del paso 9 fallará.",[680,1382,1384],{"id":1383},"_7-primer-acceso-y-rotación-de-la-contraseña-de-admin","7. Primer acceso y rotación de la contraseña de admin",[442,1386,1387,1388,1390,1391,1393,1394,466],{},"Abre ",[487,1389,988],{}," y entra como ",[487,1392,800],{}," con la contraseña inicial que imprimió el instalador. La UI te pide rotar la contraseña antes de\ncualquier otra operación. Mientras no se rote, la API REST y el servidor MCP rechazan todas las peticiones hechas con la cuenta ",[487,1395,800],{},[442,1397,1398,1401],{},[487,1399,1400],{},"livecontrol security password reset"," no sustituye este paso: fija una contraseña nueva, pero deja la cuenta pendiente de rotación.",[468,1403,1404,1407,1408,1410,1411,1413,1414,1417,1418,1421,1422,466],{"icon":394},[446,1405,1406],{},"Servidor MCP incluido."," El servidor MCP que se instala con Live Control se autentica con la cuenta ",[487,1409,800],{},", usando la contraseña guardada en el\ndirectorio de instalación (",[487,1412,811],{}," por defecto). Tras la rotación, sustituye la contraseña de admin por la nueva en los ficheros ",[487,1415,1416],{},".env"," y\n",[487,1419,1420],{},".credentials"," de ese directorio, y recrea el servicio MCP con ",[487,1423,1424],{},"cd \u002Fopt\u002Flivecontrol && sudo docker compose up -d livecontrol-mcp",[680,1426,1428],{"id":1427},"_8-configura-el-firewall","8. Configura el firewall",[442,1430,1431],{},"Los dos productos necesitan dos juegos de reglas distintos, porque sus puertos llegan al host por caminos distintos:",[492,1433,1434,1447],{},[495,1435,1436],{},[498,1437,1438,1441,1444],{},[501,1439,1440],{},"Producto",[501,1442,1443],{},"Cómo se exponen sus puertos",[501,1445,1446],{},"Dónde filtrar",[514,1448,1449,1478],{},[498,1450,1451,1455,1468],{},[519,1452,1453],{},[446,1454,509],{},[519,1456,1457,1458,1461,1462,1461,1464,1467],{},"Directamente en el host: ",[487,1459,1460],{},"80",", ",[487,1463,489],{},[487,1465,1466],{},"8484"," y los puertos de ingesta de tus Channels (SRT, RTMP, UDP…).",[519,1469,1470,1471,1473,1474,1477],{},"El firewall del host (",[487,1472,692],{}," o la cadena ",[487,1475,1476],{},"INPUT","), como siempre.",[498,1479,1480,1484,1495],{},[519,1481,1482],{},[446,1483,506],{},[519,1485,1486,1487,1461,1489,1461,1492,466],{},"Publicados por Docker: ",[487,1488,538],{},[487,1490,1491],{},"9080",[487,1493,1494],{},"3100",[519,1496,1497,1498,1501,1502,1504,1505,1507],{},"La cadena ",[487,1499,1500],{},"DOCKER-USER",". Los puertos que publica Docker no pasan por la cadena ",[487,1503,1476],{},", así que las reglas de ",[487,1506,692],{}," no se les aplican.",[442,1509,1510,1511,1513],{},"Sin reglas en ",[487,1512,1500],{},", los puertos del Control — servidor MCP incluido — quedan abiertos a cualquier dirección que llegue al host.",[442,1515,1516,1519,1520,1522,1523,1522,1525,1527,1528,1530],{},[446,1517,1518],{},"Encoder."," Mantén la política de tu despliegue: permite los puertos de ingesta que usan tus fuentes y restringe ",[487,1521,1460],{}," \u002F ",[487,1524,489],{},[487,1526,1466],{}," a los clientes\nque recogen la salida del Encoder y a cualquier otro Live Control que gobierne este Encoder. Si restringes el ",[487,1529,489],{},", repite después la comprobación del\ncertificado del paso 6 para confirmar que el Live Control local sigue llegando al Encoder.",[442,1532,1533],{},"Con una política que deniega por defecto, permite también el tráfico multicast propio del Encoder. El Encoder se lo envía a sí mismo y llega por la\ninterfaz WAN con la IP del host como origen; si el firewall lo descarta, los Live streams en marcha se paran:",[711,1535,1537],{"className":713,"code":1536,"language":715,"meta":716,"style":716},"sudo ufw allow in on \u003Cinterfaz-wan> from \u003Cip-del-host> to 224.0.0.0\u002F4 proto udp comment 'Encoder internal multicast'\n",[487,1538,1539],{"__ignoreMap":716},[720,1540,1541,1543,1546,1549,1552,1555,1557,1560,1563,1565,1568,1570,1572,1574,1576,1579,1582,1585,1588,1591,1593,1596],{"class":722,"line":723},[720,1542,727],{"class":726},[720,1544,1545],{"class":730}," ufw",[720,1547,1548],{"class":730}," allow",[720,1550,1551],{"class":730}," in",[720,1553,1554],{"class":730}," on",[720,1556,1209],{"class":740},[720,1558,1559],{"class":730},"interfaz-wa",[720,1561,1562],{"class":747},"n",[720,1564,1218],{"class":740},[720,1566,1567],{"class":730}," from",[720,1569,1209],{"class":740},[720,1571,1363],{"class":730},[720,1573,1215],{"class":747},[720,1575,1218],{"class":740},[720,1577,1578],{"class":730}," to",[720,1580,1581],{"class":730}," 224.0.0.0\u002F4",[720,1583,1584],{"class":730}," proto",[720,1586,1587],{"class":730}," udp",[720,1589,1590],{"class":730}," comment",[720,1592,973],{"class":740},[720,1594,1595],{"class":730},"Encoder internal multicast",[720,1597,1598],{"class":740},"'\n",[442,1600,1601,1602,1604,1605,1607,1608,1610],{},"El Live Control local se ejecuta en un contenedor, así que sus peticiones llegan al Encoder desde la red Docker de Live Control, no desde la IP del host.\nPermite esa subred en el ",[487,1603,489],{}," — Live Control no usa el ",[487,1606,1460],{}," ni el ",[487,1609,1466],{}," del Encoder:",[711,1612,1614],{"className":713,"code":1613,"language":715,"meta":716,"style":716},"sudo docker network inspect livecontrol_network -f '{{(index .IPAM.Config 0).Subnet}}'   # Por ejemplo 172.18.0.0\u002F16\nsudo ufw allow from \u003Csubred-docker-control> to any port 443 proto tcp comment 'Encoder HTTPS desde el Control local'\n",[487,1615,1616,1643],{"__ignoreMap":716},[720,1617,1618,1620,1622,1625,1628,1631,1633,1635,1638,1640],{"class":722,"line":723},[720,1619,727],{"class":726},[720,1621,1330],{"class":730},[720,1623,1624],{"class":730}," network",[720,1626,1627],{"class":730}," inspect",[720,1629,1630],{"class":730}," livecontrol_network",[720,1632,784],{"class":730},[720,1634,973],{"class":740},[720,1636,1637],{"class":730},"{{(index .IPAM.Config 0).Subnet}}",[720,1639,979],{"class":740},[720,1641,1642],{"class":789},"   # Por ejemplo 172.18.0.0\u002F16\n",[720,1644,1645,1647,1649,1651,1653,1655,1658,1661,1663,1665,1668,1671,1674,1676,1679,1681,1683,1686],{"class":722,"line":751},[720,1646,727],{"class":726},[720,1648,1545],{"class":730},[720,1650,1548],{"class":730},[720,1652,1567],{"class":730},[720,1654,1209],{"class":740},[720,1656,1657],{"class":730},"subred-docker-contro",[720,1659,1660],{"class":747},"l",[720,1662,1218],{"class":740},[720,1664,1578],{"class":730},[720,1666,1667],{"class":730}," any",[720,1669,1670],{"class":730}," port",[720,1672,1673],{"class":1205}," 443",[720,1675,1584],{"class":730},[720,1677,1678],{"class":730}," tcp",[720,1680,1590],{"class":730},[720,1682,973],{"class":740},[720,1684,1685],{"class":730},"Encoder HTTPS desde el Control local",[720,1687,1598],{"class":740},[442,1689,1690,1693],{},[446,1691,1692],{},"Control."," El script siguiente permite los orígenes indicados y descarta todo lo demás que entra por la interfaz WAN. Las respuestas a conexiones\niniciadas desde el host y el tráfico entre contenedores no se ven afectados.",[711,1695,1697],{"className":713,"code":1696,"language":715,"meta":716,"style":716},"#!\u002Fusr\u002Fbin\u002Fenv bash\n# \u002Fusr\u002Flocal\u002Fsbin\u002Fc21-docker-user-fw.sh\nset -euo pipefail\nWAN_IF=\"\u003Cinterfaz-wan>\"                          # Por ejemplo eth0\nALLOW_SRC=\"\u003Cip-oficina>\u002F32 \u003Csubred-vpn>\"         # Orígenes con acceso a 9443, 9080 y 3100\n\nfor ipt in iptables ip6tables; do                # Docker también publica en IPv6\n  $ipt -N DOCKER-USER 2>\u002Fdev\u002Fnull || true\n  $ipt -F DOCKER-USER\n  $ipt -A DOCKER-USER -i \"$WAN_IF\" -m conntrack --ctstate RELATED,ESTABLISHED -j RETURN\ndone\nfor src in $ALLOW_SRC; do\n  case \"$src\" in *:*) ipt=ip6tables ;; *) ipt=iptables ;; esac\n  $ipt -A DOCKER-USER -i \"$WAN_IF\" -s \"$src\" -j RETURN\ndone\nfor ipt in iptables ip6tables; do\n  $ipt -A DOCKER-USER -i \"$WAN_IF\" -j DROP\n  $ipt -A DOCKER-USER -j RETURN\ndone\n",[487,1698,1699,1704,1709,1721,1739,1756,1760,1787,1809,1819,1856,1862,1880,1933,1962,1967,1984,2006,2019],{"__ignoreMap":716},[720,1700,1701],{"class":722,"line":723},[720,1702,1703],{"class":789},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[720,1705,1706],{"class":722,"line":751},[720,1707,1708],{"class":789},"# \u002Fusr\u002Flocal\u002Fsbin\u002Fc21-docker-user-fw.sh\n",[720,1710,1711,1715,1718],{"class":722,"line":778},[720,1712,1714],{"class":1713},"s2Zo4","set",[720,1716,1717],{"class":730}," -euo",[720,1719,1720],{"class":730}," pipefail\n",[720,1722,1723,1726,1729,1731,1734,1736],{"class":722,"line":855},[720,1724,1725],{"class":747},"WAN_IF",[720,1727,1728],{"class":740},"=",[720,1730,763],{"class":740},[720,1732,1733],{"class":730},"\u003Cinterfaz-wan>",[720,1735,763],{"class":740},[720,1737,1738],{"class":789},"                          # Por ejemplo eth0\n",[720,1740,1741,1744,1746,1748,1751,1753],{"class":722,"line":861},[720,1742,1743],{"class":747},"ALLOW_SRC",[720,1745,1728],{"class":740},[720,1747,763],{"class":740},[720,1749,1750],{"class":730},"\u003Cip-oficina>\u002F32 \u003Csubred-vpn>",[720,1752,763],{"class":740},[720,1754,1755],{"class":789},"         # Orígenes con acceso a 9443, 9080 y 3100\n",[720,1757,1758],{"class":722,"line":867},[720,1759,1134],{"emptyLinePlaceholder":1133},[720,1761,1762,1766,1769,1772,1775,1778,1781,1784],{"class":722,"line":873},[720,1763,1765],{"class":1764},"s7zQu","for",[720,1767,1768],{"class":747}," ipt ",[720,1770,1771],{"class":1764},"in",[720,1773,1774],{"class":730}," iptables",[720,1776,1777],{"class":730}," ip6tables",[720,1779,1780],{"class":740},";",[720,1782,1783],{"class":1764}," do",[720,1785,1786],{"class":789},"                # Docker también publica en IPv6\n",[720,1788,1789,1792,1795,1798,1801,1803,1806],{"class":722,"line":879},[720,1790,1791],{"class":747},"  $ipt ",[720,1793,1794],{"class":730},"-N",[720,1796,1797],{"class":730}," DOCKER-USER",[720,1799,1800],{"class":740}," 2>",[720,1802,836],{"class":730},[720,1804,1805],{"class":740}," ||",[720,1807,1808],{"class":1713}," true\n",[720,1810,1811,1813,1816],{"class":722,"line":885},[720,1812,1791],{"class":747},[720,1814,1815],{"class":730},"-F",[720,1817,1818],{"class":730}," DOCKER-USER\n",[720,1820,1822,1824,1827,1829,1832,1834,1837,1839,1841,1844,1847,1850,1853],{"class":722,"line":1821},10,[720,1823,1791],{"class":747},[720,1825,1826],{"class":730},"-A",[720,1828,1797],{"class":730},[720,1830,1831],{"class":730}," -i",[720,1833,741],{"class":740},[720,1835,1836],{"class":747},"$WAN_IF",[720,1838,763],{"class":740},[720,1840,1202],{"class":730},[720,1842,1843],{"class":730}," conntrack",[720,1845,1846],{"class":730}," --ctstate",[720,1848,1849],{"class":730}," RELATED,ESTABLISHED",[720,1851,1852],{"class":730}," -j",[720,1854,1855],{"class":730}," RETURN\n",[720,1857,1859],{"class":722,"line":1858},11,[720,1860,1861],{"class":1764},"done\n",[720,1863,1865,1867,1870,1872,1875,1877],{"class":722,"line":1864},12,[720,1866,1765],{"class":1764},[720,1868,1869],{"class":747}," src ",[720,1871,1771],{"class":1764},[720,1873,1874],{"class":747}," $ALLOW_SRC",[720,1876,1780],{"class":740},[720,1878,1879],{"class":1764}," do\n",[720,1881,1883,1886,1888,1891,1893,1895,1898,1901,1904,1907,1910,1912,1915,1918,1921,1923,1925,1928,1930],{"class":722,"line":1882},13,[720,1884,1885],{"class":1764},"  case",[720,1887,741],{"class":740},[720,1889,1890],{"class":747},"$src",[720,1892,763],{"class":740},[720,1894,1551],{"class":1764},[720,1896,1897],{"class":740}," *",[720,1899,1900],{"class":730},":",[720,1902,1903],{"class":740},"*",[720,1905,1906],{"class":740},")",[720,1908,1909],{"class":747}," ipt",[720,1911,1728],{"class":740},[720,1913,1914],{"class":730},"ip6tables",[720,1916,1917],{"class":740}," ;;",[720,1919,1920],{"class":740}," *)",[720,1922,1909],{"class":747},[720,1924,1728],{"class":740},[720,1926,1927],{"class":730},"iptables",[720,1929,1917],{"class":740},[720,1931,1932],{"class":1764}," esac\n",[720,1934,1936,1938,1940,1942,1944,1946,1948,1950,1952,1954,1956,1958,1960],{"class":722,"line":1935},14,[720,1937,1791],{"class":747},[720,1939,1826],{"class":730},[720,1941,1797],{"class":730},[720,1943,1831],{"class":730},[720,1945,741],{"class":740},[720,1947,1836],{"class":747},[720,1949,763],{"class":740},[720,1951,1341],{"class":730},[720,1953,741],{"class":740},[720,1955,1890],{"class":747},[720,1957,763],{"class":740},[720,1959,1852],{"class":730},[720,1961,1855],{"class":730},[720,1963,1965],{"class":722,"line":1964},15,[720,1966,1861],{"class":1764},[720,1968,1970,1972,1974,1976,1978,1980,1982],{"class":722,"line":1969},16,[720,1971,1765],{"class":1764},[720,1973,1768],{"class":747},[720,1975,1771],{"class":1764},[720,1977,1774],{"class":730},[720,1979,1777],{"class":730},[720,1981,1780],{"class":740},[720,1983,1879],{"class":1764},[720,1985,1987,1989,1991,1993,1995,1997,1999,2001,2003],{"class":722,"line":1986},17,[720,1988,1791],{"class":747},[720,1990,1826],{"class":730},[720,1992,1797],{"class":730},[720,1994,1831],{"class":730},[720,1996,741],{"class":740},[720,1998,1836],{"class":747},[720,2000,763],{"class":740},[720,2002,1852],{"class":730},[720,2004,2005],{"class":730}," DROP\n",[720,2007,2009,2011,2013,2015,2017],{"class":722,"line":2008},18,[720,2010,1791],{"class":747},[720,2012,1826],{"class":730},[720,2014,1797],{"class":730},[720,2016,1852],{"class":730},[720,2018,1855],{"class":730},[720,2020,2022],{"class":722,"line":2021},19,[720,2023,1861],{"class":1764},[442,2025,2026,2027,2029],{},"Las reglas de ",[487,2028,1927],{}," solo viven en memoria y se pierden al reiniciar el host, así que aplica el script desde una unit de systemd ligada a Docker:\nse ejecuta cada vez que arranca Docker, también tras un reinicio y tras una actualización de Live Control.",[711,2031,2035],{"className":2032,"code":2033,"language":2034,"meta":716,"style":716},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fc21-docker-user-fw.service\n[Unit]\nDescription=DOCKER-USER rules for C21 Live Control\nAfter=docker.service\nPartOf=docker.service\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\nExecStart=\u002Fusr\u002Flocal\u002Fsbin\u002Fc21-docker-user-fw.sh\n\n[Install]\nWantedBy=docker.service\n","ini",[487,2036,2037,2042,2047,2052,2057,2062,2066,2071,2076,2081,2086,2090,2095],{"__ignoreMap":716},[720,2038,2039],{"class":722,"line":723},[720,2040,2041],{},"# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fc21-docker-user-fw.service\n",[720,2043,2044],{"class":722,"line":751},[720,2045,2046],{},"[Unit]\n",[720,2048,2049],{"class":722,"line":778},[720,2050,2051],{},"Description=DOCKER-USER rules for C21 Live Control\n",[720,2053,2054],{"class":722,"line":855},[720,2055,2056],{},"After=docker.service\n",[720,2058,2059],{"class":722,"line":861},[720,2060,2061],{},"PartOf=docker.service\n",[720,2063,2064],{"class":722,"line":867},[720,2065,1134],{"emptyLinePlaceholder":1133},[720,2067,2068],{"class":722,"line":873},[720,2069,2070],{},"[Service]\n",[720,2072,2073],{"class":722,"line":879},[720,2074,2075],{},"Type=oneshot\n",[720,2077,2078],{"class":722,"line":885},[720,2079,2080],{},"RemainAfterExit=yes\n",[720,2082,2083],{"class":722,"line":1821},[720,2084,2085],{},"ExecStart=\u002Fusr\u002Flocal\u002Fsbin\u002Fc21-docker-user-fw.sh\n",[720,2087,2088],{"class":722,"line":1858},[720,2089,1134],{"emptyLinePlaceholder":1133},[720,2091,2092],{"class":722,"line":1864},[720,2093,2094],{},"[Install]\n",[720,2096,2097],{"class":722,"line":1882},[720,2098,2099],{},"WantedBy=docker.service\n",[711,2101,2103],{"className":713,"code":2102,"language":715,"meta":716,"style":716},"sudo chmod 755 \u002Fusr\u002Flocal\u002Fsbin\u002Fc21-docker-user-fw.sh\nsudo systemctl daemon-reload\nsudo systemctl enable --now c21-docker-user-fw.service\nsudo iptables -S DOCKER-USER\n",[487,2104,2105,2118,2127,2142],{"__ignoreMap":716},[720,2106,2107,2109,2112,2115],{"class":722,"line":723},[720,2108,727],{"class":726},[720,2110,2111],{"class":730}," chmod",[720,2113,2114],{"class":1205}," 755",[720,2116,2117],{"class":730}," \u002Fusr\u002Flocal\u002Fsbin\u002Fc21-docker-user-fw.sh\n",[720,2119,2120,2122,2124],{"class":722,"line":751},[720,2121,727],{"class":726},[720,2123,890],{"class":730},[720,2125,2126],{"class":730}," daemon-reload\n",[720,2128,2129,2131,2133,2136,2139],{"class":722,"line":778},[720,2130,727],{"class":726},[720,2132,890],{"class":730},[720,2134,2135],{"class":730}," enable",[720,2137,2138],{"class":730}," --now",[720,2140,2141],{"class":730}," c21-docker-user-fw.service\n",[720,2143,2144,2146,2148,2151],{"class":722,"line":855},[720,2145,727],{"class":726},[720,2147,1774],{"class":730},[720,2149,2150],{"class":730}," -S",[720,2152,1818],{"class":730},[442,2154,2155,2156,1461,2158,2160,2161,2163],{},"Desde una dirección fuera de la lista permitida, los puertos ",[487,2157,538],{},[487,2159,1491],{}," y ",[487,2162,1494],{}," deben aparecer cerrados.",[680,2165,2167],{"id":2166},"_9-registra-el-encoder-en-live-control","9. Registra el Encoder en Live Control",[442,2169,2170,2171,2174,2175,2177],{},"En la UI de Live Control abre ",[446,2172,2173],{},"Devices → Add device"," y registra el Encoder de este host como registrarías cualquier otro — consulta\n",[461,2176,348],{"href":349},", paso 4:",[601,2179,2180,2188],{},[604,2181,2182,2185,2186,466],{},[446,2183,2184],{},"Server IP"," — la IP del host, la misma para la que se emitió el certificado. Sin puerto: Live Control llega al Encoder en el ",[487,2187,489],{},[604,2189,2190,1522,2193,2196,2197,2199,2200,1522,2203,2206],{},[446,2191,2192],{},"Register username",[446,2194,2195],{},"Register password"," — las credenciales ",[487,2198,800],{}," del Encoder (",[487,2201,2202],{},"sudo liveencoder credentials show",[487,2204,2205],{},"credentials reset",").",[442,2208,2209,2210,2213],{},"La fila del Device debe mostrar ",[487,2211,2212],{},"registration_status: registered",". Los demás Encoders, en otros hosts, se registran de la misma forma.",[680,2215,2217],{"id":2216},"_10-verifica","10. Verifica",[711,2219,2221],{"className":713,"code":2220,"language":715,"meta":716,"style":716},"curl -sk -o \u002Fdev\u002Fnull -w \"%{http_code}\\n\" https:\u002F\u002F127.0.0.1:9443\u002F   # UI de Live Control: 200\nsudo livecontrol status                                             # Servicios de Live Control sanos\nsudo liveencoder status                                             # Servicio del Encoder en marcha\nsudo iptables -S DOCKER-USER                                        # Firewall del Control aplicado\n",[487,2222,2223,2246,2258,2269],{"__ignoreMap":716},[720,2224,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243],{"class":722,"line":723},[720,2226,929],{"class":726},[720,2228,932],{"class":730},[720,2230,935],{"class":730},[720,2232,938],{"class":730},[720,2234,941],{"class":730},[720,2236,741],{"class":740},[720,2238,946],{"class":730},[720,2240,763],{"class":740},[720,2242,951],{"class":730},[720,2244,2245],{"class":789},"   # UI de Live Control: 200\n",[720,2247,2248,2250,2252,2255],{"class":722,"line":751},[720,2249,727],{"class":726},[720,2251,896],{"class":730},[720,2253,2254],{"class":730}," status",[720,2256,2257],{"class":789},"                                             # Servicios de Live Control sanos\n",[720,2259,2260,2262,2264,2266],{"class":722,"line":778},[720,2261,727],{"class":726},[720,2263,1082],{"class":730},[720,2265,2254],{"class":730},[720,2267,2268],{"class":789},"                                             # Servicio del Encoder en marcha\n",[720,2270,2271,2273,2275,2277,2279],{"class":722,"line":855},[720,2272,727],{"class":726},[720,2274,1774],{"class":730},[720,2276,2150],{"class":730},[720,2278,1797],{"class":730},[720,2280,2281],{"class":789},"                                        # Firewall del Control aplicado\n",[442,2283,2284,2285,466],{},"Después lanza un Live stream de prueba en el Encoder local y comprueba que su salida se sirve desde ",[487,2286,2287],{},"https:\u002F\u002F\u003Chost>\u002F",[437,2289,478],{"id":2290},"actualizaciones-en-un-host-compartido",[442,2292,2293],{},"Actualiza los dos productos en la misma ventana de mantenimiento, con la operación parada:",[492,2295,2296,2306],{},[495,2297,2298],{},[498,2299,2300,2303],{},[501,2301,2302],{},"Actualización",[501,2304,2305],{},"Efecto en el host compartido",[514,2307,2308,2320],{},[498,2309,2310,2314],{},[519,2311,2312],{},[446,2313,506],{},[519,2315,2316,2317,2319],{},"La actualización reconfigura y reinicia el servicio Docker. El servicio del Encoder depende de Docker, así que se para y arranca con él: los Live streams locales se cortan entre uno y dos minutos y se recuperan solos. El override de puertos y las reglas de ",[487,2318,1500],{}," se mantienen.",[498,2321,2322,2326],{},[519,2323,2324],{},[446,2325,509],{},[519,2327,2328],{},"Live Control no se ve afectado. Las sesiones SSH pueden cortarse mientras se actualiza el servidor SSH.",[442,2330,2331,2332,2335],{},"Sigue el orden recomendado en ",[461,2333,353],{"href":2334},"\u002Fes\u002Finstallation\u002Fupdates#compatibilidad"," — primero el Encoder, después Live Control — y tras actualizar\nLive Control comprueba:",[711,2337,2339],{"className":713,"code":2338,"language":715,"meta":716,"style":716},"curl -sk -o \u002Fdev\u002Fnull -w \"%{http_code}\\n\" https:\u002F\u002F127.0.0.1:9443\u002F   # Live Control sigue en 9443\nsudo liveencoder status                                             # Encoder de vuelta\nsudo iptables -S DOCKER-USER                                        # Reglas de firewall en su sitio\n",[487,2340,2341,2364,2375],{"__ignoreMap":716},[720,2342,2343,2345,2347,2349,2351,2353,2355,2357,2359,2361],{"class":722,"line":723},[720,2344,929],{"class":726},[720,2346,932],{"class":730},[720,2348,935],{"class":730},[720,2350,938],{"class":730},[720,2352,941],{"class":730},[720,2354,741],{"class":740},[720,2356,946],{"class":730},[720,2358,763],{"class":740},[720,2360,951],{"class":730},[720,2362,2363],{"class":789},"   # Live Control sigue en 9443\n",[720,2365,2366,2368,2370,2372],{"class":722,"line":751},[720,2367,727],{"class":726},[720,2369,1082],{"class":730},[720,2371,2254],{"class":730},[720,2373,2374],{"class":789},"                                             # Encoder de vuelta\n",[720,2376,2377,2379,2381,2383,2385],{"class":722,"line":778},[720,2378,727],{"class":726},[720,2380,1774],{"class":730},[720,2382,2150],{"class":730},[720,2384,1797],{"class":730},[720,2386,2387],{"class":789},"                                        # Reglas de firewall en su sitio\n",[437,2389,2391],{"id":2390},"enlaces-relacionados","Enlaces relacionados",[601,2393,2394,2399,2404,2409,2414,2419],{},[604,2395,2396,2398],{},[461,2397,338],{"href":339}," — DNS, NTP, swap y política de actualizaciones del SO.",[604,2400,2401,2403],{},[461,2402,343],{"href":344}," — flags del instalador, CLI, backups, SSL.",[604,2405,2406,2408],{},[461,2407,348],{"href":349}," — flags del instalador, drivers de hardware, CLI.",[604,2410,2411,2413],{},[461,2412,353],{"href":354}," — flujo de actualización, rollback y compatibilidad de versiones.",[604,2415,2416,2418],{},[461,2417,358],{"href":359}," — catálogo de licencias y formato del fichero.",[604,2420,2421,2423],{},[461,2422,89],{"href":94}," — la sección donde aparecen los Encoders registrados.",[2425,2426,2427],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":716,"searchDepth":751,"depth":751,"links":2429},[2430,2431,2432,2433,2445,2446],{"id":439,"depth":751,"text":440},{"id":481,"depth":751,"text":482},{"id":625,"depth":751,"text":626},{"id":674,"depth":751,"text":675,"children":2434},[2435,2436,2437,2438,2439,2440,2441,2442,2443,2444],{"id":682,"depth":778,"text":683},{"id":696,"depth":778,"text":697},{"id":804,"depth":778,"text":805},{"id":991,"depth":778,"text":992},{"id":1054,"depth":778,"text":1055},{"id":1174,"depth":778,"text":1175},{"id":1383,"depth":778,"text":1384},{"id":1427,"depth":778,"text":1428},{"id":2166,"depth":778,"text":2167},{"id":2216,"depth":778,"text":2217},{"id":2290,"depth":751,"text":478},{"id":2390,"depth":751,"text":2391},"Ejecuta C21 Live Control y C21 Live Encoder en un único host — reparto de puertos, orden de instalación, paso del Control al puerto 9443, licencias, certificado, firewall e impacto de las actualizaciones.","md",null,{},{"icon":96},{"title":362,"description":2447},"8cfzP_UpyjXRIVy3-9OCEpnHtv11a851f4KIPW3sdhs",[2455,2457],{"title":358,"path":359,"stem":360,"description":2456,"icon":215,"children":-1},"Las licencias de producto que controlan C21 Live Control y C21 Live Encoder, cómo se instalan, dónde se administran y qué ocurre cuando una falta o expira.",{"title":41,"path":371,"stem":372,"description":2458,"icon":373,"children":-1},"Programa contra C21 Live Control — la REST API en \u002Fc21apiv2 y el servidor MCP, ambos tras un único bearer token.",1790334279398]