[{"data":1,"prerenderedAt":1320},["ShallowReactive",2],{"navigation_docs_en":3,"-en-installation-licenses":408,"-en-installation-licenses-surround":1315},[4,25,74,124,238,253,313,342,388],{"title":5,"path":6,"stem":7,"children":8,"page":24},"Getting Started","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[9,14,19],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Quickstart","\u002Fen\u002Fgetting-started\u002Fquickstart","en\u002F1.getting-started\u002F2.quickstart","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Concepts","\u002Fen\u002Fgetting-started\u002Fconcepts","en\u002F1.getting-started\u002F3.concepts","i-lucide-book-open",false,{"title":26,"path":27,"stem":28,"children":29,"page":24},"Live Production","\u002Fen\u002Flive-production","en\u002F2.live-production",[30,35,55,60],{"title":31,"path":32,"stem":33,"icon":34},"On air","\u002Fen\u002Flive-production\u002Fon-air","en\u002F2.live-production\u002F1.on-air","i-lucide-radio",{"title":36,"path":37,"stem":38,"children":39,"page":24},"Live Streams","\u002Fen\u002Flive-production\u002Flive-streams","en\u002F2.live-production\u002F2.live-streams",[40,45,50],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Fen\u002Flive-production\u002Flive-streams\u002Foverview","en\u002F2.live-production\u002F2.live-streams\u002F1.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Options","\u002Fen\u002Flive-production\u002Flive-streams\u002Flive-stream-options","en\u002F2.live-production\u002F2.live-streams\u002F2.live-stream-options","i-lucide-file-text",{"title":51,"path":52,"stem":53,"icon":54},"Start and stop","\u002Fen\u002Flive-production\u002Flive-streams\u002Fstart-stop","en\u002F2.live-production\u002F2.live-streams\u002F3.start-stop","i-lucide-play-circle",{"title":56,"path":57,"stem":58,"icon":59},"Scheduler","\u002Fen\u002Flive-production\u002Fscheduler","en\u002F2.live-production\u002F3.scheduler","i-lucide-calendar-clock",{"title":61,"path":62,"stem":63,"children":64,"page":24},"Recordings","\u002Fen\u002Flive-production\u002Frecordings","en\u002F2.live-production\u002F4.recordings",[65,69],{"title":41,"path":66,"stem":67,"icon":68},"\u002Fen\u002Flive-production\u002Frecordings\u002Foverview","en\u002F2.live-production\u002F4.recordings\u002F1.overview","i-lucide-circle-dot",{"title":70,"path":71,"stem":72,"icon":73},"Editor","\u002Fen\u002Flive-production\u002Frecordings\u002Feditor","en\u002F2.live-production\u002F4.recordings\u002F2.editor","i-lucide-scissors",{"title":75,"path":76,"stem":77,"children":78,"page":24},"Configuration","\u002Fen\u002Fconfiguration","en\u002F3.configuration",[79,93,98,111],{"title":80,"path":81,"stem":82,"children":83,"page":24},"Devices","\u002Fen\u002Fconfiguration\u002Fdevices","en\u002F3.configuration\u002F1.devices",[84,88],{"title":80,"path":85,"stem":86,"icon":87},"\u002Fen\u002Fconfiguration\u002Fdevices\u002Fdevices","en\u002F3.configuration\u002F1.devices\u002F1.devices","i-lucide-server",{"title":89,"path":90,"stem":91,"icon":92},"Groups","\u002Fen\u002Fconfiguration\u002Fdevices\u002Fgroups","en\u002F3.configuration\u002F1.devices\u002F2.groups","i-lucide-network",{"title":94,"path":95,"stem":96,"icon":97},"Sources","\u002Fen\u002Fconfiguration\u002Fsources","en\u002F3.configuration\u002F2.sources","i-lucide-cable",{"title":99,"path":100,"stem":101,"children":102,"page":24},"Encodings","\u002Fen\u002Fconfiguration\u002Fencodings","en\u002F3.configuration\u002F3.encodings",[103,107],{"title":99,"path":104,"stem":105,"icon":106},"\u002Fen\u002Fconfiguration\u002Fencodings\u002Fprofiles","en\u002F3.configuration\u002F3.encodings\u002F1.profiles","i-lucide-sliders-horizontal",{"title":89,"path":108,"stem":109,"icon":110},"\u002Fen\u002Fconfiguration\u002Fencodings\u002Fgroups","en\u002F3.configuration\u002F3.encodings\u002F2.groups","i-lucide-layers",{"title":112,"path":113,"stem":114,"children":115,"page":24},"Destinations","\u002Fen\u002Fconfiguration\u002Fdestinations","en\u002F3.configuration\u002F4.destinations",[116,120],{"title":112,"path":117,"stem":118,"icon":119},"\u002Fen\u002Fconfiguration\u002Fdestinations\u002Fdestinations","en\u002F3.configuration\u002F4.destinations\u002F1.destinations","i-lucide-send",{"title":89,"path":121,"stem":122,"icon":123},"\u002Fen\u002Fconfiguration\u002Fdestinations\u002Fpublishing-groups","en\u002F3.configuration\u002F4.destinations\u002F2.publishing-groups","i-lucide-share-2",{"title":125,"path":126,"stem":127,"children":128,"page":24},"Settings","\u002Fen\u002Fsettings","en\u002F4.settings",[129,142,147,163,179],{"title":130,"path":131,"stem":132,"children":133,"page":24},"Users","\u002Fen\u002Fsettings\u002Fusers","en\u002F4.settings\u002F1.users",[134,138],{"title":130,"path":135,"stem":136,"icon":137},"\u002Fen\u002Fsettings\u002Fusers\u002Fusers","en\u002F4.settings\u002F1.users\u002F1.users","i-lucide-user",{"title":89,"path":139,"stem":140,"icon":141},"\u002Fen\u002Fsettings\u002Fusers\u002Fuser-groups","en\u002F4.settings\u002F1.users\u002F2.user-groups","i-lucide-users",{"title":143,"path":144,"stem":145,"icon":146},"Security","\u002Fen\u002Fsettings\u002Fsecurity","en\u002F4.settings\u002F2.security","i-lucide-shield",{"title":148,"icon":149,"path":150,"stem":151,"children":152,"page":24},"Assets","i-lucide-image","\u002Fen\u002Fsettings\u002Fassets","en\u002F4.settings\u002F3.assets",[153,158],{"title":154,"path":155,"stem":156,"icon":157},"Logos","\u002Fen\u002Fsettings\u002Fassets\u002Flogos","en\u002F4.settings\u002F3.assets\u002F1.logos","i-lucide-images",{"title":159,"path":160,"stem":161,"icon":162},"Files","\u002Fen\u002Fsettings\u002Fassets\u002Ffiles","en\u002F4.settings\u002F3.assets\u002F2.files","i-lucide-clapperboard",{"title":164,"icon":165,"path":166,"stem":167,"children":168,"page":24},"External Storage","i-lucide-folder-cog","\u002Fen\u002Fsettings\u002Fexternal-storage","en\u002F4.settings\u002F4.external-storage",[169,174],{"title":170,"path":171,"stem":172,"icon":173},"Remote Folders","\u002Fen\u002Fsettings\u002Fexternal-storage\u002Fremote-folders","en\u002F4.settings\u002F4.external-storage\u002F1.remote-folders","i-lucide-folder-archive",{"title":175,"path":176,"stem":177,"icon":178},"Target Folders","\u002Fen\u002Fsettings\u002Fexternal-storage\u002Ftarget-folders","en\u002F4.settings\u002F4.external-storage\u002F2.target-folders","i-lucide-folder-up",{"title":180,"path":181,"stem":182,"children":183,"page":24},"Integrations","\u002Fen\u002Fsettings\u002Fintegrations","en\u002F4.settings\u002F5.integrations",[184,188,193,207],{"title":41,"path":185,"stem":186,"icon":187},"\u002Fen\u002Fsettings\u002Fintegrations\u002Foverview","en\u002F4.settings\u002F5.integrations\u002F1.overview","i-lucide-plug",{"title":189,"path":190,"stem":191,"icon":192},"MediaCopilot","\u002Fen\u002Fsettings\u002Fintegrations\u002Fmediacopilot","en\u002F4.settings\u002F5.integrations\u002F2.mediacopilot","i-lucide-sparkles",{"title":194,"icon":195,"path":196,"stem":197,"children":198,"page":24},"C21 Live Cloud","i-lucide-cloud","\u002Fen\u002Fsettings\u002Fintegrations\u002Fc21livecloud","en\u002F4.settings\u002F5.integrations\u002F3.c21livecloud",[199,202],{"title":41,"path":200,"stem":201,"icon":195},"\u002Fen\u002Fsettings\u002Fintegrations\u002Fc21livecloud\u002Foverview","en\u002F4.settings\u002F5.integrations\u002F3.c21livecloud\u002F1.overview",{"title":203,"path":204,"stem":205,"icon":206},"Accounts","\u002Fen\u002Fsettings\u002Fintegrations\u002Fc21livecloud\u002Faccounts","en\u002F4.settings\u002F5.integrations\u002F3.c21livecloud\u002F2.accounts","i-lucide-key-round",{"title":208,"icon":146,"path":209,"stem":210,"children":211,"page":24},"DRM Providers","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm","en\u002F4.settings\u002F5.integrations\u002F4.drm",[212,216,220,224,228,233],{"title":41,"path":213,"stem":214,"icon":215},"\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Foverview","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F1.overview","i-lucide-shield-check",{"title":217,"path":218,"stem":219,"icon":146},"Widevine","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fwidevine","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F2.widevine",{"title":221,"path":222,"stem":223,"icon":146},"PlayReady","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fplayready","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F3.playready",{"title":225,"path":226,"stem":227,"icon":146},"FairPlay","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Ffairplay","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F4.fairplay",{"title":229,"path":230,"stem":231,"icon":232},"Providers","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fproviders","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F5.providers","i-lucide-shield-half",{"title":234,"path":235,"stem":236,"icon":237},"Workflow","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fworkflow","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F6.workflow","i-lucide-workflow",{"title":239,"path":240,"stem":241,"children":242,"page":24},"System Status","\u002Fen\u002Fsystem-status","en\u002F5.system-status",[243,248],{"title":244,"path":245,"stem":246,"icon":247},"Commands","\u002Fen\u002Fsystem-status\u002Fcommands","en\u002F5.system-status\u002F1.commands","i-lucide-square-terminal",{"title":249,"path":250,"stem":251,"icon":252},"Logs","\u002Fen\u002Fsystem-status\u002Flogs","en\u002F5.system-status\u002F2.logs","i-lucide-scroll-text",{"title":254,"path":255,"stem":256,"children":257,"page":24},"How Tos","\u002Fen\u002Fhow-tos","en\u002F6.how-tos",[258,263,268,273,277,281,285,290,294,299,304,309],{"title":259,"path":260,"stem":261,"icon":262},"Start and stop a Live stream","\u002Fen\u002Fhow-tos\u002Fstart-stream-via-api","en\u002F6.how-tos\u002F1.start-stream-via-api","i-lucide-terminal",{"title":264,"path":265,"stem":266,"icon":267},"Ingest a YouTube Live broadcast","\u002Fen\u002Fhow-tos\u002Fingest-youtube-live","en\u002F6.how-tos\u002F10.ingest-youtube-live","i-lucide-youtube",{"title":269,"path":270,"stem":271,"icon":272},"Source Synchronized Encoding (SSE) — bit-identical redundancy","\u002Fen\u002Fhow-tos\u002Fsource-synchronized-encoding","en\u002F6.how-tos\u002F11.source-synchronized-encoding","i-lucide-copy-check",{"title":274,"path":275,"stem":276,"icon":34},"Broadcast radio as video","\u002Fen\u002Fhow-tos\u002Fbroadcast-radio-as-video","en\u002F6.how-tos\u002F12.broadcast-radio-as-video",{"title":278,"path":279,"stem":280,"icon":215},"Protect a Live stream with multi-DRM","\u002Fen\u002Fhow-tos\u002Fmulti-drm-destination","en\u002F6.how-tos\u002F2.multi-drm-destination",{"title":282,"path":283,"stem":284,"icon":59},"Schedule a weekly recurring broadcast","\u002Fen\u002Fhow-tos\u002Fweekly-recurring-broadcast","en\u002F6.how-tos\u002F3.weekly-recurring-broadcast",{"title":286,"path":287,"stem":288,"icon":289},"Cut a clip in the Editor and send it to MediaCopilot","\u002Fen\u002Fhow-tos\u002Fexport-recording-to-mediacopilot","en\u002F6.how-tos\u002F4.export-recording-to-mediacopilot","i-lucide-upload-cloud",{"title":291,"path":292,"stem":293,"icon":149},"Apply a logo overlay to a running Live stream","\u002Fen\u002Fhow-tos\u002Fapply-logo-overlay","en\u002F6.how-tos\u002F5.apply-logo-overlay",{"title":295,"path":296,"stem":297,"icon":298},"Black out or replace the program on a running Live stream","\u002Fen\u002Fhow-tos\u002Fbroadcast-blackout","en\u002F6.how-tos\u002F6.broadcast-blackout","i-lucide-square",{"title":300,"path":301,"stem":302,"icon":303},"Switch the source of a running Live stream","\u002Fen\u002Fhow-tos\u002Fruntime-source-switch","en\u002F6.how-tos\u002F7.runtime-source-switch","i-lucide-repeat-2",{"title":305,"path":306,"stem":307,"icon":308},"Toggle a Publishing mid-broadcast","\u002Fen\u002Fhow-tos\u002Ftoggle-publishing-mid-broadcast","en\u002F6.how-tos\u002F8.toggle-publishing-mid-broadcast","i-lucide-toggle-right",{"title":310,"path":311,"stem":312,"icon":34},"Contribute a live signal to MediaCopilot Live","\u002Fen\u002Fhow-tos\u002Fcontribute-to-mediacopilot-live","en\u002F6.how-tos\u002F9.contribute-to-mediacopilot-live",{"title":314,"path":315,"stem":316,"children":317,"page":24},"Installation","\u002Fen\u002Finstallation","en\u002F7.installation",[318,323,328,333,338],{"title":319,"path":320,"stem":321,"icon":322},"Prepare the host","\u002Fen\u002Finstallation\u002Fprepare-host","en\u002F7.installation\u002F1.prepare-host","i-lucide-server-cog",{"title":324,"path":325,"stem":326,"icon":327},"Install C21 Live Control","\u002Fen\u002Finstallation\u002Fcontrol","en\u002F7.installation\u002F2.control","i-lucide-cloud-download",{"title":329,"path":330,"stem":331,"icon":332},"Install C21 Live Encoder","\u002Fen\u002Finstallation\u002Fencoder","en\u002F7.installation\u002F3.encoder","i-lucide-cpu",{"title":334,"path":335,"stem":336,"icon":337},"Updates","\u002Fen\u002Finstallation\u002Fupdates","en\u002F7.installation\u002F4.updates","i-lucide-refresh-cw",{"title":339,"path":340,"stem":341,"icon":206},"Licenses","\u002Fen\u002Finstallation\u002Flicenses","en\u002F7.installation\u002F5.licenses",{"title":343,"path":344,"stem":345,"children":346,"page":24},"Developers","\u002Fen\u002Fdevelopers","en\u002F8.developers",[347,351,369],{"title":41,"path":348,"stem":349,"icon":350},"\u002Fen\u002Fdevelopers\u002Foverview","en\u002F8.developers\u002F1.overview","i-lucide-code",{"title":352,"icon":350,"path":353,"stem":354,"children":355,"page":24},"API","\u002Fen\u002Fdevelopers\u002Fapi","en\u002F8.developers\u002F2.api",[356,359,364],{"title":41,"path":357,"stem":358,"icon":350},"\u002Fen\u002Fdevelopers\u002Fapi\u002Foverview","en\u002F8.developers\u002F2.api\u002F1.overview",{"title":360,"path":361,"stem":362,"icon":363},"Authentication","\u002Fen\u002Fdevelopers\u002Fapi\u002Fauthentication","en\u002F8.developers\u002F2.api\u002F2.authentication","i-lucide-key",{"title":365,"path":366,"stem":367,"icon":368},"Pagination and Errors","\u002Fen\u002Fdevelopers\u002Fapi\u002Fpagination-errors","en\u002F8.developers\u002F2.api\u002F3.pagination-errors","i-lucide-list-ordered",{"title":370,"icon":371,"path":372,"stem":373,"children":374,"page":24},"MCP Server","i-lucide-bot","\u002Fen\u002Fdevelopers\u002Fmcp-server","en\u002F8.developers\u002F3.mcp-server",[375,378,383],{"title":41,"path":376,"stem":377,"icon":371},"\u002Fen\u002Fdevelopers\u002Fmcp-server\u002Foverview","en\u002F8.developers\u002F3.mcp-server\u002F1.overview",{"title":379,"path":380,"stem":381,"icon":382},"Tools","\u002Fen\u002Fdevelopers\u002Fmcp-server\u002Ftools","en\u002F8.developers\u002F3.mcp-server\u002F2.tools","i-lucide-wrench",{"title":384,"path":385,"stem":386,"icon":387},"Examples","\u002Fen\u002Fdevelopers\u002Fmcp-server\u002Fexamples","en\u002F8.developers\u002F3.mcp-server\u002F3.examples","i-lucide-play",{"title":389,"path":390,"stem":391,"children":392,"page":24},"Resources","\u002Fen\u002Fresources","en\u002F9.resources",[393,398,403],{"title":394,"path":395,"stem":396,"icon":397},"Links","\u002Fen\u002Fresources\u002Flinks","en\u002F9.resources\u002F1.links","i-lucide-link",{"title":399,"path":400,"stem":401,"icon":402},"Release Notes","\u002Fen\u002Fresources\u002Frelease-notes","en\u002F9.resources\u002F2.release-notes","i-lucide-clipboard-list",{"title":404,"path":405,"stem":406,"icon":407},"Glossary","\u002Fen\u002Fresources\u002Fglossary","en\u002F9.resources\u002F3.glossary","i-lucide-book-a",{"id":409,"title":339,"body":410,"description":1308,"extension":1309,"links":1310,"meta":1311,"navigation":1312,"path":340,"seo":1313,"stem":341,"__hash__":1314},"docs_en\u002Fen\u002F7.installation\u002F5.licenses.md",{"type":411,"value":412,"toc":1286},"minimark",[413,422,425,430,449,456,460,472,476,479,567,572,614,618,628,708,712,740,744,747,835,839,846,902,907,911,929,995,998,1002,1006,1018,1022,1091,1151,1169,1173,1216,1220,1235,1242,1249,1273],[414,415,416,417,421],"p",{},"Every C21 Streaming host carries a ",[418,419,420],"strong",{},"license file"," keyed to its MAC address. The file declares which products and features the host is allowed to run. This page is the canonical reference for which licenses exist, what each one unlocks, where it is enforced, and what an operator sees when one is missing.",[414,423,424],{},"System Administrators upload the license file through the license form that surfaces automatically when an instance carries no valid license — for example, on first boot or after expiration. Once a license is valid and an operator is signed in, there is no in-session UI panel to inspect or replace the license; replacement requires invalidating the instance (or restarting the service after expiration) and uploading a new file through the login flow. Operators have no license-administration surface — they may still see the user-facing effects (a hidden tab, a rejected channel type) but cannot change what is licensed.",[426,427,429],"h2",{"id":428},"what-licenses-are","What licenses are",[414,431,432,433,436,437,440,441,444,445,448],{},"A license has a ",[418,434,435],{},"name"," (the product or feature it grants), an ",[418,438,439],{},"expiration",", an optional ",[418,442,443],{},"quantity"," (used by licenses that meter a resource, such as the number of channels an encoder may run) and a signed ",[418,446,447],{},"key",". Licenses are bound to the host's MAC address; a license file from one host will not validate on another.",[414,450,451,452,455],{},"A single license file usually carries several licenses — one for the ",[418,453,454],{},"C21 Live Control"," product, one for the C21 Live Editor, one for the C21 Live Deploy add-on, and so on. The Control and the Encoder are licensed separately even when they run on the same machine: the Encoder enforces its own license set (encoder channels, multi publishing points, UDP recovery) and the Control enforces its own (Control \u002F Editor \u002F Deploy).",[426,457,459],{"id":458},"where-licenses-live","Where licenses live",[414,461,462,463,467,468,471],{},"Licenses are installed as a single file on the host. The upload form is the license screen that surfaces automatically when the LMS detects no valid license (",[464,465,466],"code",{},"user.validLicense === false","); at any other time there is no UI panel to touch the file. The two real paths to replace the file are: (a) wait for the LMS to report an invalid license (expiration or a restart with no license) so the form surfaces; or (b) use the ",[464,469,470],{},"installLicense"," API endpoint described below. The file-system location is an implementation detail not exposed in the product.",[426,473,475],{"id":474},"c21-live-control-licenses","C21 Live Control licenses",[414,477,478],{},"The C21 Live Control process (LMS) checks these licenses on startup and again periodically while it runs.",[480,481,482,501],"table",{},[483,484,485],"thead",{},[486,487,488,492,495,498],"tr",{},[489,490,491],"th",{},"License",[489,493,494],{},"Required?",[489,496,497],{},"Quantity meaning",[489,499,500],{},"What it unlocks",[502,503,504,521,545],"tbody",{},[486,505,506,512,515,518],{},[507,508,509],"td",{},[418,510,511],{},"C21LiveControl",[507,513,514],{},"Yes",[507,516,517],{},"— (presence-only)",[507,519,520],{},"The Control product itself: the management UI, the API surface and the Scheduler. Without it, the Live Control process refuses to start.",[486,522,523,528,536,538],{},[507,524,525],{},[418,526,527],{},"C21LiveEditor",[507,529,530,531,535],{},"Yes for the standalone ",[532,533,534],"em",{},"Live Editor"," product; optional on Live Control",[507,537,517],{},[507,539,540,541,544],{},"The Recordings Editor tab — the in-product surface for cutting clips from finished Recordings and exporting them (download, FTP, S3, SFTP, MediaCopilot). On a Live Control install, the Editor tab is hidden when the license is absent and the ",[542,543,189],"a",{"href":190}," integration cannot be invoked from the UI.",[486,546,547,552,555,557],{},[507,548,549],{},[418,550,551],{},"C21LiveDeploy",[507,553,554],{},"No (opt-in)",[507,556,517],{},[507,558,559,560,562,563,566],{},"The ",[418,561,194],{}," account integration: the ",[418,564,565],{},"Stream – C21 Live Cloud"," Channel type, its matching cloud Destinations and the related cloud-folder provisioning.",[568,569,571],"h3",{"id":570},"what-happens-when-a-control-license-is-missing","What happens when a Control license is missing",[573,574,575,582,605],"ul",{},[576,577,578,581],"li",{},[418,579,580],{},"C21LiveControl missing."," The Live Control process refuses to start; the management UI is unreachable. If the license expires while the process is running, the periodic recheck (which runs on the main loop) trips and the process exits.",[576,583,584,587,588,590,591,593,594,597,598,601,602,604],{},[418,585,586],{},"C21LiveEditor missing on a Live Control install."," The Live Control still starts. The ",[418,589,70],{}," tab is hidden from ",[532,592,61],{}," (verified in ",[464,595,596],{},"RecordingsBase.vue"," — the tab is only added when ",[464,599,600],{},"hasEditorLicense"," is true) and the integrations that depend on it (notably ",[542,603,189],{"href":190},") cannot be invoked from the UI.",[576,606,607,610,611,613],{},[418,608,609],{},"C21LiveDeploy missing."," The Live Control still starts. The C21 Live Cloud integration page is reachable, but the cloud Channel and Destination variants are not selectable in the editors. See ",[542,612,194],{"href":200}," for the integration page.",[426,615,617],{"id":616},"c21-live-encoder-licenses","C21 Live Encoder licenses",[414,619,559,620,623,624,627],{},[418,621,622],{},"C21 Live Encoder"," process checks these licenses on startup. The encoder will not run without a valid ",[464,625,626],{},"C21LiveEncoder"," license; the other licenses are opt-in features.",[480,629,630,642],{},[483,631,632],{},[486,633,634,636,638,640],{},[489,635,491],{},[489,637,494],{},[489,639,497],{},[489,641,500],{},[502,643,644,662,690],{},[486,645,646,650,652,655],{},[507,647,648],{},[418,649,626],{},[507,651,514],{},[507,653,654],{},"Number of concurrent encoding channels the encoder may run",[507,656,657,658,661],{},"The encoder process itself. The Quantity surfaces on the Control side as ",[464,659,660],{},"Device.licensed.channels"," on the Device's detail page.",[486,663,664,669,672,679],{},[507,665,666],{},[418,667,668],{},"Multi Publishing Points",[507,670,671],{},"No (defaults to 1)",[507,673,674,675,678],{},"Max Destinations ",[418,676,677],{},"active at the same time"," per channel",[507,680,681,682,685,686,689],{},"When absent, every channel is capped to a single active Destination. A ",[542,683,684],{"href":121},"Destination group"," can still hold up to 20 members; this license governs how many are active at once. The Quantity surfaces on the Control side as ",[464,687,688],{},"Device.licensed.publishing_points",".",[486,691,692,697,699,702],{},[507,693,694],{},[418,695,696],{},"UDP Recovery",[507,698,554],{},[507,700,701],{},"Used as a boolean — UDP-R is enabled when the license is present",[507,703,704,705,707],{},"Enables the UDP-R contribution path on the encoder. ",[418,706,565],{}," Channels using UDP-R transport cannot run on an encoder without this license.",[568,709,711],{"id":710},"what-happens-when-an-encoder-license-is-missing","What happens when an Encoder license is missing",[573,713,714,724,734],{},[576,715,716,719,720,723],{},[418,717,718],{},"C21LiveEncoder missing."," The encoder process refuses to start and logs ",[532,721,722],{},"\"Incorrect License\"",". The Control side cannot dispatch broadcasts to that encoder.",[576,725,726,729,730,733],{},[418,727,728],{},"Multi Publishing Points missing."," The encoder runs but caps every channel to a single Destination. The cap surfaces as ",[464,731,732],{},"Device.licensed.publishing_points = 1"," on the Device detail.",[576,735,736,739],{},[418,737,738],{},"UDP Recovery missing."," The encoder runs but rejects UDP-R contribution Channels at start time.",[426,741,743],{"id":742},"per-feature-license-gates","Per-feature license gates",[414,745,746],{},"Beyond the product-level licenses above, two features are gated at the application layer:",[480,748,749,765],{},[483,750,751],{},[486,752,753,756,759,762],{},[489,754,755],{},"Feature",[489,757,758],{},"License required",[489,760,761],{},"Where the gate sits",[489,763,764],{},"What happens without it",[502,766,767,814],{},[486,768,769,775,780,795],{},[507,770,771,774],{},[418,772,773],{},"Youtube Live"," Channel type",[507,776,777],{},[464,778,779],{},"C21LiveYouTube",[507,781,782,783,786,787,790,791,794],{},"Channel CRUD (",[464,784,785],{},"POST"," \u002F ",[464,788,789],{},"PUT"," on ",[464,792,793],{},"\u002Fc21apiv2\u002Fchannels",")",[507,796,559,797,799,800,803,804,806,807,810,811,813],{},[532,798,773],{}," option is hidden from the Channel type picker in the UI (",[464,801,802],{},"ChannelEditor.vue"," checks the license flag). API calls that create or convert a Channel into ",[532,805,773],{}," fail with ",[464,808,809],{},"APIf807",". Existing ",[532,812,773],{}," Channels keep working until edited.",[486,815,816,821,825,828],{},[507,817,818,820],{},[418,819,194],{}," account integration",[507,822,823],{},[464,824,551],{},[507,826,827],{},"LMS Control startup",[507,829,559,830,832,833,689],{},[418,831,565],{}," Channel type and its matching cloud Destinations are not provisioned. See ",[542,834,194],{"href":200},[426,836,838],{"id":837},"per-device-quantities-exposed-through-the-api","Per-device quantities exposed through the API",[414,840,841,842,845],{},"The Quantity fields of the encoder-side licenses surface on the Control through ",[464,843,844],{},"Device.licensed",":",[480,847,848,861],{},[483,849,850],{},[486,851,852,855,858],{},[489,853,854],{},"API field",[489,856,857],{},"Source license",[489,859,860],{},"Meaning",[502,862,863,876,889],{},[486,864,865,869,873],{},[507,866,867],{},[464,868,660],{},[507,870,871],{},[464,872,626],{},[507,874,875],{},"Maximum concurrent encoding channels on this Device.",[486,877,878,882,886],{},[507,879,880],{},[464,881,688],{},[507,883,884],{},[464,885,668],{},[507,887,888],{},"Maximum simultaneous Destinations per channel.",[486,890,891,896,899],{},[507,892,893],{},[464,894,895],{},"Device.licensed.outputs",[507,897,898],{},"(Derived from encoder licenses)",[507,900,901],{},"Maximum simultaneous outputs the encoder may emit.",[414,903,904,905,689],{},"For the full Device contract see ",[542,906,80],{"href":81},[426,908,910],{"id":909},"license-file-format","License file format",[414,912,913,914,917,918,921,922,921,925,928],{},"The license file is an INI file. Each license is one ",[464,915,916],{},"[Product]"," section whose name matches the canonical license name (for example ",[464,919,920],{},"[C21LiveControl]",", ",[464,923,924],{},"[C21LiveEncoder]",[464,926,927],{},"[Multi Publishing Points]","). Each section carries exactly three fields:",[480,930,931,941],{},[483,932,933],{},[486,934,935,938],{},[489,936,937],{},"Field",[489,939,940],{},"Notes",[502,942,943,960,985],{},[486,944,945,950],{},[507,946,947],{},[464,948,949],{},"Expiration",[507,951,952,953,956,957,689],{},"Date the license expires. The sentinel value ",[464,954,955],{},"31-12-3000"," is rendered by the API as ",[464,958,959],{},"Unlimited",[486,961,962,967],{},[507,963,964],{},[464,965,966],{},"Quantity",[507,968,969,970,972,973,975,976,921,978,921,980,921,982,984],{},"Integer. For metered licenses (",[464,971,626],{}," channels, ",[464,974,668],{},") this is the cap. For presence-only licenses (",[464,977,511],{},[464,979,527],{},[464,981,551],{},[464,983,779],{},") the value is ignored.",[486,986,987,992],{},[507,988,989],{},[464,990,991],{},"Key",[507,993,994],{},"Signed payload. The host validates the signature against its MAC address.",[414,996,997],{},"The same file format is uploaded through the license form (the screen that surfaces automatically when the instance has no valid license) and through the API endpoint described below.",[426,999,1001],{"id":1000},"administering-licenses","Administering licenses",[568,1003,1005],{"id":1004},"how-the-api-exposes-it","How the API exposes it",[414,1007,1008,1011,1012,1014,1015,1017],{},[464,1009,1010],{},"getSystemLicenses"," returns each installed license with its product name, expiration (rendered as ",[532,1013,959],{}," when the underlying value is ",[464,1016,955],{},") and quantity. The Key is stored on disk and is not returned by the API.",[568,1019,1021],{"id":1020},"from-the-api","From the API",[480,1023,1024,1040],{},[483,1025,1026],{},[486,1027,1028,1031,1034,1037],{},[489,1029,1030],{},"Operation",[489,1032,1033],{},"Method + path",[489,1035,1036],{},"operationId",[489,1038,1039],{},"Required role",[502,1041,1042,1059,1075],{},[486,1043,1044,1047,1052,1056],{},[507,1045,1046],{},"List installed licenses",[507,1048,1049],{},[464,1050,1051],{},"GET \u002Fc21apiv2\u002Fsystem\u002Flicenses",[507,1053,1054],{},[464,1055,1010],{},[507,1057,1058],{},"System Administrator",[486,1060,1061,1064,1069,1073],{},[507,1062,1063],{},"Install \u002F replace the license file",[507,1065,1066],{},[464,1067,1068],{},"POST \u002Fc21apiv2\u002Fsystem\u002Flicenses",[507,1070,1071],{},[464,1072,470],{},[507,1074,1058],{},[486,1076,1077,1080,1085,1088],{},[507,1078,1079],{},"License-validity probe",[507,1081,1082],{},[464,1083,1084],{},"GET \u002Fc21apiv2\u002Fcrud\u002Flicense",[507,1086,1087],{},"—",[507,1089,1090],{},"Any authenticated user",[573,1092,1093,1120],{},[576,1094,1095,1097,1098,1101,1102,1105,1106,1108,1109,921,1111,1113,1114,1116,1117,689],{},[464,1096,470],{}," accepts a ",[464,1099,1100],{},"multipart\u002Fform-data"," body whose ",[464,1103,1104],{},"file"," part is the INI license file. The handler reads each ",[464,1107,916],{}," section and persists ",[464,1110,949],{},[464,1112,966],{}," and ",[464,1115,991],{},". When the file contains zero valid product sections, the response is ",[464,1118,1119],{},"SYSF008",[576,1121,1122,1124,1125,1128,1129,1131,1132,1135,1136,1139,1140,786,1142,786,1144,1147,1148,689],{},[464,1123,1084],{}," returns ",[464,1126,1127],{},"{ valid: true | false }"," based on whether ",[464,1130,511],{}," is present and active. The UI uses this probe to render the ",[532,1133,1134],{},"\"This section is not available without a product license.\""," banner on ",[542,1137,1138],{"href":32},"On Air"," and similar gated pages. Mutating verbs (",[464,1141,785],{},[464,1143,789],{},[464,1145,1146],{},"DELETE",") on this path are explicitly blocked with ",[464,1149,1150],{},"Method not allowed",[414,1152,1153,1154,1157,1158,1113,1161,1164,1165,689],{},"For per-device license readouts (legacy multiplexer) see ",[464,1155,1156],{},"POST \u002Fc21apiv2\u002Fsystem\u002Fcommand"," with ",[464,1159,1160],{},"action: \"getLicenses\"",[464,1162,1163],{},"action: \"uploadLicense\""," documented under ",[542,1166,1168],{"href":1167},"\u002Fen\u002Fdevelopers\u002Fapi\u002Freference-system","API → System commands",[426,1170,1172],{"id":1171},"expiration-handling","Expiration handling",[573,1174,1175,1191,1197],{},[576,1176,1177,1180,1181,1183,1184,1186,1187,1190],{},[418,1178,1179],{},"C21 Live Control."," The process re-checks ",[464,1182,511],{}," (or ",[464,1185,527],{}," on a standalone Editor install) on its main loop. When the license file is no longer valid, the process logs ",[532,1188,1189],{},"\"License is not valid or has expired\""," and exits. The UI becomes unreachable shortly after.",[576,1192,1193,1196],{},[418,1194,1195],{},"C21 Live Encoder."," The encoder reads its license on startup. A mid-run expiration of the encoder license is not re-evaluated until the next restart, but the host's other licenses (Multi Publishing Points, UDP Recovery) are read on the same path so they take effect on the next encoder restart.",[576,1198,1199,1202,1203,1206,1207,1209,1210,1212,1213,1215],{},[418,1200,1201],{},"License rendering."," ",[464,1204,1205],{},"Expiration: 31-12-3000"," is rendered as ",[532,1208,959],{}," in the License tab and in the ",[464,1211,1010],{}," response. The product does not render expiration colour bands or graded warnings — the License tab shows the date and the ",[464,1214,959],{}," sentinel, and the runtime check is binary (valid \u002F not valid).",[426,1217,1219],{"id":1218},"faq","FAQ",[1221,1222,1224,1225,1227,1228,1230,1231,1234],"collapsible",{"name":1223},"Can I run Live Control without C21LiveEditor?","Yes. The Live Control product itself only requires ",[464,1226,511],{},". When ",[464,1229,527],{}," is absent, the ",[532,1232,1233],{},"Recordings → Editor"," tab is hidden and the MediaCopilot export flow cannot be invoked from the UI, but every other feature works.",[1221,1236,1238,1239,1241],{"name":1237},"What happens if my C21LiveControl expires while I'm on air?","The Live Control process continues until the next periodic license check. When the check finds the license is no longer valid, the process logs ",[532,1240,1189],{}," and exits. Live streams already in flight on the Encoder side keep emitting until the Encoder loses its connection to the Control or its own license expires.",[1221,1243,1245,1246,1248],{"name":1244},"Does the same license file work on the Encoder and on the Control?","No. Each host carries its own license file keyed to its own MAC address, and the Encoder and the Control enforce different license sets. A combined Control + Encoder appliance has a single MAC and therefore a single file, but the file contains both sets of ",[464,1247,916],{}," sections.",[1221,1250,1252,1253,1255,1256,1258,1259,1261,1262,1264,1265,1267,1268,1270,1271,689],{"name":1251},"Can I see the Encoder's channel capacity from the Control UI?","Yes. Open the Device under ",[542,1254,80],{"href":81}," and read ",[464,1257,660],{}," — that is the ",[464,1260,966],{}," from the Encoder's ",[464,1263,626],{}," license. ",[464,1266,688],{}," is the ",[464,1269,966],{}," from ",[464,1272,668],{},[1221,1274,1276,1277,1279,1280,1282,1283,1285],{"name":1275},"Why does my Youtube Live Channel creation fail with APIf807?","The host does not carry the ",[464,1278,779],{}," license. The Channel type is still in the schema for contract stability, but mutations (create \u002F convert) are rejected with ",[464,1281,809],{},". Existing Channels of type ",[532,1284,773],{}," keep working until you edit them.",{"title":1287,"searchDepth":1288,"depth":1288,"links":1289},"",2,[1290,1291,1292,1296,1299,1300,1301,1302,1306,1307],{"id":428,"depth":1288,"text":429},{"id":458,"depth":1288,"text":459},{"id":474,"depth":1288,"text":475,"children":1293},[1294],{"id":570,"depth":1295,"text":571},3,{"id":616,"depth":1288,"text":617,"children":1297},[1298],{"id":710,"depth":1295,"text":711},{"id":742,"depth":1288,"text":743},{"id":837,"depth":1288,"text":838},{"id":909,"depth":1288,"text":910},{"id":1000,"depth":1288,"text":1001,"children":1303},[1304,1305],{"id":1004,"depth":1295,"text":1005},{"id":1020,"depth":1295,"text":1021},{"id":1171,"depth":1288,"text":1172},{"id":1218,"depth":1288,"text":1219},"The product licenses that gate C21 Live Control and C21 Live Encoder, how they are installed, where they are administered, and what happens when one is missing or expires.","md",null,{},{"icon":206},{"title":339,"description":1308},"rhXSKFmCChbfUC5RdSLpVq5itvCXcZZaZpYU3zvW5Qo",[1316,1318],{"title":334,"path":335,"stem":336,"description":1317,"icon":337,"children":-1},"Update C21 Live Control and C21 Live Encoder — flow, compatibility and rollback.",{"title":41,"path":348,"stem":349,"description":1319,"icon":350,"children":-1},"Build against C21 Live Control — the REST API at \u002Fc21apiv2 and the MCP server, both behind one bearer token.",1782916488134]