CINXE.COM
YouTube Live Streaming API Overview | Google Developers
<!doctype html> <html lang="en" dir="ltr"> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://developers.google.com/youtube/v3/live/getting-started","20211202095005","https://web.archive.org/","web","/_static/", "1638438605"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google Developers"> <meta property="og:type" content="website"><meta name="theme-color" content="#ff0000"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/web/20211202095005/https://developers.google.com/_pwa/developers/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//web.archive.org/web/20211202095005/https://www.gstatic.com/" crossorigin> <link rel="preconnect" href="//web.archive.org/web/20211202095005/https://fonts.gstatic.com/" crossorigin> <link rel="preconnect" href="//web.archive.org/web/20211202095005/https://fonts.googleapis.com/" crossorigin> <link rel="preconnect" href="//web.archive.org/web/20211202095005/https://apis.google.com/" crossorigin> <link rel="preconnect" href="//web.archive.org/web/20211202095005/https://www.google-analytics.com/" crossorigin><link rel="stylesheet" href="//web.archive.org/web/20211202095005cs_/https://fonts.googleapis.com/css?family=Google+Sans_old:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//web.archive.org/web/20211202095005cs_/https://fonts.googleapis.com/css?family=Material+Icons&display=block"><link rel="stylesheet" href="https://web.archive.org/web/20211202095005cs_/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095/developers/css/app.css"> <link rel="shortcut icon" href="https://web.archive.org/web/20211202095005im_/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095/developers/images/favicon.png"> <link rel="apple-touch-icon" href="https://web.archive.org/web/20211202095005im_/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095/developers/images/touchicon-180.png"><link rel="canonical" href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/getting-started"><link rel="search" type="application/opensearchdescription+xml" title="Google Developers" href="https://web.archive.org/web/20211202095005/https://developers.google.com/s/opensearch.xml"> <title>YouTube Live Streaming API Overview | Google Developers</title> <meta property="og:title" content="YouTube Live Streaming API Overview | Google Developers"><meta name="description" content="Create, update, and manage live events on YouTube."> <meta property="og:description" content="Create, update, and manage live events on YouTube."><meta property="og:url" content="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/getting-started"><meta property="og:image" content="https://web.archive.org/web/20211202095005im_/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095/developers/images/opengraph/youtube-theme.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://web.archive.org/web/20211202095005/https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "YouTube", "item": "https://web.archive.org/web/20211202095005/https://developers.google.com/youtube" },{ "@type": "ListItem", "position": 2, "name": "Live Streaming API", "item": "https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/getting-started" }] } </script> </head> <body class="" template="page" theme="youtube-theme" type="article" layout="docs" pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <section class="devsite-wrapper"><devsite-header> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube"> <div class="devsite-product-logo-container" size="medium"> <img class="devsite-product-logo" alt="YouTube" src="https://web.archive.org/web/20211202095005im_/https://developers.google.com/site-assets/logo-youtube.svg" srcset="" sizes="64px" loading="lazy"> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" aria-label="Product breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="YouTube"> YouTube </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/getting-started" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="YouTube Live Streaming API"> Live Streaming API </a> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> </div> <devsite-search aria-expanded="false" aria-haspopup="listbox" enable-signin enable-search enable-suggestions enable-query-completion project-name="YouTube Live Streaming API" tenant-name="Google Developers" project-scope="/youtube/v3/live/getting-started" url-scoped="https://developers.google.com/s/results/youtube/v3/live/getting-started" role="combobox"> <form class="devsite-search-form" action="https://web.archive.org/web/20211202095005/https://developers.google.com/s/results" method="GET"> <div class="devsite-search-container"> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-haspopup="false" aria-multiline="false" aria-label="Search box" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="searchbox" type="text" value=""> <div class="devsite-search-image material-icons" aria-hidden="true"></div> </div> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <devsite-select class="devsite-language-selector-menu"> <select aria-label="Select your language preference." class="devsite-language-selector-select" name="language" track-name="click" track-type="languageSelector"> <option>Language</option> <option value="en" lang="en"> English </option> <option value="id" lang="id"> Bahasa Indonesia </option> <option value="de" lang="de"> Deutsch </option> <option value="es" lang="es"> Español </option> <option value="fr" lang="fr"> Français </option> <option value="pt_br" lang="pt_br"> Português – Brasil </option> <option value="ru" lang="ru"> Русский </option> <option value="zh_cn" lang="zh_cn"> 中文 – 简体 </option> <option value="ja" lang="ja"> 日本語 </option> <option value="ko" lang="ko"> 한국어 </option> </select> </devsite-select> </devsite-language-selector> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab active> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/getting-started" class="gc-analytics-event " track-type="nav" track-name="guides" track-metadata-eventdetail="https://developers.google.com/youtube/v3/live/getting-started" track-metadata-position="nav - guides" track-metadata-module="primary nav" aria-label="Guides, selected" data-category="Site-Wide Custom Events" data-label="Tab: Guides"> Guides </a> </tab> <tab> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/docs" class="gc-analytics-event " track-type="nav" track-name="reference" track-metadata-eventdetail="https://developers.google.com/youtube/v3/live/docs" track-metadata-position="nav - reference" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Reference"> Reference </a> </tab> <tab> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/code_samples" class="gc-analytics-event " track-type="nav" track-name="samples" track-metadata-eventdetail="https://developers.google.com/youtube/v3/live/code_samples" track-metadata-position="nav - samples" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Samples"> Samples </a> </tab> <tab> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/support" class="gc-analytics-event " track-type="nav" track-name="support" track-metadata-eventdetail="https://developers.google.com/youtube/v3/live/support" track-metadata-position="nav - support" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Support"> Support </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube"> <div class="devsite-product-logo-container" size="medium"> <img class="devsite-product-logo" alt="YouTube" src="https://web.archive.org/web/20211202095005im_/https://developers.google.com/site-assets/logo-youtube.svg" srcset="" sizes="64px" loading="lazy"> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" aria-label="Upper header breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="YouTube"> YouTube </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/getting-started" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="YouTube Live Streaming API"> Live Streaming API </a> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/getting-started" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Guides" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="guides"> <span class="devsite-nav-text" tooltip> Guides </span> <span class="devsite-nav-icon material-icons" data-icon="forward"> </span> </a> </li> <li class="devsite-nav-item"> <a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="reference"> <span class="devsite-nav-text" tooltip> Reference </span> <span class="devsite-nav-icon material-icons" data-icon="forward"> </span> </a> </li> <li class="devsite-nav-item"> <a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/code_samples" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="samples"> <span class="devsite-nav-text" tooltip> Samples </span> </a> </li> <li class="devsite-nav-item"> <a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/support" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Support" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="support"> <span class="devsite-nav-text" tooltip> Support </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom" role="navigation"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/getting-started" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Overview</span></a></li> <li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/libraries" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Client Libraries</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"><span class="devsite-nav-text" tooltip>Authorize Requests</span></div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/authentication" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/registering_an_application" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Get Auth Credentials</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/guides/auth/server-side-web-apps" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Server-side Web Apps</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/guides/auth/client-side-web-apps" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Client-side Web Apps</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/guides/auth/installed-apps" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Installed Apps</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/guides/auth/devices" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Devices</span></a></li></ul></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"><span class="devsite-nav-text" tooltip>Guides and Tutorials</span></div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/life-of-a-broadcast" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Life of a Broadcast</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/broadcasts-and-streams" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Broadcasts and Streams</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/guides/ingestion-protocol-comparison" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Ingestion Protocol Comparison</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/guides/encoding-with-dash" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Delivering Content via DASH</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/guides/hls-ingestion" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Delivering Content via HLS</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/guides/rtmps-ingestion" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Delivering Content via RTMPS</span></a></li><li class="devsite-nav-item"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/guides/migration-guide-default-broadcasts" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Migration guide for default broadcasts and streams</span></a></li></ul></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"><span class="devsite-nav-text" tooltip>Tools</span></div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-external"><a href="https://web.archive.org/web/20211202095005/https://developers.google.com/apis-explorer/#p/youtube/v3/" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>APIs Explorer</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li></ul></li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" class="devsite-main-content" has-book-nav has-sidebar> <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail=""> Home </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/products" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail=""> Products </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="YouTube"> YouTube </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/youtube/v3/live/getting-started" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="YouTube Live Streaming API"> Live Streaming API </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <h1 class="devsite-page-title">YouTube Live Streaming API Overview</h1> <devsite-bookmark></devsite-bookmark> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded> </devsite-toc> <devsite-recommendations-dropdown class="nocontent"></devsite-recommendations-dropdown> <div class="devsite-article-body clearfix "> <div class="video-wrapper"> <iframe class="devsite-embedded-youtube-video" data-video-id="-PU7Ixt5_0s" data-autohide="1" data-showinfo="0" frameborder="0" allowfullscreen> </iframe> </div> <p>The YouTube Live Streaming API lets you create, update, and manage live events on YouTube. Using the API, you can schedule events (broadcasts) and associate them with video streams, which represent the actual broadcast content.</p> <p>The Live Streaming API is actually comprised of components of the YouTube Data API and the YouTube Content ID API. The Data API enables YouTube users to manage their YouTube accounts, while the <span class="notranslate">YouTube Content ID API</span> enables interactions with YouTube's rights management system. However, all of the resources that make up the Live Streaming API are used only to create and manage live events.</p> <p>This document is intended for developers who want to write applications to facilitate live broadcasting on YouTube. It explains basic concepts of YouTube and of the API itself. It also provides an overview of the different functions that the API supports.</p> <h2 id="core-concepts" data-text="Core concepts">Core concepts</h2> <dl> <dt>broadcasts</dt> <dd>A <strong>broadcast</strong> represents an event that can be watched on YouTube as it happens. Broadcasts can also be recorded and saved as YouTube videos so that users can watch them after they happen.</dd> <dt>streams</dt> <dd>A <strong>stream</strong> identifies the audio-video content that is being communicated to YouTube. Each broadcast is associated with one video stream.</dd> <dt>cuepoints</dt> <dd>A <strong>cuepoint</strong> represents an ad break that can be inserted into a live broadcast.</dd> </dl> <h2 id="api-use-cases" data-text="API use cases">API use cases</h2> <p>The list below suggests several ways to use the API in your application:</p> <ul> <li> <p>Schedule broadcasts and define broadcast settings. Your application could enable users to predefine broadcast settings and then select the settings to apply to a particular broadcast.</p> </li> <li> <p>Associate video streams and broadcasts.</p> </li> <li> <p>Enable broadcasters to define information about a broadcast and its video (using the <a href="/web/20211202095005/https://developers.google.com/youtube/v3">YouTube Data API</a>) at the same time.</p> </li> <li> <p>Simplify transitions between broadcast states (<code translate="no" dir="ltr">testing</code>, <code translate="no" dir="ltr">live</code>, etc.) and enable users to insert cuepoints.</p> </li> </ul> <h2 id="before-you-start" data-text="Before you start">Before you start</h2> <ol> <li> <p>You need a <a href="https://web.archive.org/web/20211202095005/https://www.google.com/accounts/NewAccount">Google Account</a> to access the <span class="notranslate">Google API Console</span>, request an API key, and register your application.</p> </li> <li> <p><a href="/web/20211202095005/https://developers.google.com/youtube/registering_an_application">Register your application</a> with Google so that it can submit API requests.</p> </li> <li> <p>After registering your application, select the <span class="notranslate">YouTube Data API</span> as one of the services that your application uses:</p> <p><ol style="list-style-type:lower-roman"> <li>Go to the <a class="notranslate" href="https://web.archive.org/web/20211202095005/https://console.developers.google.com/">API Console</a> and select the project that you just registered.</li> <li> Visit the <a href="https://web.archive.org/web/20211202095005/https://console.developers.google.com/apis/enabled">Enabled APIs page</a>. In the list of APIs, make sure the status is <b>ON</b> for the YouTube Data API v3 and, if you are a YouTube Content Partner, the YouTube Content ID API. </li> </ol></p> </li> <li> <p>Familiarize yourself with the core concepts of the JSON (JavaScript Object Notation) data format. JSON is a common, language-independent data format that provides a simple text representation of arbitrary data structures. For more information, see <a href="https://web.archive.org/web/20211202095005/http://json.org/">json.org</a>.</p> </li> </ol> <h2 id="Content_Partner_API" data-text="Authorizing API requests">Authorizing API requests</h2> <p>As noted above, the Live Streaming API uses functionality that is technically part of either the YouTube Data API or the YouTube Content ID API. You can use the Content ID API to provide YouTube with metadata, ownership information, and policy information for your assets. (A live video broadcast is an example of an asset.) The API also lets you claim videos and set ad policies for your videos.</p> <p>This section explains the authorization requirements for requests to the <span class="notranslate">Content ID API</span>, which are different from the requirements for authorizing other <span class="notranslate">Live Streaming API</span> requests.</p> <dl> <dt>Calling the <span class="notranslate">Data API</span></dt> <dd>The API request must be authorized by the Google Account that owns the broadcasting YouTube channel.</dd> <dt>Calling the <span class="notranslate">Content ID API</span></dt> <dd>The API request must be authorized by a Google Account that is linked to the content owner that owns the broadcasting YouTube channel.</dd> </dl> <h2 id="resources" data-text="Resources and resource types">Resources and resource types</h2> <p>A resource is an individual data entity with a unique identifier. The table below describes the different types of resources that you will interact with using the <span class="notranslate">Live Streaming API</span>. Technically, all of these resources are actually defined as part of either the <a class="notranslate" href="/web/20211202095005/https://developers.google.com/youtube/v3">YouTube Data API</a> or the <a class="notranslate" href="/web/20211202095005/https://developers.google.com/youtube/partner">YouTube Content ID API</a>. However, the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts">liveBroadcast</a></code>, <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveStreams">liveStream</a></code>, and <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveCuepoints">liveCuepoint</a></code> resources are only used to create and manage live events.</p> <table class="responsive"> <tr> <th colspan="2">Resources</th> </tr> <tr> <td><code translate="no" dir="ltr"><strong>liveBroadcast</code></strong></td> <td>Contains information about an event that you are broadcasting on YouTube. A <code translate="no" dir="ltr">liveBroadcast</code> resource is an extension of a YouTube video resource and sets video metadata that would be pertinent to a live broadcast but not to other YouTube videos.<br/><br/>As such, a <code translate="no" dir="ltr">liveBroadcast</code> resource corresponds to exactly one YouTube video resource. In fact, the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts">liveBroadcast</a></code> resource and the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/docs/videos">video</a></code> resource share the same ID. And after creating the broadcast using the Live Streaming API, you can use the YouTube Data API to provide additional metadata about the video.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>liveStream</code></strong></td> <td>Contains information about the video stream that you are transmitting to YouTube. The stream provides the content that will be broadcast to YouTube users. Once created, a <code translate="no" dir="ltr">liveStream</code> resource can be bound to exactly one <code translate="no" dir="ltr">liveBroadcast</code> resource. (Similarly, the <code translate="no" dir="ltr">liveBroadcast</code> resource can only be bound to one <code translate="no" dir="ltr">liveStream</code> resource.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>liveCuepoint</code></strong></td> <td>Starts an ad break in the broadcast video stream.<br/><br/><strong>Note:</strong> The API command for controlling cuepoints is actually part of the YouTube Content ID API and has different authorization requirements than requests to manage <code translate="no" dir="ltr">liveBroadcast</code> and <code translate="no" dir="ltr">liveStream</code> resources.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>video</code></strong></td> <td>Represents a single YouTube video. As noted above, a <code translate="no" dir="ltr">liveBroadcast</code> resource is an extension of a <code translate="no" dir="ltr">video</code> resource. You can use the YouTube Data API to update metadata about the video, such as the recording location or the regions where the broadcast will be viewable.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>videoAdvertisingOptions</code></strong></td> <td>Defines the advertising settings for a video (or broadcast). You use the <span class="notranslate">YouTube Content ID API</span> to set advertising options.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>asset</code></strong></td> <td>Represents a piece of intellectual property, such as a movie or an episode of a show. In this case, the broadcast video is the asset. You will use the <span class="notranslate">YouTube Content ID API</span> to create and manage <code translate="no" dir="ltr">asset</code> resources.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>claim</code></strong></td> <td>Links a video to an asset that the video matches. You create a claim, using the <span class="notranslate">YouTube Content ID API</span>, to identify yourself as the owner of the broadcast video.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>policy</code></strong></td> <td>Defines rules that specify the circumstances under which you want your content to be viewable on YouTube or blocked from appearing on YouTube. You need to apply a policy to your broadcast video and can also specify a policy that YouTube will apply to user-uploaded videos that match your broadcast video.</td> </tr> </table> <h3 id="supported-operations" data-text="Supported operations">Supported operations</h3> <p>The following table shows the different methods that the API supports:</p> <table class="responsive"> <tr> <th colspan="2">Operations</th> </tr> <tr> <td><code translate="no" dir="ltr"><strong>list</strong></code></td> <td>Retrieves (<code translate="no" dir="ltr">GET</code>) a list of zero or more resources.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>insert</strong></code></td> <td>Creates (<code translate="no" dir="ltr">POST</code>) a new resource.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>update</strong></code></td> <td>Modifies (<code translate="no" dir="ltr">PUT</code>) an existing resource to reflect data in your request.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>bind</strong></code></td> <td>Links a <code translate="no" dir="ltr">liveBroadcast</code> resource with a <code translate="no" dir="ltr">liveStream</code> resource or removes such a link.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>transition</strong></code></td> <td>Changes the status of a <code translate="no" dir="ltr">liveBroadcast</code> resource and initiates any processes associated with the new status. For example, when you transition a broadcast's status to <code translate="no" dir="ltr">testing</code>, YouTube starts to transmit video to that broadcast's monitor stream.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>control</strong></code></td> <td>Toggles the display settings for a slate that displays in the broadcast stream for a broadcast that is already in progress.</td> </tr> <tr> <td><code translate="no" dir="ltr"><strong>delete</strong></code></td> <td>Removes (<code translate="no" dir="ltr">DELETE</code>) a specific resource.</td> </tr> </table> <p>The table below identifies the operations that are supported for different types of resources. Operations that insert, update, or delete resources always require <a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/authentication">user authorization</a>. In some cases, <code translate="no" dir="ltr">list</code> methods support both authorized and unauthorized requests, where unauthorized requests only retrieve public data while authorized requests can also retrieve information that is restricted to the currently authenticated user.</p> <table wborder="1"> <thead> <th colspan="8">Supported Operations</th> </thead> <tr> <td></td> <td><strong><span class="apimethod notranslate">list</span></strong></td> <td><strong><span class="apimethod notranslate">insert</span></strong></td> <td><strong><span class="apimethod notranslate">update</span></strong></td> <td><strong><span class="apimethod notranslate">bind</span></strong></td> <td><strong><span class="apimethod notranslate">transition</span></strong></td> <td><strong><span class="apimethod notranslate">control</span></strong></td> <td><strong><span class="apimethod notranslate">delete</span></strong></td> </tr> <tr> <td><b>liveBroadcast</b></td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td><b>liveStream</b></td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> <td><span class="compare-no"></span></td> <td><span class="compare-no"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td><b>liveCuepoint</b></td> <td><span class="compare-no"></span></td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> <td><span class="compare-no"></span></td> <td><span class="compare-no"></span></td> <td><span class="compare-no"></span></td> <td><span class="compare-no"></span></td> </tr> </table> <h2 id="partial" data-text="Partial resources">Partial resources</h2> <p>The API allows, and actually requires, the retrieval of partial resources so that applications avoid transferring, parsing, and storing unneeded data. This approach also ensures that the API uses network, CPU, and memory resources more efficiently.</p> <p>The <code translate="no" dir="ltr">part</code> parameter is a required parameter for any API request that retrieves or returns a <span class="notranslate">YouTube Data API</span> resource. The parameter identifies one or more top-level (non-nested) resource properties that should be included in an API response. For example, a <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveStreams#resource">liveStream</a></code> resource has the following parts:</p> <ul style="list-style-type:none"> <li><code translate="no" dir="ltr">snippet</code></li> <li><code translate="no" dir="ltr">cdn</code></li> <li><code translate="no" dir="ltr">status</code></li> </ul> <p>All of these parts are objects that contain nested properties, and you can think of these objects as groups of metadata fields that the API server might (or might not) retrieve. As such, the <code translate="no" dir="ltr">part</code> parameter requires you to select the resource components that your application actually uses. This requirement serves two important purposes:</p> <ul> <li>It reduces latency by preventing the API server from spending time retrieving metadata fields that your application doesn't use.</li> <li>It reduces bandwidth usage by reducing (or eliminating) the amount of unnecessary data that your application might retrieve.</li> </ul> <p>Over time, as resources add more parts, these benefits will only increase since your application will not be requesting newly introduced properties that it doesn't support.</p> <h2 id="Best_Practices" data-text="Tips and best practices">Tips and best practices</h2> <h3 id="Claiming_Your_Content" data-text="Claim your content">Claim your content</h3> <p>If you would like to show ads during your broadcast, you need to claim the broadcast video before the event begins. To claim content, you must be a <a href="https://web.archive.org/web/20211202095005/https://www.youtube.com/partner">YouTube Content Partner</a> participating in the <a class="notranslate" href="https://web.archive.org/web/20211202095005/http://www.youtube.com/t/contentid">Content ID</a> program.</p> <p>The process for claiming your live broadcast video is different than the normal process for claiming a video. When claiming live video, you need to create your claim before the video actually exists. The API does support this, and the <a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/life-of-a-broadcast#Claim_Your_Content">life of a broadcast</a> document explains the <a class="notranslate" href="/web/20211202095005/https://developers.google.com/youtube/partner">YouTube Content ID API</a> calls that enable you to create your claim.</p> <h3 id="Previewing_and_Testing" data-text="Preview and test your content">Preview and test your content</h3> <p>Upon receiving your inbound video stream, YouTube can then broadcast that video on two different outbound streams:</p> <ul> <li> <p>The <strong>monitor stream</strong> enables you to preview (and test) your video broadcast. It is a private stream that is only accessible to you. You can only transition a broadcast to the <code translate="no" dir="ltr">testing</code> phase if the broadcast's monitor stream is enabled. The monitor stream does not show ad breaks.</p> </li> <li> <p>The <strong>broadcast stream</strong> is the stream visible to your audience. You can set the broadcast's privacy status to either <code translate="no" dir="ltr">public</code>, <code translate="no" dir="ltr">private</code>, or <code translate="no" dir="ltr">unlisted</code>. (A private broadcast is only visible to users who have been explicitly invited to watch it, while an unlisted broadcast is visible to anyone with a link to view it.)</p> <p>You can choose to delay the broadcast stream so that it does not run concurrently with the monitor stream. By delaying the broadcast stream, you can have more fine-grained control over the time that you insert cuepoints into the broadcast.</p> <p>However, delaying the broadcast stream makes it difficult for your live presenters to interact with your viewing audience. In addition, delaying the broadcast increases the likelihood that viewers will discover key details about the event from sources other than your broadcast. For example, if you are broadcasting a sporting event on a 60-second delay, viewers might learn about critical moments in the event from other real-time news sources before actually seeing them in the broadcast.</p> </li> </ul> <p>YouTube recommends that you enable the monitor stream for your broadcast so that you can test your content. You should choose whether to also delay your broadcast based on your desire to control timing of cuepoints as opposed to your desire to interact with your audience or provide real-time coverage of an event.</p> <h3 id="Controlling_Your_Broadcast_Stream_Content" data-text="Control your broadcast stream content">Control your broadcast stream content</h3> <p>The <span class="notranslate">YouTube Live Streaming API</span> provides two ways to show users content other than your broadcast video for a broadcast that is in progress:</p> <ul> <li> <p>A <strong>slate</strong> is a static image that displays in the video player instead of the broadcast video. The slate can be enabled or disabled by calling the <code translate="no" dir="ltr">liveBroadcasts.control</code> method. While it is enabled, viewers cannot see or hear your broadcast content.</p> <p>YouTube selects the image that displays while the slate is enabled, and the same image displays in all regions and in all video players.</p> </li> <li> <p>A <strong>cuepoint</strong> indicates that an ad break is starting in the broadcast. During your broadcast, you can use the API's <code translate="no" dir="ltr">liveCuepoints.insert</code> method to insert those breaks into your live broadcast.</p> </li> </ul> <p>From the end user's perspective, ads and slates behave differently in two important ways, which are described below:</p> <ol> <li> <p>An ad break has a predefined length of time, which you set using the <code translate="no" dir="ltr">liveCuepoint</code> resource's <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveCuepoints#settings.durationSecs">settings.durationSecs</a></code> property. After the ad concludes, viewers return to the live broadcast.</p> <p>On the other hand, a slate displays until you explicitly indicate that it should be removed. You call the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/control">liveBroadcasts.control</a></code> method to toggle the display settings for the slate, and viewers return to your broadcast after you call that method to disable the slate.</p> </li> <li> <p>When you insert an ad break, an ad only plays in the video player for viewers who are watching the broadcast when the cuepoint is inserted. An ad does not run when viewers refresh the page where the broadcast is playing or when visitors start watching the broadcast after the cuepoint is inserted.</p> <p>However, when you enable a slate, the slate displays in the video player instead of your broadcast stream for all viewers. Viewers who refresh the page where the broadcast is playing and new viewers will also see the slate.</p> </li> </ol> <p>With those differences in mind, it is very important to note that ad breaks and slates are not mutually exclusive. In fact, if you are inserting an ad break, you are encouraged to also display a slate at the same time. By doing so, you ensure that viewers who start watching your broadcast while an ad break is in progress will see the slate instead of your broadcast stream. This approach provides you with the most control over the time that the broadcast break ends and, consequently, over the time that viewers return to your broadcast.</p> <p>The sequence of steps below reflects the best practice for inserting an ad break during your broadcast:</p> <ol> <li>Call the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/control">liveBroadcasts.control</a></code> method to display a slate in the video player instead of your broadcast.</li> <li><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveCuepoints">Insert a cuepoint</a> to start your ad break. The video player shows an ad to any viewers already watching the broadcast. New viewers see the slate inserted in step 1.</li> <li>The ad ends. Viewers return to the slate inserted in step 1.</li> <li>Call the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/control">liveBroadcasts.control</a></code> method to remove the slate. Viewers return to your broadcast.</li> </ol> <h4 id="Setting_Time_Offsets" data-text="Set time offsets">Set time offsets</h4> <p>When enabling a slate or inserting a cuepoint, you can specify that the slate or cuepoint should be inserted right away or that it should be inserted at a specific point in the broadcast. Your options depend on whether the broadcast stream for your video is delayed.</p> <ul> <li> <p>If your broadcast stream is not delayed, then your only option is to enable the slate or insert the cuepoint immediately:</p> <p><ul> <li>To enable a slate, call the <code translate="no" dir="ltr">liveBroadcasts.control</code> method and set the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/control#displaySlate">displaySlate</a></code> parameter's value to <code translate="no" dir="ltr">true</code>. Do not include the <code translate="no" dir="ltr">offsetTimeMs</code> parameter in your request.</li> <li>To insert a cuepoint, call the <code translate="no" dir="ltr">liveCuepoints.insert</code> method. In the resource sent in the request, either set the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveCuepoints#settings.offsetTimeMs">settings.offsetTimeMs</a></code> property's value to <code translate="no" dir="ltr">0</code> or do not specify a value for that property.</p> </ul></p> <p class="special"><strong>Important:</strong> In fact, viewers do not see the resulting slate or ad content immediately. There may be a delay of around 30 seconds before the slate or ad content is visible to users. During that delay, your broadcast stream will still be visible to your viewers, and you need to watch the broadcast stream to determine when the slate or ad content actually displays instead of your monitor stream.</p> </li> <li> <p>If your broadcast stream is delayed, then you can either insert the slate or cuepoint immediately as described above, or you can specify a time offset to determine when the slate or ad will display. Rather than instructing YouTube to enable the slate or insert the cuepoint as soon as possible, the time offset specifies a point in your broadcast when viewers should see a slate or an ad.</p> <p>The offset value is measured from the beginning of the monitor stream for your broadcast. Note that if your broadcast has a testing phase, then the monitor stream starts when your broadcast transitions to the <code translate="no" dir="ltr">testing</code> status. Otherwise, your monitor stream starts when your broadcast transitions to the <code translate="no" dir="ltr">live</code> status.</p> <p><ul> <li>When enabling a slate, use the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/control#offsetTimeMs">offsetTimeMs</a></code> parameter to specify a time offset.</li> <li>When inserting a cuepoint, set the <code translate="no" dir="ltr">liveCuepoint</code> resource's <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveCuepoints#settings.offsetTimeMs">settings.offsetTimeMs</a></code> property to the desired offset.</li> </ul></p> </li> </ul> <h5 id="Calculating_Offset_Value" data-text="Calculate the time offset value">Calculate the time offset value</h5> <p>To retrieve the offset value, call the YouTube Player API's <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/iframe_api_reference">getCurrentTime</a></code> function for the player that is playing the monitor stream. Use the retrieved value to insert the cuepoint in the broadcast stream at that time.</p> <p>The possible values for the offset time can be calculated as the following range:</p> <pre translate="no" dir="ltr">[(elapsed_time - broadcast_delay + Δ), (elapsed_time - Δ)]</pre> <p>The <code translate="no" dir="ltr"><strong>Δ</strong></code> is a five-second buffer at the beginning and end of the possible time offsets when YouTube cannot precisely insert a cuepoint. For example:</p> <p><ul> <li>A broadcast has a five-minute testing phase.</li> <li>The broadcast stream is delayed 60 seconds after the monitor stream.</li> <li>The broadcaster is inserting the cuepoint four minutes after the broadcast transitions to <code translate="no" dir="ltr">live</code> status. (This is three minutes after the broadcast stream becomes visible.)</li> </ul></p> <p>In this case, the possible range of offset times is <code translate="no" dir="ltr">[(485,000), (535,000)]</code>.</p> <p>These times are specified in milliseconds, and are calculated using the following values:</p> <p><ul> <li><code class="translate-ok" translate="no" dir="ltr">elapsed_time=540000</code> – The monitor stream has run for nine minutes (540 seconds, 540000 milliseconds) when the <code translate="no" dir="ltr">liveCuepoints.insert</code> method is called.</li> <li><code class="translate-ok" translate="no" dir="ltr">broadcast_delay=60000</code> – The broadcast stream is delayed by 60 seconds, or 60000 milliseconds.</li> <li><code translate="no" dir="ltr">Δ=5000</code> – The five-second buffer when the cuepoint cannot be reliably inserted.</li> </ul></p> <h3 id="Error_Handling" data-text="Troubleshooting and error handling">Troubleshooting and error handling</h3> <p>The following guidelines explain how to resolve specific problems that may arise. Also refer to the <a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/errors">error documentation</a> for lists of errors that each API method might return.</p> <ul> <li> <p>When a broadcast transitions from one <a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts#status.lifeCycleStatus">status</a> to another, it may temporarily be assigned with another status while YouTube completes the actions associated with the transition. For example, if you send a <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/transition">liveBroadcasts.transition</a></code> request to change a broadcast's status from <code translate="no" dir="ltr">ready</code> to <code translate="no" dir="ltr">testing</code>, YouTube will set the broadcast's status to <code translate="no" dir="ltr">testStarting</code> and then complete the actions associated with the status change. When all of those actions have been completed, YouTube will update the broadcast's status to <code translate="no" dir="ltr">testing</code>, thereby indicating that the transition is complete.</p> <p>If a broadcast becomes stuck with a <code translate="no" dir="ltr">testStarting</code> or <code translate="no" dir="ltr">liveStarting</code> status, you need to call the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/delete">liveBroadcasts.delete</a></code> method and delete the broadcast. Then create a new broadcast, bind it to your live stream, and continue with the testing process.</p> <p>As noted in the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/transition">liveBroadcasts.transition</a></code> method's documentation, you should confirm that the value of the <code translate="no" dir="ltr"><a href="/web/20211202095005/https://developers.google.com/youtube/v3/live/docs/liveStreams#status.streamStatus">status.streamStatus</a></code> property for the stream bound to your broadcast is <code translate="no" dir="ltr">active</code> before calling that method.</p> </li> </ul> </div> <devsite-recommendations display="in-page" hidden yield> </devsite-recommendations> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-recommendations id="recommendations-link" yield></devsite-recommendations> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://web.archive.org/web/20211202095005/https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://web.archive.org/web/20211202095005/https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2020-07-29 UTC.</p> </devsite-content-footer> <div class="devsite-content-data"> <template class="devsite-thumb-rating-down-categories"> [{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Missing the information I need" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Too complicated / too many steps" },{ "type": "thumb-down", "id": "outOfDate", "label":"Out of date" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Samples / code issue" },{ "type": "thumb-down", "id": "otherDown", "label":"Other" }] </template> <template class="devsite-thumb-rating-up-categories"> [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Easy to understand" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Solved my problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Other" }] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> <nav class="devsite-footer-promos nocontent" aria-label="Promotions"> <ul class="devsite-footer-promos-list"> <li class="devsite-footer-promo"> <a href="https://web.archive.org/web/20211202095005/http://apiblog.youtube.com/" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 1)"> <img class="devsite-footer-promo-icon" src="https://web.archive.org/web/20211202095005im_/https://www.gstatic.com/images/icons/material/product/2x/blogger_64dp.png" loading="lazy" alt="Blog"> Blog </a> <div class="devsite-footer-promo-description">The latest news on the YouTube API blog</div> </li> <li class="devsite-footer-promo"> <a href="https://web.archive.org/web/20211202095005/https://github.com/youtube/api-samples" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 2)"> <img class="devsite-footer-promo-icon" src="/web/20211202095005im_/https://developers.google.com/site-assets/logo-github.svg" loading="lazy" alt="GitHub"> GitHub </a> <div class="devsite-footer-promo-description">Find API code samples and other YouTube open-source projects.</div> </li> <li class="devsite-footer-promo"> <a href="https://web.archive.org/web/20211202095005/https://issuetracker.google.com/issues/new?component=186600&template=874803" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 3)"> <img class="devsite-footer-promo-icon" src="/web/20211202095005im_/https://developers.google.com/site-assets/developers_64dp.png" loading="lazy" alt="Issue Tracker"> Issue Tracker </a> <div class="devsite-footer-promo-description">Something wrong? Send us a bug report!</div> </li> <li class="devsite-footer-promo"> <a href="https://web.archive.org/web/20211202095005/http://stackoverflow.com/questions/ask?tags=youtube-livestreaming-api" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 4)"> <img class="devsite-footer-promo-icon" src="/web/20211202095005im_/https://developers.google.com/site-assets/logo-stack-overflow.svg" loading="lazy" alt="Stack Overflow"> Stack Overflow </a> <div class="devsite-footer-promo-description">Ask a question under the youtube-api tag</div> </li> <li class="devsite-footer-promo"> <a href="https://web.archive.org/web/20211202095005/https://www.youtube.com/user/YouTubeDev" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 5)"> <img class="devsite-footer-promo-icon" src="/web/20211202095005im_/https://developers.google.com/site-assets/logo-youtube.svg" loading="lazy" alt="Videos"> Videos </a> <div class="devsite-footer-promo-description">Check out the YouTube Developer Relations team's YouTube channel</div> </li> </ul> </nav> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Tools</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://web.archive.org/web/20211202095005/https://script.google.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> Script Editor </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://web.archive.org/web/20211202095005/https://script.google.com/dashboard" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> Service Health Dashboard </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Issue Tracker</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://web.archive.org/web/20211202095005/https://issuetracker.google.com/issues/new?component=186600&template=874803" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> File a bug </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://web.archive.org/web/20211202095005/https://issuetracker.google.com/issues/new?component=186600&template=874803" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> Request a feature </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://web.archive.org/web/20211202095005/https://issuetracker.google.com/issues?q=componentid:186600" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)"> See open issues </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Product Info</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/web/20211202095005/https://developers.google.com/youtube/terms" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> Terms of Service </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/web/20211202095005/https://developers.google.com/youtube/branding_guidelines" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> Branding Guidelines </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/web/20211202095005/https://developers.google.com/youtube/creating_monetizable_applications" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)"> Monetization Guidelines </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/web/20211202095005/https://developers.google.com/youtube/youtube-api-list" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)"> APIs subject to Deprecation Policy </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://web.archive.org/web/20211202095005/https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <img class="devsite-footer-sites-logo" src="https://web.archive.org/web/20211202095005im_/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095/developers/images/lockup-developers.svg" loading="lazy" alt="Google Developers"> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//web.archive.org/web/20211202095005/https://developer.android.com/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link"> Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//web.archive.org/web/20211202095005/https://developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link"> Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//web.archive.org/web/20211202095005/https://firebase.google.com/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link"> Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//web.archive.org/web/20211202095005/https://cloud.google.com/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link"> Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="/web/20211202095005/https://developers.google.com/products" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link"> All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/web/20211202095005/https://developers.google.com/terms/site-terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link"> Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//web.archive.org/web/20211202095005/https://policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link"> Privacy </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the Google Developers newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="//web.archive.org/web/20211202095005/https://services.google.com/fb/forms/googledevelopersnewsletter/?utm_medium=referral&utm_source=google-products&utm_team=googledevs&utm_campaign=201611-newsletter-launch" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link"> Subscribe </a> </li> </ul> <devsite-language-selector> <devsite-select class="devsite-language-selector-menu"> <select aria-label="Select your language preference." class="devsite-language-selector-select" name="language" track-name="click" track-type="languageSelector"> <option>Language</option> <option value="en" lang="en"> English </option> <option value="id" lang="id"> Bahasa Indonesia </option> <option value="de" lang="de"> Deutsch </option> <option value="es" lang="es"> Español </option> <option value="fr" lang="fr"> Français </option> <option value="pt_br" lang="pt_br"> Português – Brasil </option> <option value="ru" lang="ru"> Русский </option> <option value="zh_cn" lang="zh_cn"> 中文 – 简体 </option> <option value="ja" lang="ja"> 日本語 </option> <option value="ko" lang="ko"> 한국어 </option> </select> </devsite-select> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar> </devsite-snackbar> <devsite-tooltip></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics enable-analytics-iframe> <script type="application/json" analytics>[{"gaid": "UA-24532603-1", "dimensions": {"dimension3": false, "dimension1": "Signed out", "dimension6": "en", "dimension4": "YouTube Live Streaming API", "dimension11": false, "dimension5": "en"}, "metrics": {"ratings_count": "metric2", "ratings_value": "metric1"}}]</script> <script type="application/json" gtm>{"parameters": {"freeTrialEligibleUser": "False", "internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "article", "projectName": "YouTube Live Streaming API", "signedIn": "False", "tenant": "developers", "recommendations": {"sourcePage": "", "sourceType": 0, "sourceRank": 0, "sourceIdenticalDescriptions": 0, "sourceTitleWords": 0, "sourceDescriptionWords": 0, "experiment": ""}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="QSQKsQ0l5iMpaYmFI+aWcqyzcCKs2R"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://web.archive.org/web/20211202095005/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095/developers/js/app_loader.js', '[1,"en",null,"/js/devsite_app_module.js","https://web.archive.org/web/20211202095005/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095","https://web.archive.org/web/20211202095005/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095/developers","https://web.archive.org/web/20211202095005/https://developers-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/developers/manifest.json","https://web.archive.org/web/20211202095005/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095/images/video-placeholder.svg","https://web.archive.org/web/20211202095005/https://www.gstatic.com/devrel-devsite/prod/v70c5e166a48b2c4e0a0d27f0b12c8c47a28a215b513b1100ea89abd1a9e8a095/developers/images/favicon.png","https://web.archive.org/web/20211202095005/https://fonts.googleapis.com/css?family=Google+Sans_old:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,40,45,50,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,111,112,113,115,116,117,118,120,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,141,142,144,147,148,149,150,151,152,153,154,157,159,161,164,165,168,173],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","developers.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o"]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html><!-- FILE ARCHIVED ON 09:50:05 Dec 02, 2021 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 08:23:19 Nov 25, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.541 exclusion.robots: 0.038 exclusion.robots.policy: 0.028 esindex: 0.012 cdx.remote: 23.83 LoadShardBlock: 141.942 (3) PetaboxLoader3.datanode: 185.697 (4) load_resource: 345.209 PetaboxLoader3.resolve: 211.138 -->