<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="youtube_v3.html">YouTube Data API v3</a> . <a href="youtube_v3.liveBroadcasts.html">liveBroadcasts</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#bind">bind(id, part, onBehalfOfContentOwnerChannel=None, streamId=None, onBehalfOfContentOwner=None, x__xgafv=None)</a></code></p>
<p class="firstline">Bind a broadcast to a stream.</p>
<p class="toc_element">
  <code><a href="#control">control(id, part, onBehalfOfContentOwner=None, offsetTimeMs=None, displaySlate=None, walltime=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</a></code></p>
<p class="firstline">Slate and recording control of the live broadcast.</p>
<p class="toc_element">
  <code><a href="#delete">delete(id, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</a></code></p>
<p class="firstline">Delete a given broadcast.</p>
<p class="toc_element">
  <code><a href="#insert">insert(part, body=None, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</a></code></p>
<p class="firstline">Inserts a new stream for the authenticated user.</p>
<p class="toc_element">
  <code><a href="#list">list(part, pageToken=None, broadcastType=None, maxResults=None, broadcastStatus=None, mine=None, onBehalfOfContentOwnerChannel=None, id=None, onBehalfOfContentOwner=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieve the list of broadcasts associated with the given channel.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#transition">transition(id, broadcastStatus, part, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</a></code></p>
<p class="firstline">Transition a broadcast to a given status.</p>
<p class="toc_element">
  <code><a href="#update">update(part, body=None, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing broadcast for the authenticated user.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="bind">bind(id, part, onBehalfOfContentOwnerChannel=None, streamId=None, onBehalfOfContentOwner=None, x__xgafv=None)</code>
  <pre>Bind a broadcast to a stream.

Args:
  id: string, Broadcast to bind to the stream (required)
  part: string, The &lt;code&gt;&lt;strong&gt;part&lt;/strong&gt;&lt;/code&gt; parameter specifies a
comma-separated list of one or more &lt;code&gt;liveBroadcast&lt;/code&gt; resource
properties that the API response will include. The &lt;code&gt;part&lt;/code&gt; names
that you can include in the parameter value are &lt;code&gt;id&lt;/code&gt;,
&lt;code&gt;snippet&lt;/code&gt;, &lt;code&gt;contentDetails&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;. (required) (repeated)
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  streamId: string, Stream to bind, if not set unbind the current one.
  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A &lt;code&gt;&lt;strong&gt;liveBroadcast&lt;/strong&gt;&lt;/code&gt; resource represents an event
      # that will be streamed, via live video, on YouTube.
    &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the broadcast.
    &quot;statistics&quot;: { # Statistics about the live broadcast. These represent a snapshot of the values # The &lt;code&gt;statistics&lt;/code&gt; object contains info about the event&#x27;s current
        # stats. These include concurrent viewers and total chat count. Statistics
        # can change (in either direction) during the lifetime of an event.
        # Statistics are only returned while the event is live.
        # at the time of the request. Statistics are only returned for live broadcasts.
      &quot;totalChatCount&quot;: &quot;A String&quot;, # The total number of live chat messages currently on the broadcast. The
          # property and its value will be present if the broadcast is public, has
          # the live chat feature enabled, and has at least one message. Note that
          # this field will not be filled after the broadcast ends. So this property
          # would not identify the number of chat messages for an archived video of a
          # completed live broadcast.
    },
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;snippet&quot;: { # Basic broadcast information. # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the event,
        # including its title, description, start time, and end time.
      &quot;scheduledStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to start. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
          # is publishing the broadcast.
      &quot;description&quot;: &quot;A String&quot;, # The broadcast&#x27;s description. As with the &lt;code&gt;title&lt;/code&gt;, you can set
          # this field by modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#snippet.description&quot;&gt;description&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;title&quot;: &quot;A String&quot;, # The broadcast&#x27;s title. Note that the broadcast represents exactly one
          # YouTube video. You can set this field by modifying the broadcast resource
          # or by setting the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/docs/videos#snippet.title&quot;&gt;title&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the broadcast was added to YouTube&#x27;s live broadcast
          # schedule. The value is specified in
          # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;liveChatId&quot;: &quot;A String&quot;, # The id of the live chat for this broadcast.
      &quot;isDefaultBroadcast&quot;: True or False, # Indicates whether this broadcast is the default broadcast.
          # Internal only.
      &quot;actualEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually ended. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;complete&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;scheduledEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to end. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;actualStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually started. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;live&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;thumbnails&quot;: { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the broadcast. For each nested
          # object in this object, the key is the name of the thumbnail image, and
          # the value is an object that contains other information about the
          # thumbnail.
        &quot;medium&quot;: { # A thumbnail is an image representing a YouTube resource. # The medium quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;standard&quot;: { # A thumbnail is an image representing a YouTube resource. # The standard quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;default&quot;: { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;maxres&quot;: { # A thumbnail is an image representing a YouTube resource. # The maximum resolution quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;high&quot;: { # A thumbnail is an image representing a YouTube resource. # The high quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
      },
    },
    &quot;kind&quot;: &quot;youtube#liveBroadcast&quot;, # Identifies what kind of resource this is. Value: the fixed string
        # &lt;code&gt;&quot;youtube#liveBroadcast&quot;&lt;/code&gt;.
    &quot;contentDetails&quot;: { # Detailed settings of a broadcast. # The &lt;code&gt;contentDetails&lt;/code&gt; object contains information about the
        # event&#x27;s video content, such as whether the content can be shown in an
        # embedded video player or if it will be archived and therefore available
        # for viewing after the event has concluded.
      &quot;boundStreamId&quot;: &quot;A String&quot;, # This value uniquely identifies the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams&quot;&gt;live stream&lt;/a&gt;&lt;/code&gt;
          # bound to the broadcast.
      &quot;closedCaptionsType&quot;: &quot;A String&quot;,
      &quot;startWithSlate&quot;: True or False, # This setting indicates whether the broadcast should automatically begin
          # with an &lt;a
          # href=&quot;/youtube/v3/live/getting-started#Displaying_Slates&quot;&gt;in-stream
          # slate&lt;/a&gt; when you update the broadcast&#x27;s status to &lt;code&gt;live&lt;/code&gt;.
          # After updating the status, you then need to send a
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveCuepoints/insert&quot;&gt;liveCuepoints.insert&lt;/a&gt;&lt;/code&gt;
          # request that sets the cuepoint&#x27;s &lt;code&gt;eventState&lt;/code&gt; to
          # &lt;code&gt;end&lt;/code&gt; to remove the in-stream slate and make your broadcast
          # stream visible to viewers.
      &quot;boundStreamLastUpdateTimeMs&quot;: &quot;A String&quot;, # The date and time that the live stream referenced by
          # &lt;code&gt;boundStreamId&lt;/code&gt; was last updated.
      &quot;enableDvr&quot;: True or False, # This setting determines whether viewers can access DVR controls while
          # watching the video. DVR controls enable the viewer to control the video
          # playback experience by pausing, rewinding, or fast forwarding content.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must set the value to &lt;code&gt;true&lt;/code&gt;
          # and also set the &lt;code&gt;enableArchive&lt;/code&gt; property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want to make playback available immediately
          # after the broadcast ends.
      &quot;enableEmbed&quot;: True or False, # This setting indicates whether the broadcast video can be played in an
          # embedded player. If you choose to archive the video (using the
          # &lt;code&gt;enableArchive&lt;/code&gt; property), this setting will also apply to
          # the archived video.
      &quot;enableClosedCaptions&quot;: True or False, # This setting indicates whether HTTP POST closed captioning is enabled for
          # this broadcast. The ingestion URL of the closed captions is returned
          # through the liveStreams API.  This is mutually exclusive with using the
          # &lt;code&gt;closed_captions_type&lt;/code&gt; property, and is equivalent to setting
          # &lt;code&gt;closed_captions_type&lt;/code&gt; to CLOSED_CAPTIONS_HTTP_POST.
      &quot;recordFromStart&quot;: True or False, # Automatically start recording after the event goes live.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must also set the &lt;code&gt;enableDvr&lt;/code&gt;
          # property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want the playback to be available immediately
          # after the broadcast ends. If you set this property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; but do not also set the &lt;code&gt;enableDvr&lt;/code&gt; property
          # to &lt;code&gt;true&lt;/code&gt;, there may be a delay of around one day before the
          # archived video will be available for playback.
      &quot;monitorStream&quot;: { # Settings and Info of the monitor stream # The &lt;code&gt;monitorStream&lt;/code&gt; object contains information about the
          # monitor stream, which the broadcaster can use to review the event
          # content before the broadcast stream is shown publicly.
        &quot;embedHtml&quot;: &quot;A String&quot;, # HTML code that embeds a player that plays the monitor stream.
        &quot;broadcastStreamDelayMs&quot;: 42, # If you have set the
            # &lt;code&gt;&lt;a href=&quot;#enableMonitorStream&quot;&gt;enableMonitorStream&lt;/a&gt;&lt;/code&gt;
            # property to &lt;code&gt;true&lt;/code&gt;, then this property determines the
            # length of the live broadcast delay.
        &quot;enableMonitorStream&quot;: True or False, # This value determines whether the monitor stream is enabled for the
            # broadcast. If the monitor stream is enabled, then YouTube will
            # broadcast the event content on a special stream intended only for
            # the broadcaster&#x27;s consumption. The broadcaster can use the stream
            # to review the event content and also to identify the optimal times
            # to insert cuepoints.&lt;br&gt;&lt;br&gt;
            # You need to set this value to &lt;code&gt;true&lt;/code&gt; if you intend to have
            # a broadcast delay for your event.&lt;br&gt;&lt;br&gt;
            # &lt;strong&gt;Note:&lt;/strong&gt; This property cannot be updated once the
            # broadcast is in the &lt;code&gt;testing&lt;/code&gt; or &lt;code&gt;live&lt;/code&gt; state.
      },
      &quot;enableContentEncryption&quot;: True or False, # This setting indicates whether YouTube should enable content encryption
          # for the broadcast.
      &quot;enableAutoStop&quot;: True or False, # This setting indicates whether auto stop is enabled for this broadcast.
          # The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          # This setting can only be used by Events.
      &quot;latencyPreference&quot;: &quot;A String&quot;, # If both this and enable_low_latency are set, they must match.
          # LATENCY_NORMAL should match enable_low_latency=false
          # LATENCY_LOW should match enable_low_latency=true
          # LATENCY_ULTRA_LOW should have enable_low_latency omitted.
      &quot;projection&quot;: &quot;A String&quot;, # The projection format of this broadcast. This defaults to
          # &lt;code&gt;rectangular&lt;/code&gt;.
      &quot;mesh&quot;: &quot;A String&quot;, # The mesh for projecting the video if &lt;code&gt;projection&lt;/code&gt; is
          # &lt;code&gt;mesh&lt;/code&gt;. The mesh value must be a UTF-8 string containing the
          # base-64 encoding of 3D mesh data that follows the &lt;a
          # href=&quot;https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md&quot;&gt;
          # Spherical Video V2 RFC specification&lt;/a&gt; for an mshp box, excluding the box
          # size and type but including the following four reserved zero bytes for the
          # version and flags.
      &quot;enableLowLatency&quot;: True or False, # Indicates whether this broadcast has low latency enabled.
      &quot;enableAutoStart&quot;: True or False, # This setting indicates whether auto start is enabled for this broadcast.
          #  The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #  This setting can only be used by Events.
    },
    &quot;status&quot;: { # Live broadcast state. # The &lt;code&gt;status&lt;/code&gt; object contains information about the event&#x27;s
        # status.
      &quot;selfDeclaredMadeForKids&quot;: True or False, # This field will be set to True if the creator declares the broadcast to be
          # kids only: go/live-cw-work.
      &quot;recordingStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s recording status.
      &quot;privacyStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s privacy status. Note that the broadcast represents
          # exactly one YouTube video, so the privacy settings are identical to
          # those supported for videos. In addition, you can set this field by
          # modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#status.privacyStatus&quot;
          # &gt;privacyStatus&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;lifeCycleStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s status. The status can be updated using the API&#x27;s
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveBroadcasts/transition&quot;
          # &gt;liveBroadcasts.transition&lt;/a&gt;&lt;/code&gt; method.
      &quot;liveBroadcastPriority&quot;: &quot;A String&quot;, # Priority of the live broadcast event (internal state).
      &quot;madeForKids&quot;: True or False, # Whether the broadcast is made for kids or not, decided by YouTube instead
          # of the creator. This field is read only.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="control">control(id, part, onBehalfOfContentOwner=None, offsetTimeMs=None, displaySlate=None, walltime=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</code>
  <pre>Slate and recording control of the live broadcast.
Support actions: slate on/off, recording start/stop/pause/resume.
Design doc: goto/yt-api-liveBroadcast-control

Args:
  id: string, Broadcast to operate. (required)
  part: string, The &lt;code&gt;&lt;strong&gt;part&lt;/strong&gt;&lt;/code&gt; parameter specifies a
comma-separated list of one or more &lt;code&gt;liveBroadcast&lt;/code&gt; resource
properties that the API response will include. The &lt;code&gt;part&lt;/code&gt; names
that you can include in the parameter value are &lt;code&gt;id&lt;/code&gt;,
&lt;code&gt;snippet&lt;/code&gt;, &lt;code&gt;contentDetails&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;. (required) (repeated)
  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  offsetTimeMs: string, The exact time when the actions (e.g. slate on) are executed.
It is an offset from the first frame of the monitor stream.
If not set, it means &quot;now&quot; or ASAP.
This field should not be set if the monitor stream is disabled,
otherwise an error will be returned.
  displaySlate: boolean, Whether display or hide slate.
  walltime: string, The wall clock time at which the action should be executed.
Only one of offset_time_ms and walltime may be set at a time.
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A &lt;code&gt;&lt;strong&gt;liveBroadcast&lt;/strong&gt;&lt;/code&gt; resource represents an event
      # that will be streamed, via live video, on YouTube.
    &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the broadcast.
    &quot;statistics&quot;: { # Statistics about the live broadcast. These represent a snapshot of the values # The &lt;code&gt;statistics&lt;/code&gt; object contains info about the event&#x27;s current
        # stats. These include concurrent viewers and total chat count. Statistics
        # can change (in either direction) during the lifetime of an event.
        # Statistics are only returned while the event is live.
        # at the time of the request. Statistics are only returned for live broadcasts.
      &quot;totalChatCount&quot;: &quot;A String&quot;, # The total number of live chat messages currently on the broadcast. The
          # property and its value will be present if the broadcast is public, has
          # the live chat feature enabled, and has at least one message. Note that
          # this field will not be filled after the broadcast ends. So this property
          # would not identify the number of chat messages for an archived video of a
          # completed live broadcast.
    },
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;snippet&quot;: { # Basic broadcast information. # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the event,
        # including its title, description, start time, and end time.
      &quot;scheduledStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to start. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
          # is publishing the broadcast.
      &quot;description&quot;: &quot;A String&quot;, # The broadcast&#x27;s description. As with the &lt;code&gt;title&lt;/code&gt;, you can set
          # this field by modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#snippet.description&quot;&gt;description&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;title&quot;: &quot;A String&quot;, # The broadcast&#x27;s title. Note that the broadcast represents exactly one
          # YouTube video. You can set this field by modifying the broadcast resource
          # or by setting the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/docs/videos#snippet.title&quot;&gt;title&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the broadcast was added to YouTube&#x27;s live broadcast
          # schedule. The value is specified in
          # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;liveChatId&quot;: &quot;A String&quot;, # The id of the live chat for this broadcast.
      &quot;isDefaultBroadcast&quot;: True or False, # Indicates whether this broadcast is the default broadcast.
          # Internal only.
      &quot;actualEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually ended. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;complete&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;scheduledEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to end. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;actualStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually started. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;live&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;thumbnails&quot;: { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the broadcast. For each nested
          # object in this object, the key is the name of the thumbnail image, and
          # the value is an object that contains other information about the
          # thumbnail.
        &quot;medium&quot;: { # A thumbnail is an image representing a YouTube resource. # The medium quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;standard&quot;: { # A thumbnail is an image representing a YouTube resource. # The standard quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;default&quot;: { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;maxres&quot;: { # A thumbnail is an image representing a YouTube resource. # The maximum resolution quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;high&quot;: { # A thumbnail is an image representing a YouTube resource. # The high quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
      },
    },
    &quot;kind&quot;: &quot;youtube#liveBroadcast&quot;, # Identifies what kind of resource this is. Value: the fixed string
        # &lt;code&gt;&quot;youtube#liveBroadcast&quot;&lt;/code&gt;.
    &quot;contentDetails&quot;: { # Detailed settings of a broadcast. # The &lt;code&gt;contentDetails&lt;/code&gt; object contains information about the
        # event&#x27;s video content, such as whether the content can be shown in an
        # embedded video player or if it will be archived and therefore available
        # for viewing after the event has concluded.
      &quot;boundStreamId&quot;: &quot;A String&quot;, # This value uniquely identifies the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams&quot;&gt;live stream&lt;/a&gt;&lt;/code&gt;
          # bound to the broadcast.
      &quot;closedCaptionsType&quot;: &quot;A String&quot;,
      &quot;startWithSlate&quot;: True or False, # This setting indicates whether the broadcast should automatically begin
          # with an &lt;a
          # href=&quot;/youtube/v3/live/getting-started#Displaying_Slates&quot;&gt;in-stream
          # slate&lt;/a&gt; when you update the broadcast&#x27;s status to &lt;code&gt;live&lt;/code&gt;.
          # After updating the status, you then need to send a
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveCuepoints/insert&quot;&gt;liveCuepoints.insert&lt;/a&gt;&lt;/code&gt;
          # request that sets the cuepoint&#x27;s &lt;code&gt;eventState&lt;/code&gt; to
          # &lt;code&gt;end&lt;/code&gt; to remove the in-stream slate and make your broadcast
          # stream visible to viewers.
      &quot;boundStreamLastUpdateTimeMs&quot;: &quot;A String&quot;, # The date and time that the live stream referenced by
          # &lt;code&gt;boundStreamId&lt;/code&gt; was last updated.
      &quot;enableDvr&quot;: True or False, # This setting determines whether viewers can access DVR controls while
          # watching the video. DVR controls enable the viewer to control the video
          # playback experience by pausing, rewinding, or fast forwarding content.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must set the value to &lt;code&gt;true&lt;/code&gt;
          # and also set the &lt;code&gt;enableArchive&lt;/code&gt; property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want to make playback available immediately
          # after the broadcast ends.
      &quot;enableEmbed&quot;: True or False, # This setting indicates whether the broadcast video can be played in an
          # embedded player. If you choose to archive the video (using the
          # &lt;code&gt;enableArchive&lt;/code&gt; property), this setting will also apply to
          # the archived video.
      &quot;enableClosedCaptions&quot;: True or False, # This setting indicates whether HTTP POST closed captioning is enabled for
          # this broadcast. The ingestion URL of the closed captions is returned
          # through the liveStreams API.  This is mutually exclusive with using the
          # &lt;code&gt;closed_captions_type&lt;/code&gt; property, and is equivalent to setting
          # &lt;code&gt;closed_captions_type&lt;/code&gt; to CLOSED_CAPTIONS_HTTP_POST.
      &quot;recordFromStart&quot;: True or False, # Automatically start recording after the event goes live.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must also set the &lt;code&gt;enableDvr&lt;/code&gt;
          # property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want the playback to be available immediately
          # after the broadcast ends. If you set this property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; but do not also set the &lt;code&gt;enableDvr&lt;/code&gt; property
          # to &lt;code&gt;true&lt;/code&gt;, there may be a delay of around one day before the
          # archived video will be available for playback.
      &quot;monitorStream&quot;: { # Settings and Info of the monitor stream # The &lt;code&gt;monitorStream&lt;/code&gt; object contains information about the
          # monitor stream, which the broadcaster can use to review the event
          # content before the broadcast stream is shown publicly.
        &quot;embedHtml&quot;: &quot;A String&quot;, # HTML code that embeds a player that plays the monitor stream.
        &quot;broadcastStreamDelayMs&quot;: 42, # If you have set the
            # &lt;code&gt;&lt;a href=&quot;#enableMonitorStream&quot;&gt;enableMonitorStream&lt;/a&gt;&lt;/code&gt;
            # property to &lt;code&gt;true&lt;/code&gt;, then this property determines the
            # length of the live broadcast delay.
        &quot;enableMonitorStream&quot;: True or False, # This value determines whether the monitor stream is enabled for the
            # broadcast. If the monitor stream is enabled, then YouTube will
            # broadcast the event content on a special stream intended only for
            # the broadcaster&#x27;s consumption. The broadcaster can use the stream
            # to review the event content and also to identify the optimal times
            # to insert cuepoints.&lt;br&gt;&lt;br&gt;
            # You need to set this value to &lt;code&gt;true&lt;/code&gt; if you intend to have
            # a broadcast delay for your event.&lt;br&gt;&lt;br&gt;
            # &lt;strong&gt;Note:&lt;/strong&gt; This property cannot be updated once the
            # broadcast is in the &lt;code&gt;testing&lt;/code&gt; or &lt;code&gt;live&lt;/code&gt; state.
      },
      &quot;enableContentEncryption&quot;: True or False, # This setting indicates whether YouTube should enable content encryption
          # for the broadcast.
      &quot;enableAutoStop&quot;: True or False, # This setting indicates whether auto stop is enabled for this broadcast.
          # The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          # This setting can only be used by Events.
      &quot;latencyPreference&quot;: &quot;A String&quot;, # If both this and enable_low_latency are set, they must match.
          # LATENCY_NORMAL should match enable_low_latency=false
          # LATENCY_LOW should match enable_low_latency=true
          # LATENCY_ULTRA_LOW should have enable_low_latency omitted.
      &quot;projection&quot;: &quot;A String&quot;, # The projection format of this broadcast. This defaults to
          # &lt;code&gt;rectangular&lt;/code&gt;.
      &quot;mesh&quot;: &quot;A String&quot;, # The mesh for projecting the video if &lt;code&gt;projection&lt;/code&gt; is
          # &lt;code&gt;mesh&lt;/code&gt;. The mesh value must be a UTF-8 string containing the
          # base-64 encoding of 3D mesh data that follows the &lt;a
          # href=&quot;https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md&quot;&gt;
          # Spherical Video V2 RFC specification&lt;/a&gt; for an mshp box, excluding the box
          # size and type but including the following four reserved zero bytes for the
          # version and flags.
      &quot;enableLowLatency&quot;: True or False, # Indicates whether this broadcast has low latency enabled.
      &quot;enableAutoStart&quot;: True or False, # This setting indicates whether auto start is enabled for this broadcast.
          #  The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #  This setting can only be used by Events.
    },
    &quot;status&quot;: { # Live broadcast state. # The &lt;code&gt;status&lt;/code&gt; object contains information about the event&#x27;s
        # status.
      &quot;selfDeclaredMadeForKids&quot;: True or False, # This field will be set to True if the creator declares the broadcast to be
          # kids only: go/live-cw-work.
      &quot;recordingStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s recording status.
      &quot;privacyStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s privacy status. Note that the broadcast represents
          # exactly one YouTube video, so the privacy settings are identical to
          # those supported for videos. In addition, you can set this field by
          # modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#status.privacyStatus&quot;
          # &gt;privacyStatus&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;lifeCycleStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s status. The status can be updated using the API&#x27;s
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveBroadcasts/transition&quot;
          # &gt;liveBroadcasts.transition&lt;/a&gt;&lt;/code&gt; method.
      &quot;liveBroadcastPriority&quot;: &quot;A String&quot;, # Priority of the live broadcast event (internal state).
      &quot;madeForKids&quot;: True or False, # Whether the broadcast is made for kids or not, decided by YouTube instead
          # of the creator. This field is read only.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(id, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</code>
  <pre>Delete a given broadcast.

Args:
  id: string, Broadcast to delete. (required)
  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(part, body=None, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</code>
  <pre>Inserts a new stream for the authenticated user.

Args:
  part: string, The &lt;code&gt;&lt;strong&gt;part&lt;/strong&gt;&lt;/code&gt; parameter serves two purposes in
this operation. It identifies the properties that the write operation will
set as well as the properties that the API response will
include.&lt;br&gt;&lt;br&gt;The &lt;code&gt;part&lt;/code&gt; properties that you can include in
the parameter value are &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;snippet&lt;/code&gt;,
&lt;code&gt;contentDetails&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;. (required) (repeated)
  body: object, The request body.
    The object takes the form of:

{ # A &lt;code&gt;&lt;strong&gt;liveBroadcast&lt;/strong&gt;&lt;/code&gt; resource represents an event
    # that will be streamed, via live video, on YouTube.
  &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the broadcast.
  &quot;statistics&quot;: { # Statistics about the live broadcast. These represent a snapshot of the values # The &lt;code&gt;statistics&lt;/code&gt; object contains info about the event&#x27;s current
      # stats. These include concurrent viewers and total chat count. Statistics
      # can change (in either direction) during the lifetime of an event.
      # Statistics are only returned while the event is live.
      # at the time of the request. Statistics are only returned for live broadcasts.
    &quot;totalChatCount&quot;: &quot;A String&quot;, # The total number of live chat messages currently on the broadcast. The
        # property and its value will be present if the broadcast is public, has
        # the live chat feature enabled, and has at least one message. Note that
        # this field will not be filled after the broadcast ends. So this property
        # would not identify the number of chat messages for an archived video of a
        # completed live broadcast.
  },
  &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
  &quot;snippet&quot;: { # Basic broadcast information. # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the event,
      # including its title, description, start time, and end time.
    &quot;scheduledStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to start. The value
        # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
        # is publishing the broadcast.
    &quot;description&quot;: &quot;A String&quot;, # The broadcast&#x27;s description. As with the &lt;code&gt;title&lt;/code&gt;, you can set
        # this field by modifying the broadcast resource or by setting the
        # &lt;code&gt;&lt;a
        # href=&quot;/youtube/v3/docs/videos#snippet.description&quot;&gt;description&lt;/a&gt;&lt;/code&gt;
        # field of the corresponding video resource.
    &quot;title&quot;: &quot;A String&quot;, # The broadcast&#x27;s title. Note that the broadcast represents exactly one
        # YouTube video. You can set this field by modifying the broadcast resource
        # or by setting the
        # &lt;code&gt;&lt;a href=&quot;/youtube/v3/docs/videos#snippet.title&quot;&gt;title&lt;/a&gt;&lt;/code&gt;
        # field of the corresponding video resource.
    &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the broadcast was added to YouTube&#x27;s live broadcast
        # schedule. The value is specified in
        # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;liveChatId&quot;: &quot;A String&quot;, # The id of the live chat for this broadcast.
    &quot;isDefaultBroadcast&quot;: True or False, # Indicates whether this broadcast is the default broadcast.
        # Internal only.
    &quot;actualEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually ended. This information is
        # only available once the broadcast&#x27;s state is &lt;code&gt;complete&lt;/code&gt;. The
        # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;scheduledEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to end. The value
        # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;actualStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually started. This information is
        # only available once the broadcast&#x27;s state is &lt;code&gt;live&lt;/code&gt;. The
        # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;thumbnails&quot;: { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the broadcast. For each nested
        # object in this object, the key is the name of the thumbnail image, and
        # the value is an object that contains other information about the
        # thumbnail.
      &quot;medium&quot;: { # A thumbnail is an image representing a YouTube resource. # The medium quality image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
      &quot;standard&quot;: { # A thumbnail is an image representing a YouTube resource. # The standard quality image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
      &quot;default&quot;: { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
      &quot;maxres&quot;: { # A thumbnail is an image representing a YouTube resource. # The maximum resolution quality image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
      &quot;high&quot;: { # A thumbnail is an image representing a YouTube resource. # The high quality image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
    },
  },
  &quot;kind&quot;: &quot;youtube#liveBroadcast&quot;, # Identifies what kind of resource this is. Value: the fixed string
      # &lt;code&gt;&quot;youtube#liveBroadcast&quot;&lt;/code&gt;.
  &quot;contentDetails&quot;: { # Detailed settings of a broadcast. # The &lt;code&gt;contentDetails&lt;/code&gt; object contains information about the
      # event&#x27;s video content, such as whether the content can be shown in an
      # embedded video player or if it will be archived and therefore available
      # for viewing after the event has concluded.
    &quot;boundStreamId&quot;: &quot;A String&quot;, # This value uniquely identifies the
        # &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams&quot;&gt;live stream&lt;/a&gt;&lt;/code&gt;
        # bound to the broadcast.
    &quot;closedCaptionsType&quot;: &quot;A String&quot;,
    &quot;startWithSlate&quot;: True or False, # This setting indicates whether the broadcast should automatically begin
        # with an &lt;a
        # href=&quot;/youtube/v3/live/getting-started#Displaying_Slates&quot;&gt;in-stream
        # slate&lt;/a&gt; when you update the broadcast&#x27;s status to &lt;code&gt;live&lt;/code&gt;.
        # After updating the status, you then need to send a
        # &lt;code&gt;&lt;a
        # href=&quot;/youtube/v3/live/docs/liveCuepoints/insert&quot;&gt;liveCuepoints.insert&lt;/a&gt;&lt;/code&gt;
        # request that sets the cuepoint&#x27;s &lt;code&gt;eventState&lt;/code&gt; to
        # &lt;code&gt;end&lt;/code&gt; to remove the in-stream slate and make your broadcast
        # stream visible to viewers.
    &quot;boundStreamLastUpdateTimeMs&quot;: &quot;A String&quot;, # The date and time that the live stream referenced by
        # &lt;code&gt;boundStreamId&lt;/code&gt; was last updated.
    &quot;enableDvr&quot;: True or False, # This setting determines whether viewers can access DVR controls while
        # watching the video. DVR controls enable the viewer to control the video
        # playback experience by pausing, rewinding, or fast forwarding content.
        # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
        #
        # &lt;strong&gt;Important:&lt;/strong&gt; You must set the value to &lt;code&gt;true&lt;/code&gt;
        # and also set the &lt;code&gt;enableArchive&lt;/code&gt; property&#x27;s value to
        # &lt;code&gt;true&lt;/code&gt; if you want to make playback available immediately
        # after the broadcast ends.
    &quot;enableEmbed&quot;: True or False, # This setting indicates whether the broadcast video can be played in an
        # embedded player. If you choose to archive the video (using the
        # &lt;code&gt;enableArchive&lt;/code&gt; property), this setting will also apply to
        # the archived video.
    &quot;enableClosedCaptions&quot;: True or False, # This setting indicates whether HTTP POST closed captioning is enabled for
        # this broadcast. The ingestion URL of the closed captions is returned
        # through the liveStreams API.  This is mutually exclusive with using the
        # &lt;code&gt;closed_captions_type&lt;/code&gt; property, and is equivalent to setting
        # &lt;code&gt;closed_captions_type&lt;/code&gt; to CLOSED_CAPTIONS_HTTP_POST.
    &quot;recordFromStart&quot;: True or False, # Automatically start recording after the event goes live.
        # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
        #
        # &lt;strong&gt;Important:&lt;/strong&gt; You must also set the &lt;code&gt;enableDvr&lt;/code&gt;
        # property&#x27;s value to
        # &lt;code&gt;true&lt;/code&gt; if you want the playback to be available immediately
        # after the broadcast ends. If you set this property&#x27;s value to
        # &lt;code&gt;true&lt;/code&gt; but do not also set the &lt;code&gt;enableDvr&lt;/code&gt; property
        # to &lt;code&gt;true&lt;/code&gt;, there may be a delay of around one day before the
        # archived video will be available for playback.
    &quot;monitorStream&quot;: { # Settings and Info of the monitor stream # The &lt;code&gt;monitorStream&lt;/code&gt; object contains information about the
        # monitor stream, which the broadcaster can use to review the event
        # content before the broadcast stream is shown publicly.
      &quot;embedHtml&quot;: &quot;A String&quot;, # HTML code that embeds a player that plays the monitor stream.
      &quot;broadcastStreamDelayMs&quot;: 42, # If you have set the
          # &lt;code&gt;&lt;a href=&quot;#enableMonitorStream&quot;&gt;enableMonitorStream&lt;/a&gt;&lt;/code&gt;
          # property to &lt;code&gt;true&lt;/code&gt;, then this property determines the
          # length of the live broadcast delay.
      &quot;enableMonitorStream&quot;: True or False, # This value determines whether the monitor stream is enabled for the
          # broadcast. If the monitor stream is enabled, then YouTube will
          # broadcast the event content on a special stream intended only for
          # the broadcaster&#x27;s consumption. The broadcaster can use the stream
          # to review the event content and also to identify the optimal times
          # to insert cuepoints.&lt;br&gt;&lt;br&gt;
          # You need to set this value to &lt;code&gt;true&lt;/code&gt; if you intend to have
          # a broadcast delay for your event.&lt;br&gt;&lt;br&gt;
          # &lt;strong&gt;Note:&lt;/strong&gt; This property cannot be updated once the
          # broadcast is in the &lt;code&gt;testing&lt;/code&gt; or &lt;code&gt;live&lt;/code&gt; state.
    },
    &quot;enableContentEncryption&quot;: True or False, # This setting indicates whether YouTube should enable content encryption
        # for the broadcast.
    &quot;enableAutoStop&quot;: True or False, # This setting indicates whether auto stop is enabled for this broadcast.
        # The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
        # This setting can only be used by Events.
    &quot;latencyPreference&quot;: &quot;A String&quot;, # If both this and enable_low_latency are set, they must match.
        # LATENCY_NORMAL should match enable_low_latency=false
        # LATENCY_LOW should match enable_low_latency=true
        # LATENCY_ULTRA_LOW should have enable_low_latency omitted.
    &quot;projection&quot;: &quot;A String&quot;, # The projection format of this broadcast. This defaults to
        # &lt;code&gt;rectangular&lt;/code&gt;.
    &quot;mesh&quot;: &quot;A String&quot;, # The mesh for projecting the video if &lt;code&gt;projection&lt;/code&gt; is
        # &lt;code&gt;mesh&lt;/code&gt;. The mesh value must be a UTF-8 string containing the
        # base-64 encoding of 3D mesh data that follows the &lt;a
        # href=&quot;https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md&quot;&gt;
        # Spherical Video V2 RFC specification&lt;/a&gt; for an mshp box, excluding the box
        # size and type but including the following four reserved zero bytes for the
        # version and flags.
    &quot;enableLowLatency&quot;: True or False, # Indicates whether this broadcast has low latency enabled.
    &quot;enableAutoStart&quot;: True or False, # This setting indicates whether auto start is enabled for this broadcast.
        #  The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
        #  This setting can only be used by Events.
  },
  &quot;status&quot;: { # Live broadcast state. # The &lt;code&gt;status&lt;/code&gt; object contains information about the event&#x27;s
      # status.
    &quot;selfDeclaredMadeForKids&quot;: True or False, # This field will be set to True if the creator declares the broadcast to be
        # kids only: go/live-cw-work.
    &quot;recordingStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s recording status.
    &quot;privacyStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s privacy status. Note that the broadcast represents
        # exactly one YouTube video, so the privacy settings are identical to
        # those supported for videos. In addition, you can set this field by
        # modifying the broadcast resource or by setting the
        # &lt;code&gt;&lt;a
        # href=&quot;/youtube/v3/docs/videos#status.privacyStatus&quot;
        # &gt;privacyStatus&lt;/a&gt;&lt;/code&gt;
        # field of the corresponding video resource.
    &quot;lifeCycleStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s status. The status can be updated using the API&#x27;s
        # &lt;code&gt;&lt;a
        # href=&quot;/youtube/v3/live/docs/liveBroadcasts/transition&quot;
        # &gt;liveBroadcasts.transition&lt;/a&gt;&lt;/code&gt; method.
    &quot;liveBroadcastPriority&quot;: &quot;A String&quot;, # Priority of the live broadcast event (internal state).
    &quot;madeForKids&quot;: True or False, # Whether the broadcast is made for kids or not, decided by YouTube instead
        # of the creator. This field is read only.
  },
}

  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A &lt;code&gt;&lt;strong&gt;liveBroadcast&lt;/strong&gt;&lt;/code&gt; resource represents an event
      # that will be streamed, via live video, on YouTube.
    &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the broadcast.
    &quot;statistics&quot;: { # Statistics about the live broadcast. These represent a snapshot of the values # The &lt;code&gt;statistics&lt;/code&gt; object contains info about the event&#x27;s current
        # stats. These include concurrent viewers and total chat count. Statistics
        # can change (in either direction) during the lifetime of an event.
        # Statistics are only returned while the event is live.
        # at the time of the request. Statistics are only returned for live broadcasts.
      &quot;totalChatCount&quot;: &quot;A String&quot;, # The total number of live chat messages currently on the broadcast. The
          # property and its value will be present if the broadcast is public, has
          # the live chat feature enabled, and has at least one message. Note that
          # this field will not be filled after the broadcast ends. So this property
          # would not identify the number of chat messages for an archived video of a
          # completed live broadcast.
    },
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;snippet&quot;: { # Basic broadcast information. # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the event,
        # including its title, description, start time, and end time.
      &quot;scheduledStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to start. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
          # is publishing the broadcast.
      &quot;description&quot;: &quot;A String&quot;, # The broadcast&#x27;s description. As with the &lt;code&gt;title&lt;/code&gt;, you can set
          # this field by modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#snippet.description&quot;&gt;description&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;title&quot;: &quot;A String&quot;, # The broadcast&#x27;s title. Note that the broadcast represents exactly one
          # YouTube video. You can set this field by modifying the broadcast resource
          # or by setting the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/docs/videos#snippet.title&quot;&gt;title&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the broadcast was added to YouTube&#x27;s live broadcast
          # schedule. The value is specified in
          # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;liveChatId&quot;: &quot;A String&quot;, # The id of the live chat for this broadcast.
      &quot;isDefaultBroadcast&quot;: True or False, # Indicates whether this broadcast is the default broadcast.
          # Internal only.
      &quot;actualEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually ended. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;complete&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;scheduledEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to end. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;actualStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually started. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;live&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;thumbnails&quot;: { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the broadcast. For each nested
          # object in this object, the key is the name of the thumbnail image, and
          # the value is an object that contains other information about the
          # thumbnail.
        &quot;medium&quot;: { # A thumbnail is an image representing a YouTube resource. # The medium quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;standard&quot;: { # A thumbnail is an image representing a YouTube resource. # The standard quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;default&quot;: { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;maxres&quot;: { # A thumbnail is an image representing a YouTube resource. # The maximum resolution quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;high&quot;: { # A thumbnail is an image representing a YouTube resource. # The high quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
      },
    },
    &quot;kind&quot;: &quot;youtube#liveBroadcast&quot;, # Identifies what kind of resource this is. Value: the fixed string
        # &lt;code&gt;&quot;youtube#liveBroadcast&quot;&lt;/code&gt;.
    &quot;contentDetails&quot;: { # Detailed settings of a broadcast. # The &lt;code&gt;contentDetails&lt;/code&gt; object contains information about the
        # event&#x27;s video content, such as whether the content can be shown in an
        # embedded video player or if it will be archived and therefore available
        # for viewing after the event has concluded.
      &quot;boundStreamId&quot;: &quot;A String&quot;, # This value uniquely identifies the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams&quot;&gt;live stream&lt;/a&gt;&lt;/code&gt;
          # bound to the broadcast.
      &quot;closedCaptionsType&quot;: &quot;A String&quot;,
      &quot;startWithSlate&quot;: True or False, # This setting indicates whether the broadcast should automatically begin
          # with an &lt;a
          # href=&quot;/youtube/v3/live/getting-started#Displaying_Slates&quot;&gt;in-stream
          # slate&lt;/a&gt; when you update the broadcast&#x27;s status to &lt;code&gt;live&lt;/code&gt;.
          # After updating the status, you then need to send a
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveCuepoints/insert&quot;&gt;liveCuepoints.insert&lt;/a&gt;&lt;/code&gt;
          # request that sets the cuepoint&#x27;s &lt;code&gt;eventState&lt;/code&gt; to
          # &lt;code&gt;end&lt;/code&gt; to remove the in-stream slate and make your broadcast
          # stream visible to viewers.
      &quot;boundStreamLastUpdateTimeMs&quot;: &quot;A String&quot;, # The date and time that the live stream referenced by
          # &lt;code&gt;boundStreamId&lt;/code&gt; was last updated.
      &quot;enableDvr&quot;: True or False, # This setting determines whether viewers can access DVR controls while
          # watching the video. DVR controls enable the viewer to control the video
          # playback experience by pausing, rewinding, or fast forwarding content.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must set the value to &lt;code&gt;true&lt;/code&gt;
          # and also set the &lt;code&gt;enableArchive&lt;/code&gt; property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want to make playback available immediately
          # after the broadcast ends.
      &quot;enableEmbed&quot;: True or False, # This setting indicates whether the broadcast video can be played in an
          # embedded player. If you choose to archive the video (using the
          # &lt;code&gt;enableArchive&lt;/code&gt; property), this setting will also apply to
          # the archived video.
      &quot;enableClosedCaptions&quot;: True or False, # This setting indicates whether HTTP POST closed captioning is enabled for
          # this broadcast. The ingestion URL of the closed captions is returned
          # through the liveStreams API.  This is mutually exclusive with using the
          # &lt;code&gt;closed_captions_type&lt;/code&gt; property, and is equivalent to setting
          # &lt;code&gt;closed_captions_type&lt;/code&gt; to CLOSED_CAPTIONS_HTTP_POST.
      &quot;recordFromStart&quot;: True or False, # Automatically start recording after the event goes live.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must also set the &lt;code&gt;enableDvr&lt;/code&gt;
          # property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want the playback to be available immediately
          # after the broadcast ends. If you set this property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; but do not also set the &lt;code&gt;enableDvr&lt;/code&gt; property
          # to &lt;code&gt;true&lt;/code&gt;, there may be a delay of around one day before the
          # archived video will be available for playback.
      &quot;monitorStream&quot;: { # Settings and Info of the monitor stream # The &lt;code&gt;monitorStream&lt;/code&gt; object contains information about the
          # monitor stream, which the broadcaster can use to review the event
          # content before the broadcast stream is shown publicly.
        &quot;embedHtml&quot;: &quot;A String&quot;, # HTML code that embeds a player that plays the monitor stream.
        &quot;broadcastStreamDelayMs&quot;: 42, # If you have set the
            # &lt;code&gt;&lt;a href=&quot;#enableMonitorStream&quot;&gt;enableMonitorStream&lt;/a&gt;&lt;/code&gt;
            # property to &lt;code&gt;true&lt;/code&gt;, then this property determines the
            # length of the live broadcast delay.
        &quot;enableMonitorStream&quot;: True or False, # This value determines whether the monitor stream is enabled for the
            # broadcast. If the monitor stream is enabled, then YouTube will
            # broadcast the event content on a special stream intended only for
            # the broadcaster&#x27;s consumption. The broadcaster can use the stream
            # to review the event content and also to identify the optimal times
            # to insert cuepoints.&lt;br&gt;&lt;br&gt;
            # You need to set this value to &lt;code&gt;true&lt;/code&gt; if you intend to have
            # a broadcast delay for your event.&lt;br&gt;&lt;br&gt;
            # &lt;strong&gt;Note:&lt;/strong&gt; This property cannot be updated once the
            # broadcast is in the &lt;code&gt;testing&lt;/code&gt; or &lt;code&gt;live&lt;/code&gt; state.
      },
      &quot;enableContentEncryption&quot;: True or False, # This setting indicates whether YouTube should enable content encryption
          # for the broadcast.
      &quot;enableAutoStop&quot;: True or False, # This setting indicates whether auto stop is enabled for this broadcast.
          # The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          # This setting can only be used by Events.
      &quot;latencyPreference&quot;: &quot;A String&quot;, # If both this and enable_low_latency are set, they must match.
          # LATENCY_NORMAL should match enable_low_latency=false
          # LATENCY_LOW should match enable_low_latency=true
          # LATENCY_ULTRA_LOW should have enable_low_latency omitted.
      &quot;projection&quot;: &quot;A String&quot;, # The projection format of this broadcast. This defaults to
          # &lt;code&gt;rectangular&lt;/code&gt;.
      &quot;mesh&quot;: &quot;A String&quot;, # The mesh for projecting the video if &lt;code&gt;projection&lt;/code&gt; is
          # &lt;code&gt;mesh&lt;/code&gt;. The mesh value must be a UTF-8 string containing the
          # base-64 encoding of 3D mesh data that follows the &lt;a
          # href=&quot;https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md&quot;&gt;
          # Spherical Video V2 RFC specification&lt;/a&gt; for an mshp box, excluding the box
          # size and type but including the following four reserved zero bytes for the
          # version and flags.
      &quot;enableLowLatency&quot;: True or False, # Indicates whether this broadcast has low latency enabled.
      &quot;enableAutoStart&quot;: True or False, # This setting indicates whether auto start is enabled for this broadcast.
          #  The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #  This setting can only be used by Events.
    },
    &quot;status&quot;: { # Live broadcast state. # The &lt;code&gt;status&lt;/code&gt; object contains information about the event&#x27;s
        # status.
      &quot;selfDeclaredMadeForKids&quot;: True or False, # This field will be set to True if the creator declares the broadcast to be
          # kids only: go/live-cw-work.
      &quot;recordingStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s recording status.
      &quot;privacyStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s privacy status. Note that the broadcast represents
          # exactly one YouTube video, so the privacy settings are identical to
          # those supported for videos. In addition, you can set this field by
          # modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#status.privacyStatus&quot;
          # &gt;privacyStatus&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;lifeCycleStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s status. The status can be updated using the API&#x27;s
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveBroadcasts/transition&quot;
          # &gt;liveBroadcasts.transition&lt;/a&gt;&lt;/code&gt; method.
      &quot;liveBroadcastPriority&quot;: &quot;A String&quot;, # Priority of the live broadcast event (internal state).
      &quot;madeForKids&quot;: True or False, # Whether the broadcast is made for kids or not, decided by YouTube instead
          # of the creator. This field is read only.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(part, pageToken=None, broadcastType=None, maxResults=None, broadcastStatus=None, mine=None, onBehalfOfContentOwnerChannel=None, id=None, onBehalfOfContentOwner=None, x__xgafv=None)</code>
  <pre>Retrieve the list of broadcasts associated with the given channel.

Args:
  part: string, The &lt;code&gt;&lt;strong&gt;part&lt;/strong&gt;&lt;/code&gt; parameter specifies a
comma-separated list of one or more &lt;code&gt;liveBroadcast&lt;/code&gt; resource
properties that the API response will include. The &lt;code&gt;part&lt;/code&gt; names
that you can include in the parameter value are &lt;code&gt;id&lt;/code&gt;,
&lt;code&gt;snippet&lt;/code&gt;, &lt;code&gt;contentDetails&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;. (required) (repeated)
  pageToken: string, The &lt;code&gt;&lt;strong&gt;pageToken&lt;/strong&gt;&lt;/code&gt; parameter identifies a specific
page in the result set that should be returned. In an API response, the
&lt;code&gt;nextPageToken&lt;/code&gt; and &lt;code&gt;prevPageToken&lt;/code&gt; properties
identify other pages that could be retrieved.
  broadcastType: string, Return only broadcasts with the selected type.
  maxResults: integer, The &lt;code&gt;&lt;strong&gt;maxResults&lt;/strong&gt;&lt;/code&gt; parameter specifies the
maximum number of items that should be returned in the result set.
  broadcastStatus: string, Return broadcasts with a certain status, e.g. active broadcasts.
  mine: boolean, A parameter
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  id: string, Return broadcasts with the given ids from Stubby or Apiary. (repeated)
  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;eventId&quot;: &quot;A String&quot;, # Serialized EventId of the request which produced this response.
    &quot;items&quot;: [ # A list of broadcasts that match the request criteria.
      { # A &lt;code&gt;&lt;strong&gt;liveBroadcast&lt;/strong&gt;&lt;/code&gt; resource represents an event
          # that will be streamed, via live video, on YouTube.
        &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the broadcast.
        &quot;statistics&quot;: { # Statistics about the live broadcast. These represent a snapshot of the values # The &lt;code&gt;statistics&lt;/code&gt; object contains info about the event&#x27;s current
            # stats. These include concurrent viewers and total chat count. Statistics
            # can change (in either direction) during the lifetime of an event.
            # Statistics are only returned while the event is live.
            # at the time of the request. Statistics are only returned for live broadcasts.
          &quot;totalChatCount&quot;: &quot;A String&quot;, # The total number of live chat messages currently on the broadcast. The
              # property and its value will be present if the broadcast is public, has
              # the live chat feature enabled, and has at least one message. Note that
              # this field will not be filled after the broadcast ends. So this property
              # would not identify the number of chat messages for an archived video of a
              # completed live broadcast.
        },
        &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
        &quot;snippet&quot;: { # Basic broadcast information. # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the event,
            # including its title, description, start time, and end time.
          &quot;scheduledStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to start. The value
              # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
              # format.
          &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
              # is publishing the broadcast.
          &quot;description&quot;: &quot;A String&quot;, # The broadcast&#x27;s description. As with the &lt;code&gt;title&lt;/code&gt;, you can set
              # this field by modifying the broadcast resource or by setting the
              # &lt;code&gt;&lt;a
              # href=&quot;/youtube/v3/docs/videos#snippet.description&quot;&gt;description&lt;/a&gt;&lt;/code&gt;
              # field of the corresponding video resource.
          &quot;title&quot;: &quot;A String&quot;, # The broadcast&#x27;s title. Note that the broadcast represents exactly one
              # YouTube video. You can set this field by modifying the broadcast resource
              # or by setting the
              # &lt;code&gt;&lt;a href=&quot;/youtube/v3/docs/videos#snippet.title&quot;&gt;title&lt;/a&gt;&lt;/code&gt;
              # field of the corresponding video resource.
          &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the broadcast was added to YouTube&#x27;s live broadcast
              # schedule. The value is specified in
              # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
              # format.
          &quot;liveChatId&quot;: &quot;A String&quot;, # The id of the live chat for this broadcast.
          &quot;isDefaultBroadcast&quot;: True or False, # Indicates whether this broadcast is the default broadcast.
              # Internal only.
          &quot;actualEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually ended. This information is
              # only available once the broadcast&#x27;s state is &lt;code&gt;complete&lt;/code&gt;. The
              # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
              # format.
          &quot;scheduledEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to end. The value
              # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
              # format.
          &quot;actualStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually started. This information is
              # only available once the broadcast&#x27;s state is &lt;code&gt;live&lt;/code&gt;. The
              # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
              # format.
          &quot;thumbnails&quot;: { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the broadcast. For each nested
              # object in this object, the key is the name of the thumbnail image, and
              # the value is an object that contains other information about the
              # thumbnail.
            &quot;medium&quot;: { # A thumbnail is an image representing a YouTube resource. # The medium quality image for this resource.
              &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
              &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
              &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
            },
            &quot;standard&quot;: { # A thumbnail is an image representing a YouTube resource. # The standard quality image for this resource.
              &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
              &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
              &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
            },
            &quot;default&quot;: { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
              &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
              &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
              &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
            },
            &quot;maxres&quot;: { # A thumbnail is an image representing a YouTube resource. # The maximum resolution quality image for this resource.
              &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
              &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
              &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
            },
            &quot;high&quot;: { # A thumbnail is an image representing a YouTube resource. # The high quality image for this resource.
              &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
              &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
              &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
            },
          },
        },
        &quot;kind&quot;: &quot;youtube#liveBroadcast&quot;, # Identifies what kind of resource this is. Value: the fixed string
            # &lt;code&gt;&quot;youtube#liveBroadcast&quot;&lt;/code&gt;.
        &quot;contentDetails&quot;: { # Detailed settings of a broadcast. # The &lt;code&gt;contentDetails&lt;/code&gt; object contains information about the
            # event&#x27;s video content, such as whether the content can be shown in an
            # embedded video player or if it will be archived and therefore available
            # for viewing after the event has concluded.
          &quot;boundStreamId&quot;: &quot;A String&quot;, # This value uniquely identifies the
              # &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams&quot;&gt;live stream&lt;/a&gt;&lt;/code&gt;
              # bound to the broadcast.
          &quot;closedCaptionsType&quot;: &quot;A String&quot;,
          &quot;startWithSlate&quot;: True or False, # This setting indicates whether the broadcast should automatically begin
              # with an &lt;a
              # href=&quot;/youtube/v3/live/getting-started#Displaying_Slates&quot;&gt;in-stream
              # slate&lt;/a&gt; when you update the broadcast&#x27;s status to &lt;code&gt;live&lt;/code&gt;.
              # After updating the status, you then need to send a
              # &lt;code&gt;&lt;a
              # href=&quot;/youtube/v3/live/docs/liveCuepoints/insert&quot;&gt;liveCuepoints.insert&lt;/a&gt;&lt;/code&gt;
              # request that sets the cuepoint&#x27;s &lt;code&gt;eventState&lt;/code&gt; to
              # &lt;code&gt;end&lt;/code&gt; to remove the in-stream slate and make your broadcast
              # stream visible to viewers.
          &quot;boundStreamLastUpdateTimeMs&quot;: &quot;A String&quot;, # The date and time that the live stream referenced by
              # &lt;code&gt;boundStreamId&lt;/code&gt; was last updated.
          &quot;enableDvr&quot;: True or False, # This setting determines whether viewers can access DVR controls while
              # watching the video. DVR controls enable the viewer to control the video
              # playback experience by pausing, rewinding, or fast forwarding content.
              # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
              #
              # &lt;strong&gt;Important:&lt;/strong&gt; You must set the value to &lt;code&gt;true&lt;/code&gt;
              # and also set the &lt;code&gt;enableArchive&lt;/code&gt; property&#x27;s value to
              # &lt;code&gt;true&lt;/code&gt; if you want to make playback available immediately
              # after the broadcast ends.
          &quot;enableEmbed&quot;: True or False, # This setting indicates whether the broadcast video can be played in an
              # embedded player. If you choose to archive the video (using the
              # &lt;code&gt;enableArchive&lt;/code&gt; property), this setting will also apply to
              # the archived video.
          &quot;enableClosedCaptions&quot;: True or False, # This setting indicates whether HTTP POST closed captioning is enabled for
              # this broadcast. The ingestion URL of the closed captions is returned
              # through the liveStreams API.  This is mutually exclusive with using the
              # &lt;code&gt;closed_captions_type&lt;/code&gt; property, and is equivalent to setting
              # &lt;code&gt;closed_captions_type&lt;/code&gt; to CLOSED_CAPTIONS_HTTP_POST.
          &quot;recordFromStart&quot;: True or False, # Automatically start recording after the event goes live.
              # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
              #
              # &lt;strong&gt;Important:&lt;/strong&gt; You must also set the &lt;code&gt;enableDvr&lt;/code&gt;
              # property&#x27;s value to
              # &lt;code&gt;true&lt;/code&gt; if you want the playback to be available immediately
              # after the broadcast ends. If you set this property&#x27;s value to
              # &lt;code&gt;true&lt;/code&gt; but do not also set the &lt;code&gt;enableDvr&lt;/code&gt; property
              # to &lt;code&gt;true&lt;/code&gt;, there may be a delay of around one day before the
              # archived video will be available for playback.
          &quot;monitorStream&quot;: { # Settings and Info of the monitor stream # The &lt;code&gt;monitorStream&lt;/code&gt; object contains information about the
              # monitor stream, which the broadcaster can use to review the event
              # content before the broadcast stream is shown publicly.
            &quot;embedHtml&quot;: &quot;A String&quot;, # HTML code that embeds a player that plays the monitor stream.
            &quot;broadcastStreamDelayMs&quot;: 42, # If you have set the
                # &lt;code&gt;&lt;a href=&quot;#enableMonitorStream&quot;&gt;enableMonitorStream&lt;/a&gt;&lt;/code&gt;
                # property to &lt;code&gt;true&lt;/code&gt;, then this property determines the
                # length of the live broadcast delay.
            &quot;enableMonitorStream&quot;: True or False, # This value determines whether the monitor stream is enabled for the
                # broadcast. If the monitor stream is enabled, then YouTube will
                # broadcast the event content on a special stream intended only for
                # the broadcaster&#x27;s consumption. The broadcaster can use the stream
                # to review the event content and also to identify the optimal times
                # to insert cuepoints.&lt;br&gt;&lt;br&gt;
                # You need to set this value to &lt;code&gt;true&lt;/code&gt; if you intend to have
                # a broadcast delay for your event.&lt;br&gt;&lt;br&gt;
                # &lt;strong&gt;Note:&lt;/strong&gt; This property cannot be updated once the
                # broadcast is in the &lt;code&gt;testing&lt;/code&gt; or &lt;code&gt;live&lt;/code&gt; state.
          },
          &quot;enableContentEncryption&quot;: True or False, # This setting indicates whether YouTube should enable content encryption
              # for the broadcast.
          &quot;enableAutoStop&quot;: True or False, # This setting indicates whether auto stop is enabled for this broadcast.
              # The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
              # This setting can only be used by Events.
          &quot;latencyPreference&quot;: &quot;A String&quot;, # If both this and enable_low_latency are set, they must match.
              # LATENCY_NORMAL should match enable_low_latency=false
              # LATENCY_LOW should match enable_low_latency=true
              # LATENCY_ULTRA_LOW should have enable_low_latency omitted.
          &quot;projection&quot;: &quot;A String&quot;, # The projection format of this broadcast. This defaults to
              # &lt;code&gt;rectangular&lt;/code&gt;.
          &quot;mesh&quot;: &quot;A String&quot;, # The mesh for projecting the video if &lt;code&gt;projection&lt;/code&gt; is
              # &lt;code&gt;mesh&lt;/code&gt;. The mesh value must be a UTF-8 string containing the
              # base-64 encoding of 3D mesh data that follows the &lt;a
              # href=&quot;https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md&quot;&gt;
              # Spherical Video V2 RFC specification&lt;/a&gt; for an mshp box, excluding the box
              # size and type but including the following four reserved zero bytes for the
              # version and flags.
          &quot;enableLowLatency&quot;: True or False, # Indicates whether this broadcast has low latency enabled.
          &quot;enableAutoStart&quot;: True or False, # This setting indicates whether auto start is enabled for this broadcast.
              #  The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
              #  This setting can only be used by Events.
        },
        &quot;status&quot;: { # Live broadcast state. # The &lt;code&gt;status&lt;/code&gt; object contains information about the event&#x27;s
            # status.
          &quot;selfDeclaredMadeForKids&quot;: True or False, # This field will be set to True if the creator declares the broadcast to be
              # kids only: go/live-cw-work.
          &quot;recordingStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s recording status.
          &quot;privacyStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s privacy status. Note that the broadcast represents
              # exactly one YouTube video, so the privacy settings are identical to
              # those supported for videos. In addition, you can set this field by
              # modifying the broadcast resource or by setting the
              # &lt;code&gt;&lt;a
              # href=&quot;/youtube/v3/docs/videos#status.privacyStatus&quot;
              # &gt;privacyStatus&lt;/a&gt;&lt;/code&gt;
              # field of the corresponding video resource.
          &quot;lifeCycleStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s status. The status can be updated using the API&#x27;s
              # &lt;code&gt;&lt;a
              # href=&quot;/youtube/v3/live/docs/liveBroadcasts/transition&quot;
              # &gt;liveBroadcasts.transition&lt;/a&gt;&lt;/code&gt; method.
          &quot;liveBroadcastPriority&quot;: &quot;A String&quot;, # Priority of the live broadcast event (internal state).
          &quot;madeForKids&quot;: True or False, # Whether the broadcast is made for kids or not, decided by YouTube instead
              # of the creator. This field is read only.
        },
      },
    ],
    &quot;pageInfo&quot;: { # Paging details for lists of resources, including total number of items # General pagination information.
        # available and number of resources returned in a single page.
      &quot;resultsPerPage&quot;: 42, # The number of results included in the API response.
      &quot;totalResults&quot;: 42, # The total number of results in the result set.
    },
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;visitorId&quot;: &quot;A String&quot;, # The &lt;code&gt;visitorId&lt;/code&gt; identifies the visitor.
    &quot;prevPageToken&quot;: &quot;A String&quot;, # The token that can be used as the value of the &lt;code&gt;pageToken&lt;/code&gt;
        # parameter to retrieve the previous page in the result set.
    &quot;tokenPagination&quot;: { # Stub token pagination template to suppress results.
    },
    &quot;kind&quot;: &quot;youtube#liveBroadcastListResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string
        # &lt;code&gt;&quot;youtube#liveBroadcastListResponse&quot;&lt;/code&gt;.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The token that can be used as the value of the &lt;code&gt;pageToken&lt;/code&gt;
        # parameter to retrieve the next page in the result set.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="transition">transition(id, broadcastStatus, part, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</code>
  <pre>Transition a broadcast to a given status.

Args:
  id: string, Broadcast to transition. (required)
  broadcastStatus: string, The status to which the broadcast is going to transition. (required)
  part: string, The &lt;code&gt;&lt;strong&gt;part&lt;/strong&gt;&lt;/code&gt; parameter specifies a
comma-separated list of one or more &lt;code&gt;liveBroadcast&lt;/code&gt; resource
properties that the API response will include. The &lt;code&gt;part&lt;/code&gt; names
that you can include in the parameter value are &lt;code&gt;id&lt;/code&gt;,
&lt;code&gt;snippet&lt;/code&gt;, &lt;code&gt;contentDetails&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;. (required) (repeated)
  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A &lt;code&gt;&lt;strong&gt;liveBroadcast&lt;/strong&gt;&lt;/code&gt; resource represents an event
      # that will be streamed, via live video, on YouTube.
    &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the broadcast.
    &quot;statistics&quot;: { # Statistics about the live broadcast. These represent a snapshot of the values # The &lt;code&gt;statistics&lt;/code&gt; object contains info about the event&#x27;s current
        # stats. These include concurrent viewers and total chat count. Statistics
        # can change (in either direction) during the lifetime of an event.
        # Statistics are only returned while the event is live.
        # at the time of the request. Statistics are only returned for live broadcasts.
      &quot;totalChatCount&quot;: &quot;A String&quot;, # The total number of live chat messages currently on the broadcast. The
          # property and its value will be present if the broadcast is public, has
          # the live chat feature enabled, and has at least one message. Note that
          # this field will not be filled after the broadcast ends. So this property
          # would not identify the number of chat messages for an archived video of a
          # completed live broadcast.
    },
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;snippet&quot;: { # Basic broadcast information. # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the event,
        # including its title, description, start time, and end time.
      &quot;scheduledStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to start. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
          # is publishing the broadcast.
      &quot;description&quot;: &quot;A String&quot;, # The broadcast&#x27;s description. As with the &lt;code&gt;title&lt;/code&gt;, you can set
          # this field by modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#snippet.description&quot;&gt;description&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;title&quot;: &quot;A String&quot;, # The broadcast&#x27;s title. Note that the broadcast represents exactly one
          # YouTube video. You can set this field by modifying the broadcast resource
          # or by setting the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/docs/videos#snippet.title&quot;&gt;title&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the broadcast was added to YouTube&#x27;s live broadcast
          # schedule. The value is specified in
          # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;liveChatId&quot;: &quot;A String&quot;, # The id of the live chat for this broadcast.
      &quot;isDefaultBroadcast&quot;: True or False, # Indicates whether this broadcast is the default broadcast.
          # Internal only.
      &quot;actualEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually ended. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;complete&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;scheduledEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to end. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;actualStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually started. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;live&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;thumbnails&quot;: { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the broadcast. For each nested
          # object in this object, the key is the name of the thumbnail image, and
          # the value is an object that contains other information about the
          # thumbnail.
        &quot;medium&quot;: { # A thumbnail is an image representing a YouTube resource. # The medium quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;standard&quot;: { # A thumbnail is an image representing a YouTube resource. # The standard quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;default&quot;: { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;maxres&quot;: { # A thumbnail is an image representing a YouTube resource. # The maximum resolution quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;high&quot;: { # A thumbnail is an image representing a YouTube resource. # The high quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
      },
    },
    &quot;kind&quot;: &quot;youtube#liveBroadcast&quot;, # Identifies what kind of resource this is. Value: the fixed string
        # &lt;code&gt;&quot;youtube#liveBroadcast&quot;&lt;/code&gt;.
    &quot;contentDetails&quot;: { # Detailed settings of a broadcast. # The &lt;code&gt;contentDetails&lt;/code&gt; object contains information about the
        # event&#x27;s video content, such as whether the content can be shown in an
        # embedded video player or if it will be archived and therefore available
        # for viewing after the event has concluded.
      &quot;boundStreamId&quot;: &quot;A String&quot;, # This value uniquely identifies the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams&quot;&gt;live stream&lt;/a&gt;&lt;/code&gt;
          # bound to the broadcast.
      &quot;closedCaptionsType&quot;: &quot;A String&quot;,
      &quot;startWithSlate&quot;: True or False, # This setting indicates whether the broadcast should automatically begin
          # with an &lt;a
          # href=&quot;/youtube/v3/live/getting-started#Displaying_Slates&quot;&gt;in-stream
          # slate&lt;/a&gt; when you update the broadcast&#x27;s status to &lt;code&gt;live&lt;/code&gt;.
          # After updating the status, you then need to send a
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveCuepoints/insert&quot;&gt;liveCuepoints.insert&lt;/a&gt;&lt;/code&gt;
          # request that sets the cuepoint&#x27;s &lt;code&gt;eventState&lt;/code&gt; to
          # &lt;code&gt;end&lt;/code&gt; to remove the in-stream slate and make your broadcast
          # stream visible to viewers.
      &quot;boundStreamLastUpdateTimeMs&quot;: &quot;A String&quot;, # The date and time that the live stream referenced by
          # &lt;code&gt;boundStreamId&lt;/code&gt; was last updated.
      &quot;enableDvr&quot;: True or False, # This setting determines whether viewers can access DVR controls while
          # watching the video. DVR controls enable the viewer to control the video
          # playback experience by pausing, rewinding, or fast forwarding content.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must set the value to &lt;code&gt;true&lt;/code&gt;
          # and also set the &lt;code&gt;enableArchive&lt;/code&gt; property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want to make playback available immediately
          # after the broadcast ends.
      &quot;enableEmbed&quot;: True or False, # This setting indicates whether the broadcast video can be played in an
          # embedded player. If you choose to archive the video (using the
          # &lt;code&gt;enableArchive&lt;/code&gt; property), this setting will also apply to
          # the archived video.
      &quot;enableClosedCaptions&quot;: True or False, # This setting indicates whether HTTP POST closed captioning is enabled for
          # this broadcast. The ingestion URL of the closed captions is returned
          # through the liveStreams API.  This is mutually exclusive with using the
          # &lt;code&gt;closed_captions_type&lt;/code&gt; property, and is equivalent to setting
          # &lt;code&gt;closed_captions_type&lt;/code&gt; to CLOSED_CAPTIONS_HTTP_POST.
      &quot;recordFromStart&quot;: True or False, # Automatically start recording after the event goes live.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must also set the &lt;code&gt;enableDvr&lt;/code&gt;
          # property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want the playback to be available immediately
          # after the broadcast ends. If you set this property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; but do not also set the &lt;code&gt;enableDvr&lt;/code&gt; property
          # to &lt;code&gt;true&lt;/code&gt;, there may be a delay of around one day before the
          # archived video will be available for playback.
      &quot;monitorStream&quot;: { # Settings and Info of the monitor stream # The &lt;code&gt;monitorStream&lt;/code&gt; object contains information about the
          # monitor stream, which the broadcaster can use to review the event
          # content before the broadcast stream is shown publicly.
        &quot;embedHtml&quot;: &quot;A String&quot;, # HTML code that embeds a player that plays the monitor stream.
        &quot;broadcastStreamDelayMs&quot;: 42, # If you have set the
            # &lt;code&gt;&lt;a href=&quot;#enableMonitorStream&quot;&gt;enableMonitorStream&lt;/a&gt;&lt;/code&gt;
            # property to &lt;code&gt;true&lt;/code&gt;, then this property determines the
            # length of the live broadcast delay.
        &quot;enableMonitorStream&quot;: True or False, # This value determines whether the monitor stream is enabled for the
            # broadcast. If the monitor stream is enabled, then YouTube will
            # broadcast the event content on a special stream intended only for
            # the broadcaster&#x27;s consumption. The broadcaster can use the stream
            # to review the event content and also to identify the optimal times
            # to insert cuepoints.&lt;br&gt;&lt;br&gt;
            # You need to set this value to &lt;code&gt;true&lt;/code&gt; if you intend to have
            # a broadcast delay for your event.&lt;br&gt;&lt;br&gt;
            # &lt;strong&gt;Note:&lt;/strong&gt; This property cannot be updated once the
            # broadcast is in the &lt;code&gt;testing&lt;/code&gt; or &lt;code&gt;live&lt;/code&gt; state.
      },
      &quot;enableContentEncryption&quot;: True or False, # This setting indicates whether YouTube should enable content encryption
          # for the broadcast.
      &quot;enableAutoStop&quot;: True or False, # This setting indicates whether auto stop is enabled for this broadcast.
          # The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          # This setting can only be used by Events.
      &quot;latencyPreference&quot;: &quot;A String&quot;, # If both this and enable_low_latency are set, they must match.
          # LATENCY_NORMAL should match enable_low_latency=false
          # LATENCY_LOW should match enable_low_latency=true
          # LATENCY_ULTRA_LOW should have enable_low_latency omitted.
      &quot;projection&quot;: &quot;A String&quot;, # The projection format of this broadcast. This defaults to
          # &lt;code&gt;rectangular&lt;/code&gt;.
      &quot;mesh&quot;: &quot;A String&quot;, # The mesh for projecting the video if &lt;code&gt;projection&lt;/code&gt; is
          # &lt;code&gt;mesh&lt;/code&gt;. The mesh value must be a UTF-8 string containing the
          # base-64 encoding of 3D mesh data that follows the &lt;a
          # href=&quot;https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md&quot;&gt;
          # Spherical Video V2 RFC specification&lt;/a&gt; for an mshp box, excluding the box
          # size and type but including the following four reserved zero bytes for the
          # version and flags.
      &quot;enableLowLatency&quot;: True or False, # Indicates whether this broadcast has low latency enabled.
      &quot;enableAutoStart&quot;: True or False, # This setting indicates whether auto start is enabled for this broadcast.
          #  The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #  This setting can only be used by Events.
    },
    &quot;status&quot;: { # Live broadcast state. # The &lt;code&gt;status&lt;/code&gt; object contains information about the event&#x27;s
        # status.
      &quot;selfDeclaredMadeForKids&quot;: True or False, # This field will be set to True if the creator declares the broadcast to be
          # kids only: go/live-cw-work.
      &quot;recordingStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s recording status.
      &quot;privacyStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s privacy status. Note that the broadcast represents
          # exactly one YouTube video, so the privacy settings are identical to
          # those supported for videos. In addition, you can set this field by
          # modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#status.privacyStatus&quot;
          # &gt;privacyStatus&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;lifeCycleStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s status. The status can be updated using the API&#x27;s
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveBroadcasts/transition&quot;
          # &gt;liveBroadcasts.transition&lt;/a&gt;&lt;/code&gt; method.
      &quot;liveBroadcastPriority&quot;: &quot;A String&quot;, # Priority of the live broadcast event (internal state).
      &quot;madeForKids&quot;: True or False, # Whether the broadcast is made for kids or not, decided by YouTube instead
          # of the creator. This field is read only.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(part, body=None, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None, x__xgafv=None)</code>
  <pre>Updates an existing broadcast for the authenticated user.

Args:
  part: string, The &lt;code&gt;&lt;strong&gt;part&lt;/strong&gt;&lt;/code&gt; parameter serves two purposes in
this operation. It identifies the properties that the write operation will
set as well as the properties that the API response will
include.&lt;br&gt;&lt;br&gt;The &lt;code&gt;part&lt;/code&gt; properties that you can include in
the parameter value are &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;snippet&lt;/code&gt;,
&lt;code&gt;contentDetails&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;.&lt;br&gt;&lt;br&gt;Note that this
method will override the existing values for all of the mutable properties
that are contained in any parts that the parameter value specifies. For
example, a
broadcast&#x27;s privacy status is defined in the &lt;code&gt;status&lt;/code&gt; part. As
such, if your request is updating a private or unlisted broadcast, and the
request&#x27;s &lt;code&gt;part&lt;/code&gt; parameter value includes the
&lt;code&gt;status&lt;/code&gt; part, the broadcast&#x27;s privacy setting will be updated
to whatever value the request body specifies. If the request body does not
specify a value, the existing privacy setting will be removed and the
broadcast will revert to the default privacy setting. (required) (repeated)
  body: object, The request body.
    The object takes the form of:

{ # A &lt;code&gt;&lt;strong&gt;liveBroadcast&lt;/strong&gt;&lt;/code&gt; resource represents an event
    # that will be streamed, via live video, on YouTube.
  &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the broadcast.
  &quot;statistics&quot;: { # Statistics about the live broadcast. These represent a snapshot of the values # The &lt;code&gt;statistics&lt;/code&gt; object contains info about the event&#x27;s current
      # stats. These include concurrent viewers and total chat count. Statistics
      # can change (in either direction) during the lifetime of an event.
      # Statistics are only returned while the event is live.
      # at the time of the request. Statistics are only returned for live broadcasts.
    &quot;totalChatCount&quot;: &quot;A String&quot;, # The total number of live chat messages currently on the broadcast. The
        # property and its value will be present if the broadcast is public, has
        # the live chat feature enabled, and has at least one message. Note that
        # this field will not be filled after the broadcast ends. So this property
        # would not identify the number of chat messages for an archived video of a
        # completed live broadcast.
  },
  &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
  &quot;snippet&quot;: { # Basic broadcast information. # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the event,
      # including its title, description, start time, and end time.
    &quot;scheduledStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to start. The value
        # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
        # is publishing the broadcast.
    &quot;description&quot;: &quot;A String&quot;, # The broadcast&#x27;s description. As with the &lt;code&gt;title&lt;/code&gt;, you can set
        # this field by modifying the broadcast resource or by setting the
        # &lt;code&gt;&lt;a
        # href=&quot;/youtube/v3/docs/videos#snippet.description&quot;&gt;description&lt;/a&gt;&lt;/code&gt;
        # field of the corresponding video resource.
    &quot;title&quot;: &quot;A String&quot;, # The broadcast&#x27;s title. Note that the broadcast represents exactly one
        # YouTube video. You can set this field by modifying the broadcast resource
        # or by setting the
        # &lt;code&gt;&lt;a href=&quot;/youtube/v3/docs/videos#snippet.title&quot;&gt;title&lt;/a&gt;&lt;/code&gt;
        # field of the corresponding video resource.
    &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the broadcast was added to YouTube&#x27;s live broadcast
        # schedule. The value is specified in
        # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;liveChatId&quot;: &quot;A String&quot;, # The id of the live chat for this broadcast.
    &quot;isDefaultBroadcast&quot;: True or False, # Indicates whether this broadcast is the default broadcast.
        # Internal only.
    &quot;actualEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually ended. This information is
        # only available once the broadcast&#x27;s state is &lt;code&gt;complete&lt;/code&gt;. The
        # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;scheduledEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to end. The value
        # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;actualStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually started. This information is
        # only available once the broadcast&#x27;s state is &lt;code&gt;live&lt;/code&gt;. The
        # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
        # format.
    &quot;thumbnails&quot;: { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the broadcast. For each nested
        # object in this object, the key is the name of the thumbnail image, and
        # the value is an object that contains other information about the
        # thumbnail.
      &quot;medium&quot;: { # A thumbnail is an image representing a YouTube resource. # The medium quality image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
      &quot;standard&quot;: { # A thumbnail is an image representing a YouTube resource. # The standard quality image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
      &quot;default&quot;: { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
      &quot;maxres&quot;: { # A thumbnail is an image representing a YouTube resource. # The maximum resolution quality image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
      &quot;high&quot;: { # A thumbnail is an image representing a YouTube resource. # The high quality image for this resource.
        &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
        &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
        &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
      },
    },
  },
  &quot;kind&quot;: &quot;youtube#liveBroadcast&quot;, # Identifies what kind of resource this is. Value: the fixed string
      # &lt;code&gt;&quot;youtube#liveBroadcast&quot;&lt;/code&gt;.
  &quot;contentDetails&quot;: { # Detailed settings of a broadcast. # The &lt;code&gt;contentDetails&lt;/code&gt; object contains information about the
      # event&#x27;s video content, such as whether the content can be shown in an
      # embedded video player or if it will be archived and therefore available
      # for viewing after the event has concluded.
    &quot;boundStreamId&quot;: &quot;A String&quot;, # This value uniquely identifies the
        # &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams&quot;&gt;live stream&lt;/a&gt;&lt;/code&gt;
        # bound to the broadcast.
    &quot;closedCaptionsType&quot;: &quot;A String&quot;,
    &quot;startWithSlate&quot;: True or False, # This setting indicates whether the broadcast should automatically begin
        # with an &lt;a
        # href=&quot;/youtube/v3/live/getting-started#Displaying_Slates&quot;&gt;in-stream
        # slate&lt;/a&gt; when you update the broadcast&#x27;s status to &lt;code&gt;live&lt;/code&gt;.
        # After updating the status, you then need to send a
        # &lt;code&gt;&lt;a
        # href=&quot;/youtube/v3/live/docs/liveCuepoints/insert&quot;&gt;liveCuepoints.insert&lt;/a&gt;&lt;/code&gt;
        # request that sets the cuepoint&#x27;s &lt;code&gt;eventState&lt;/code&gt; to
        # &lt;code&gt;end&lt;/code&gt; to remove the in-stream slate and make your broadcast
        # stream visible to viewers.
    &quot;boundStreamLastUpdateTimeMs&quot;: &quot;A String&quot;, # The date and time that the live stream referenced by
        # &lt;code&gt;boundStreamId&lt;/code&gt; was last updated.
    &quot;enableDvr&quot;: True or False, # This setting determines whether viewers can access DVR controls while
        # watching the video. DVR controls enable the viewer to control the video
        # playback experience by pausing, rewinding, or fast forwarding content.
        # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
        #
        # &lt;strong&gt;Important:&lt;/strong&gt; You must set the value to &lt;code&gt;true&lt;/code&gt;
        # and also set the &lt;code&gt;enableArchive&lt;/code&gt; property&#x27;s value to
        # &lt;code&gt;true&lt;/code&gt; if you want to make playback available immediately
        # after the broadcast ends.
    &quot;enableEmbed&quot;: True or False, # This setting indicates whether the broadcast video can be played in an
        # embedded player. If you choose to archive the video (using the
        # &lt;code&gt;enableArchive&lt;/code&gt; property), this setting will also apply to
        # the archived video.
    &quot;enableClosedCaptions&quot;: True or False, # This setting indicates whether HTTP POST closed captioning is enabled for
        # this broadcast. The ingestion URL of the closed captions is returned
        # through the liveStreams API.  This is mutually exclusive with using the
        # &lt;code&gt;closed_captions_type&lt;/code&gt; property, and is equivalent to setting
        # &lt;code&gt;closed_captions_type&lt;/code&gt; to CLOSED_CAPTIONS_HTTP_POST.
    &quot;recordFromStart&quot;: True or False, # Automatically start recording after the event goes live.
        # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
        #
        # &lt;strong&gt;Important:&lt;/strong&gt; You must also set the &lt;code&gt;enableDvr&lt;/code&gt;
        # property&#x27;s value to
        # &lt;code&gt;true&lt;/code&gt; if you want the playback to be available immediately
        # after the broadcast ends. If you set this property&#x27;s value to
        # &lt;code&gt;true&lt;/code&gt; but do not also set the &lt;code&gt;enableDvr&lt;/code&gt; property
        # to &lt;code&gt;true&lt;/code&gt;, there may be a delay of around one day before the
        # archived video will be available for playback.
    &quot;monitorStream&quot;: { # Settings and Info of the monitor stream # The &lt;code&gt;monitorStream&lt;/code&gt; object contains information about the
        # monitor stream, which the broadcaster can use to review the event
        # content before the broadcast stream is shown publicly.
      &quot;embedHtml&quot;: &quot;A String&quot;, # HTML code that embeds a player that plays the monitor stream.
      &quot;broadcastStreamDelayMs&quot;: 42, # If you have set the
          # &lt;code&gt;&lt;a href=&quot;#enableMonitorStream&quot;&gt;enableMonitorStream&lt;/a&gt;&lt;/code&gt;
          # property to &lt;code&gt;true&lt;/code&gt;, then this property determines the
          # length of the live broadcast delay.
      &quot;enableMonitorStream&quot;: True or False, # This value determines whether the monitor stream is enabled for the
          # broadcast. If the monitor stream is enabled, then YouTube will
          # broadcast the event content on a special stream intended only for
          # the broadcaster&#x27;s consumption. The broadcaster can use the stream
          # to review the event content and also to identify the optimal times
          # to insert cuepoints.&lt;br&gt;&lt;br&gt;
          # You need to set this value to &lt;code&gt;true&lt;/code&gt; if you intend to have
          # a broadcast delay for your event.&lt;br&gt;&lt;br&gt;
          # &lt;strong&gt;Note:&lt;/strong&gt; This property cannot be updated once the
          # broadcast is in the &lt;code&gt;testing&lt;/code&gt; or &lt;code&gt;live&lt;/code&gt; state.
    },
    &quot;enableContentEncryption&quot;: True or False, # This setting indicates whether YouTube should enable content encryption
        # for the broadcast.
    &quot;enableAutoStop&quot;: True or False, # This setting indicates whether auto stop is enabled for this broadcast.
        # The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
        # This setting can only be used by Events.
    &quot;latencyPreference&quot;: &quot;A String&quot;, # If both this and enable_low_latency are set, they must match.
        # LATENCY_NORMAL should match enable_low_latency=false
        # LATENCY_LOW should match enable_low_latency=true
        # LATENCY_ULTRA_LOW should have enable_low_latency omitted.
    &quot;projection&quot;: &quot;A String&quot;, # The projection format of this broadcast. This defaults to
        # &lt;code&gt;rectangular&lt;/code&gt;.
    &quot;mesh&quot;: &quot;A String&quot;, # The mesh for projecting the video if &lt;code&gt;projection&lt;/code&gt; is
        # &lt;code&gt;mesh&lt;/code&gt;. The mesh value must be a UTF-8 string containing the
        # base-64 encoding of 3D mesh data that follows the &lt;a
        # href=&quot;https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md&quot;&gt;
        # Spherical Video V2 RFC specification&lt;/a&gt; for an mshp box, excluding the box
        # size and type but including the following four reserved zero bytes for the
        # version and flags.
    &quot;enableLowLatency&quot;: True or False, # Indicates whether this broadcast has low latency enabled.
    &quot;enableAutoStart&quot;: True or False, # This setting indicates whether auto start is enabled for this broadcast.
        #  The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
        #  This setting can only be used by Events.
  },
  &quot;status&quot;: { # Live broadcast state. # The &lt;code&gt;status&lt;/code&gt; object contains information about the event&#x27;s
      # status.
    &quot;selfDeclaredMadeForKids&quot;: True or False, # This field will be set to True if the creator declares the broadcast to be
        # kids only: go/live-cw-work.
    &quot;recordingStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s recording status.
    &quot;privacyStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s privacy status. Note that the broadcast represents
        # exactly one YouTube video, so the privacy settings are identical to
        # those supported for videos. In addition, you can set this field by
        # modifying the broadcast resource or by setting the
        # &lt;code&gt;&lt;a
        # href=&quot;/youtube/v3/docs/videos#status.privacyStatus&quot;
        # &gt;privacyStatus&lt;/a&gt;&lt;/code&gt;
        # field of the corresponding video resource.
    &quot;lifeCycleStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s status. The status can be updated using the API&#x27;s
        # &lt;code&gt;&lt;a
        # href=&quot;/youtube/v3/live/docs/liveBroadcasts/transition&quot;
        # &gt;liveBroadcasts.transition&lt;/a&gt;&lt;/code&gt; method.
    &quot;liveBroadcastPriority&quot;: &quot;A String&quot;, # Priority of the live broadcast event (internal state).
    &quot;madeForKids&quot;: True or False, # Whether the broadcast is made for kids or not, decided by YouTube instead
        # of the creator. This field is read only.
  },
}

  onBehalfOfContentOwner: string, &lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwner&lt;/strong&gt;&lt;/code&gt; parameter indicates
that the
request&#x27;s authorization credentials identify a YouTube CMS user who is
acting on behalf of the content owner specified in the parameter value.
This parameter is intended for YouTube content partners that own and manage
many different YouTube channels. It allows content owners to authenticate
once and get access to all their video and channel data, without having to
provide authentication credentials for each individual channel. The CMS
account that the user authenticates with must be linked to the specified
YouTube content owner.
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly &lt;a
href=&quot;/youtube/v3/guides/authentication&quot;&gt;authorized request&lt;/a&gt;.
&lt;strong&gt;Note:&lt;/strong&gt; This parameter is intended exclusively for YouTube
content partners.&lt;br&gt;&lt;br&gt;The
&lt;code&gt;&lt;strong&gt;onBehalfOfContentOwnerChannel&lt;/strong&gt;&lt;/code&gt; parameter
specifies the YouTube channel ID of the channel to which a video is being
added. This parameter is required when a request specifies a value for the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter, and it can only be used in
conjunction with that parameter. In addition, the request must be
authorized using a CMS account that is linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies. Finally, the
channel that the &lt;code&gt;onBehalfOfContentOwnerChannel&lt;/code&gt; parameter value
specifies must be linked to the content owner that the
&lt;code&gt;onBehalfOfContentOwner&lt;/code&gt; parameter specifies.&lt;br&gt;&lt;br&gt;This
parameter is intended for YouTube content partners that own and manage many
different YouTube channels. It allows content owners to authenticate once
and perform actions on behalf of the channel specified in the parameter
value, without having to provide authentication credentials for each
separate channel.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A &lt;code&gt;&lt;strong&gt;liveBroadcast&lt;/strong&gt;&lt;/code&gt; resource represents an event
      # that will be streamed, via live video, on YouTube.
    &quot;id&quot;: &quot;A String&quot;, # The ID that YouTube assigns to uniquely identify the broadcast.
    &quot;statistics&quot;: { # Statistics about the live broadcast. These represent a snapshot of the values # The &lt;code&gt;statistics&lt;/code&gt; object contains info about the event&#x27;s current
        # stats. These include concurrent viewers and total chat count. Statistics
        # can change (in either direction) during the lifetime of an event.
        # Statistics are only returned while the event is live.
        # at the time of the request. Statistics are only returned for live broadcasts.
      &quot;totalChatCount&quot;: &quot;A String&quot;, # The total number of live chat messages currently on the broadcast. The
          # property and its value will be present if the broadcast is public, has
          # the live chat feature enabled, and has at least one message. Note that
          # this field will not be filled after the broadcast ends. So this property
          # would not identify the number of chat messages for an archived video of a
          # completed live broadcast.
    },
    &quot;etag&quot;: &quot;A String&quot;, # Etag of this resource.
    &quot;snippet&quot;: { # Basic broadcast information. # The &lt;code&gt;snippet&lt;/code&gt; object contains basic details about the event,
        # including its title, description, start time, and end time.
      &quot;scheduledStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to start. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;channelId&quot;: &quot;A String&quot;, # The ID that YouTube uses to uniquely identify the channel that
          # is publishing the broadcast.
      &quot;description&quot;: &quot;A String&quot;, # The broadcast&#x27;s description. As with the &lt;code&gt;title&lt;/code&gt;, you can set
          # this field by modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#snippet.description&quot;&gt;description&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;title&quot;: &quot;A String&quot;, # The broadcast&#x27;s title. Note that the broadcast represents exactly one
          # YouTube video. You can set this field by modifying the broadcast resource
          # or by setting the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/docs/videos#snippet.title&quot;&gt;title&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;publishedAt&quot;: &quot;A String&quot;, # The date and time that the broadcast was added to YouTube&#x27;s live broadcast
          # schedule. The value is specified in
          # &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;liveChatId&quot;: &quot;A String&quot;, # The id of the live chat for this broadcast.
      &quot;isDefaultBroadcast&quot;: True or False, # Indicates whether this broadcast is the default broadcast.
          # Internal only.
      &quot;actualEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually ended. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;complete&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;scheduledEndTime&quot;: &quot;A String&quot;, # The date and time that the broadcast is scheduled to end. The value
          # is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;actualStartTime&quot;: &quot;A String&quot;, # The date and time that the broadcast actually started. This information is
          # only available once the broadcast&#x27;s state is &lt;code&gt;live&lt;/code&gt;. The
          # value is specified in &lt;a href=&quot;//www.w3.org/TR/NOTE-datetime&quot;&gt;ISO 8601&lt;/a&gt;
          # format.
      &quot;thumbnails&quot;: { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the broadcast. For each nested
          # object in this object, the key is the name of the thumbnail image, and
          # the value is an object that contains other information about the
          # thumbnail.
        &quot;medium&quot;: { # A thumbnail is an image representing a YouTube resource. # The medium quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;standard&quot;: { # A thumbnail is an image representing a YouTube resource. # The standard quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;default&quot;: { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;maxres&quot;: { # A thumbnail is an image representing a YouTube resource. # The maximum resolution quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
        &quot;high&quot;: { # A thumbnail is an image representing a YouTube resource. # The high quality image for this resource.
          &quot;width&quot;: 42, # (Optional) Width of the thumbnail image.
          &quot;url&quot;: &quot;A String&quot;, # The thumbnail image&#x27;s URL.
          &quot;height&quot;: 42, # (Optional) Height of the thumbnail image.
        },
      },
    },
    &quot;kind&quot;: &quot;youtube#liveBroadcast&quot;, # Identifies what kind of resource this is. Value: the fixed string
        # &lt;code&gt;&quot;youtube#liveBroadcast&quot;&lt;/code&gt;.
    &quot;contentDetails&quot;: { # Detailed settings of a broadcast. # The &lt;code&gt;contentDetails&lt;/code&gt; object contains information about the
        # event&#x27;s video content, such as whether the content can be shown in an
        # embedded video player or if it will be archived and therefore available
        # for viewing after the event has concluded.
      &quot;boundStreamId&quot;: &quot;A String&quot;, # This value uniquely identifies the
          # &lt;code&gt;&lt;a href=&quot;/youtube/v3/live/docs/liveStreams&quot;&gt;live stream&lt;/a&gt;&lt;/code&gt;
          # bound to the broadcast.
      &quot;closedCaptionsType&quot;: &quot;A String&quot;,
      &quot;startWithSlate&quot;: True or False, # This setting indicates whether the broadcast should automatically begin
          # with an &lt;a
          # href=&quot;/youtube/v3/live/getting-started#Displaying_Slates&quot;&gt;in-stream
          # slate&lt;/a&gt; when you update the broadcast&#x27;s status to &lt;code&gt;live&lt;/code&gt;.
          # After updating the status, you then need to send a
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveCuepoints/insert&quot;&gt;liveCuepoints.insert&lt;/a&gt;&lt;/code&gt;
          # request that sets the cuepoint&#x27;s &lt;code&gt;eventState&lt;/code&gt; to
          # &lt;code&gt;end&lt;/code&gt; to remove the in-stream slate and make your broadcast
          # stream visible to viewers.
      &quot;boundStreamLastUpdateTimeMs&quot;: &quot;A String&quot;, # The date and time that the live stream referenced by
          # &lt;code&gt;boundStreamId&lt;/code&gt; was last updated.
      &quot;enableDvr&quot;: True or False, # This setting determines whether viewers can access DVR controls while
          # watching the video. DVR controls enable the viewer to control the video
          # playback experience by pausing, rewinding, or fast forwarding content.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must set the value to &lt;code&gt;true&lt;/code&gt;
          # and also set the &lt;code&gt;enableArchive&lt;/code&gt; property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want to make playback available immediately
          # after the broadcast ends.
      &quot;enableEmbed&quot;: True or False, # This setting indicates whether the broadcast video can be played in an
          # embedded player. If you choose to archive the video (using the
          # &lt;code&gt;enableArchive&lt;/code&gt; property), this setting will also apply to
          # the archived video.
      &quot;enableClosedCaptions&quot;: True or False, # This setting indicates whether HTTP POST closed captioning is enabled for
          # this broadcast. The ingestion URL of the closed captions is returned
          # through the liveStreams API.  This is mutually exclusive with using the
          # &lt;code&gt;closed_captions_type&lt;/code&gt; property, and is equivalent to setting
          # &lt;code&gt;closed_captions_type&lt;/code&gt; to CLOSED_CAPTIONS_HTTP_POST.
      &quot;recordFromStart&quot;: True or False, # Automatically start recording after the event goes live.
          # The default value for this property is &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #
          # &lt;strong&gt;Important:&lt;/strong&gt; You must also set the &lt;code&gt;enableDvr&lt;/code&gt;
          # property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; if you want the playback to be available immediately
          # after the broadcast ends. If you set this property&#x27;s value to
          # &lt;code&gt;true&lt;/code&gt; but do not also set the &lt;code&gt;enableDvr&lt;/code&gt; property
          # to &lt;code&gt;true&lt;/code&gt;, there may be a delay of around one day before the
          # archived video will be available for playback.
      &quot;monitorStream&quot;: { # Settings and Info of the monitor stream # The &lt;code&gt;monitorStream&lt;/code&gt; object contains information about the
          # monitor stream, which the broadcaster can use to review the event
          # content before the broadcast stream is shown publicly.
        &quot;embedHtml&quot;: &quot;A String&quot;, # HTML code that embeds a player that plays the monitor stream.
        &quot;broadcastStreamDelayMs&quot;: 42, # If you have set the
            # &lt;code&gt;&lt;a href=&quot;#enableMonitorStream&quot;&gt;enableMonitorStream&lt;/a&gt;&lt;/code&gt;
            # property to &lt;code&gt;true&lt;/code&gt;, then this property determines the
            # length of the live broadcast delay.
        &quot;enableMonitorStream&quot;: True or False, # This value determines whether the monitor stream is enabled for the
            # broadcast. If the monitor stream is enabled, then YouTube will
            # broadcast the event content on a special stream intended only for
            # the broadcaster&#x27;s consumption. The broadcaster can use the stream
            # to review the event content and also to identify the optimal times
            # to insert cuepoints.&lt;br&gt;&lt;br&gt;
            # You need to set this value to &lt;code&gt;true&lt;/code&gt; if you intend to have
            # a broadcast delay for your event.&lt;br&gt;&lt;br&gt;
            # &lt;strong&gt;Note:&lt;/strong&gt; This property cannot be updated once the
            # broadcast is in the &lt;code&gt;testing&lt;/code&gt; or &lt;code&gt;live&lt;/code&gt; state.
      },
      &quot;enableContentEncryption&quot;: True or False, # This setting indicates whether YouTube should enable content encryption
          # for the broadcast.
      &quot;enableAutoStop&quot;: True or False, # This setting indicates whether auto stop is enabled for this broadcast.
          # The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          # This setting can only be used by Events.
      &quot;latencyPreference&quot;: &quot;A String&quot;, # If both this and enable_low_latency are set, they must match.
          # LATENCY_NORMAL should match enable_low_latency=false
          # LATENCY_LOW should match enable_low_latency=true
          # LATENCY_ULTRA_LOW should have enable_low_latency omitted.
      &quot;projection&quot;: &quot;A String&quot;, # The projection format of this broadcast. This defaults to
          # &lt;code&gt;rectangular&lt;/code&gt;.
      &quot;mesh&quot;: &quot;A String&quot;, # The mesh for projecting the video if &lt;code&gt;projection&lt;/code&gt; is
          # &lt;code&gt;mesh&lt;/code&gt;. The mesh value must be a UTF-8 string containing the
          # base-64 encoding of 3D mesh data that follows the &lt;a
          # href=&quot;https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md&quot;&gt;
          # Spherical Video V2 RFC specification&lt;/a&gt; for an mshp box, excluding the box
          # size and type but including the following four reserved zero bytes for the
          # version and flags.
      &quot;enableLowLatency&quot;: True or False, # Indicates whether this broadcast has low latency enabled.
      &quot;enableAutoStart&quot;: True or False, # This setting indicates whether auto start is enabled for this broadcast.
          #  The default value for this property is &lt;code&gt;false&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
          #  This setting can only be used by Events.
    },
    &quot;status&quot;: { # Live broadcast state. # The &lt;code&gt;status&lt;/code&gt; object contains information about the event&#x27;s
        # status.
      &quot;selfDeclaredMadeForKids&quot;: True or False, # This field will be set to True if the creator declares the broadcast to be
          # kids only: go/live-cw-work.
      &quot;recordingStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s recording status.
      &quot;privacyStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s privacy status. Note that the broadcast represents
          # exactly one YouTube video, so the privacy settings are identical to
          # those supported for videos. In addition, you can set this field by
          # modifying the broadcast resource or by setting the
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/docs/videos#status.privacyStatus&quot;
          # &gt;privacyStatus&lt;/a&gt;&lt;/code&gt;
          # field of the corresponding video resource.
      &quot;lifeCycleStatus&quot;: &quot;A String&quot;, # The broadcast&#x27;s status. The status can be updated using the API&#x27;s
          # &lt;code&gt;&lt;a
          # href=&quot;/youtube/v3/live/docs/liveBroadcasts/transition&quot;
          # &gt;liveBroadcasts.transition&lt;/a&gt;&lt;/code&gt; method.
      &quot;liveBroadcastPriority&quot;: &quot;A String&quot;, # Priority of the live broadcast event (internal state).
      &quot;madeForKids&quot;: True or False, # Whether the broadcast is made for kids or not, decided by YouTube instead
          # of the creator. This field is read only.
    },
  }</pre>
</div>

</body></html>