<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</a> . <a href="youtube_v3.liveStreams.html">liveStreams</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(id, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None)</a></code></p>
<p class="firstline">Deletes a video stream.</p>
<p class="toc_element">
  <code><a href="#insert">insert(part, body, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None)</a></code></p>
<p class="firstline">Creates a video stream. The stream enables you to send your video to YouTube, which can then broadcast the video to your audience.</p>
<p class="toc_element">
  <code><a href="#list">list(part, onBehalfOfContentOwner=None, pageToken=None, onBehalfOfContentOwnerChannel=None, maxResults=None, mine=None, id=None)</a></code></p>
<p class="firstline">Returns a list of video streams that match the API request parameters.</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="#update">update(part, body, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None)</a></code></p>
<p class="firstline">Updates a video stream. If the properties that you want to change cannot be updated, then you need to create a new stream with the proper settings.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(id, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None)</code>
  <pre>Deletes a video stream.

Args:
  id: string, The id parameter specifies the YouTube live stream ID for the resource that is being deleted. (required)
  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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 authorized request. Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwnerChannel 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 onBehalfOfContentOwner 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 onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.

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.
</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(part, body, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None)</code>
  <pre>Creates a video stream. The stream enables you to send your video to YouTube, which can then broadcast the video to your audience.

Args:
  part: string, The part 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.

The part properties that you can include in the parameter value are id, snippet, cdn, and status. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A live stream describes a live ingestion point.
    "status": { # Brief description of the live stream status. # The status object contains information about live stream's status.
      "streamStatus": "A String",
      "healthStatus": { # The health status of the stream.
        "status": "A String", # The status code of this stream
        "configurationIssues": [ # The configurations issues on this stream
          {
            "reason": "A String", # The short-form reason for this issue.
            "type": "A String", # The kind of error happening.
            "description": "A String", # The long-form description of the issue and how to resolve it.
            "severity": "A String", # How severe this issue is to the stream.
          },
        ],
        "lastUpdateTimeSeconds": "A String", # The last time this status was updated (in seconds)
      },
    },
    "kind": "youtube#liveStream", # Identifies what kind of resource this is. Value: the fixed string "youtube#liveStream".
    "contentDetails": { # Detailed settings of a stream. # The content_details object contains information about the stream, including the closed captions ingestion URL.
      "isReusable": True or False, # Indicates whether the stream is reusable, which means that it can be bound to multiple broadcasts. It is common for broadcasters to reuse the same stream for many different broadcasts if those broadcasts occur at different times.
          #
          # If you set this value to false, then the stream will not be reusable, which means that it can only be bound to one broadcast. Non-reusable streams differ from reusable streams in the following ways:
          # - A non-reusable stream can only be bound to one broadcast.
          # - A non-reusable stream might be deleted by an automated process after the broadcast ends.
          # - The  liveStreams.list method does not list non-reusable streams if you call the method and set the mine parameter to true. The only way to use that method to retrieve the resource for a non-reusable stream is to use the id parameter to identify the stream.
      "closedCaptionsIngestionUrl": "A String", # The ingestion URL where the closed captions of this stream are sent.
    },
    "cdn": { # Brief description of the live stream cdn settings. # The cdn object defines the live stream's content delivery network (CDN) settings. These settings provide details about the manner in which you stream your content to YouTube.
      "ingestionType": "A String", # The method or protocol used to transmit the video stream.
      "ingestionInfo": { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The ingestionInfo object contains information that YouTube provides that you need to transmit your RTMP or HTTP stream to YouTube.
        "backupIngestionAddress": "A String", # The backup ingestion URL that you should use to stream video to YouTube. You have the option of simultaneously streaming the content that you are sending to the ingestionAddress to this URL.
        "streamName": "A String", # The HTTP or RTMP stream name that YouTube assigns to the video stream.
        "ingestionAddress": "A String", # The primary ingestion URL that you should use to stream video to YouTube. You must stream video to this URL.
            #
            # Depending on which application or tool you use to encode your video stream, you may need to enter the stream URL and stream name separately or you may need to concatenate them in the following format:
            #
            # STREAM_URL/STREAM_NAME
      },
      "frameRate": "A String", # The frame rate of the inbound video data.
      "resolution": "A String", # The resolution of the inbound video data.
      "format": "A String", # The format of the video stream that you are sending to Youtube.
    },
    "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
      "isDefaultStream": True or False,
      "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that is transmitting the stream.
      "description": "A String", # The stream's description. The value cannot be longer than 10000 characters.
      "publishedAt": "A String", # The date and time that the stream was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
      "title": "A String", # The stream's title. The value must be between 1 and 128 characters long.
    },
    "etag": "A String", # Etag of this resource.
    "id": "A String", # The ID that YouTube assigns to uniquely identify the stream.
  }

  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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 authorized request. Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwnerChannel 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 onBehalfOfContentOwner 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 onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.

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.

Returns:
  An object of the form:

    { # A live stream describes a live ingestion point.
      "status": { # Brief description of the live stream status. # The status object contains information about live stream's status.
        "streamStatus": "A String",
        "healthStatus": { # The health status of the stream.
          "status": "A String", # The status code of this stream
          "configurationIssues": [ # The configurations issues on this stream
            {
              "reason": "A String", # The short-form reason for this issue.
              "type": "A String", # The kind of error happening.
              "description": "A String", # The long-form description of the issue and how to resolve it.
              "severity": "A String", # How severe this issue is to the stream.
            },
          ],
          "lastUpdateTimeSeconds": "A String", # The last time this status was updated (in seconds)
        },
      },
      "kind": "youtube#liveStream", # Identifies what kind of resource this is. Value: the fixed string "youtube#liveStream".
      "contentDetails": { # Detailed settings of a stream. # The content_details object contains information about the stream, including the closed captions ingestion URL.
        "isReusable": True or False, # Indicates whether the stream is reusable, which means that it can be bound to multiple broadcasts. It is common for broadcasters to reuse the same stream for many different broadcasts if those broadcasts occur at different times.
            #
            # If you set this value to false, then the stream will not be reusable, which means that it can only be bound to one broadcast. Non-reusable streams differ from reusable streams in the following ways:
            # - A non-reusable stream can only be bound to one broadcast.
            # - A non-reusable stream might be deleted by an automated process after the broadcast ends.
            # - The  liveStreams.list method does not list non-reusable streams if you call the method and set the mine parameter to true. The only way to use that method to retrieve the resource for a non-reusable stream is to use the id parameter to identify the stream.
        "closedCaptionsIngestionUrl": "A String", # The ingestion URL where the closed captions of this stream are sent.
      },
      "cdn": { # Brief description of the live stream cdn settings. # The cdn object defines the live stream's content delivery network (CDN) settings. These settings provide details about the manner in which you stream your content to YouTube.
        "ingestionType": "A String", # The method or protocol used to transmit the video stream.
        "ingestionInfo": { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The ingestionInfo object contains information that YouTube provides that you need to transmit your RTMP or HTTP stream to YouTube.
          "backupIngestionAddress": "A String", # The backup ingestion URL that you should use to stream video to YouTube. You have the option of simultaneously streaming the content that you are sending to the ingestionAddress to this URL.
          "streamName": "A String", # The HTTP or RTMP stream name that YouTube assigns to the video stream.
          "ingestionAddress": "A String", # The primary ingestion URL that you should use to stream video to YouTube. You must stream video to this URL.
              #
              # Depending on which application or tool you use to encode your video stream, you may need to enter the stream URL and stream name separately or you may need to concatenate them in the following format:
              #
              # STREAM_URL/STREAM_NAME
        },
        "frameRate": "A String", # The frame rate of the inbound video data.
        "resolution": "A String", # The resolution of the inbound video data.
        "format": "A String", # The format of the video stream that you are sending to Youtube.
      },
      "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
        "isDefaultStream": True or False,
        "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that is transmitting the stream.
        "description": "A String", # The stream's description. The value cannot be longer than 10000 characters.
        "publishedAt": "A String", # The date and time that the stream was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
        "title": "A String", # The stream's title. The value must be between 1 and 128 characters long.
      },
      "etag": "A String", # Etag of this resource.
      "id": "A String", # The ID that YouTube assigns to uniquely identify the stream.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(part, onBehalfOfContentOwner=None, pageToken=None, onBehalfOfContentOwnerChannel=None, maxResults=None, mine=None, id=None)</code>
  <pre>Returns a list of video streams that match the API request parameters.

Args:
  part: string, The part parameter specifies a comma-separated list of one or more liveStream resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, cdn, and status. (required)
  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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.
  pageToken: string, The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.
  onBehalfOfContentOwnerChannel: string, This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwnerChannel 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 onBehalfOfContentOwner 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 onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.

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.
  maxResults: integer, The maxResults parameter specifies the maximum number of items that should be returned in the result set.
  mine: boolean, The mine parameter can be used to instruct the API to only return streams owned by the authenticated user. Set the parameter value to true to only retrieve your own streams.
  id: string, The id parameter specifies a comma-separated list of YouTube stream IDs that identify the streams being retrieved. In a liveStream resource, the id property specifies the stream's ID.

Returns:
  An object of the form:

    {
    "eventId": "A String", # Serialized EventId of the request which produced this response.
    "nextPageToken": "A String", # The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set.
    "kind": "youtube#liveStreamListResponse", # Identifies what kind of resource this is. Value: the fixed string "youtube#liveStreamListResponse".
    "visitorId": "A String", # The visitorId identifies the visitor.
    "items": [ # A list of live streams that match the request criteria.
      { # A live stream describes a live ingestion point.
          "status": { # Brief description of the live stream status. # The status object contains information about live stream's status.
            "streamStatus": "A String",
            "healthStatus": { # The health status of the stream.
              "status": "A String", # The status code of this stream
              "configurationIssues": [ # The configurations issues on this stream
                {
                  "reason": "A String", # The short-form reason for this issue.
                  "type": "A String", # The kind of error happening.
                  "description": "A String", # The long-form description of the issue and how to resolve it.
                  "severity": "A String", # How severe this issue is to the stream.
                },
              ],
              "lastUpdateTimeSeconds": "A String", # The last time this status was updated (in seconds)
            },
          },
          "kind": "youtube#liveStream", # Identifies what kind of resource this is. Value: the fixed string "youtube#liveStream".
          "contentDetails": { # Detailed settings of a stream. # The content_details object contains information about the stream, including the closed captions ingestion URL.
            "isReusable": True or False, # Indicates whether the stream is reusable, which means that it can be bound to multiple broadcasts. It is common for broadcasters to reuse the same stream for many different broadcasts if those broadcasts occur at different times.
                #
                # If you set this value to false, then the stream will not be reusable, which means that it can only be bound to one broadcast. Non-reusable streams differ from reusable streams in the following ways:
                # - A non-reusable stream can only be bound to one broadcast.
                # - A non-reusable stream might be deleted by an automated process after the broadcast ends.
                # - The  liveStreams.list method does not list non-reusable streams if you call the method and set the mine parameter to true. The only way to use that method to retrieve the resource for a non-reusable stream is to use the id parameter to identify the stream.
            "closedCaptionsIngestionUrl": "A String", # The ingestion URL where the closed captions of this stream are sent.
          },
          "cdn": { # Brief description of the live stream cdn settings. # The cdn object defines the live stream's content delivery network (CDN) settings. These settings provide details about the manner in which you stream your content to YouTube.
            "ingestionType": "A String", # The method or protocol used to transmit the video stream.
            "ingestionInfo": { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The ingestionInfo object contains information that YouTube provides that you need to transmit your RTMP or HTTP stream to YouTube.
              "backupIngestionAddress": "A String", # The backup ingestion URL that you should use to stream video to YouTube. You have the option of simultaneously streaming the content that you are sending to the ingestionAddress to this URL.
              "streamName": "A String", # The HTTP or RTMP stream name that YouTube assigns to the video stream.
              "ingestionAddress": "A String", # The primary ingestion URL that you should use to stream video to YouTube. You must stream video to this URL.
                  #
                  # Depending on which application or tool you use to encode your video stream, you may need to enter the stream URL and stream name separately or you may need to concatenate them in the following format:
                  #
                  # STREAM_URL/STREAM_NAME
            },
            "frameRate": "A String", # The frame rate of the inbound video data.
            "resolution": "A String", # The resolution of the inbound video data.
            "format": "A String", # The format of the video stream that you are sending to Youtube.
          },
          "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
            "isDefaultStream": True or False,
            "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that is transmitting the stream.
            "description": "A String", # The stream's description. The value cannot be longer than 10000 characters.
            "publishedAt": "A String", # The date and time that the stream was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
            "title": "A String", # The stream's title. The value must be between 1 and 128 characters long.
          },
          "etag": "A String", # Etag of this resource.
          "id": "A String", # The ID that YouTube assigns to uniquely identify the stream.
        },
    ],
    "tokenPagination": { # Stub token pagination template to suppress results.
    },
    "etag": "A String", # Etag of this resource.
    "prevPageToken": "A String", # The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set.
    "pageInfo": { # Paging details for lists of resources, including total number of items available and number of resources returned in a single page.
      "totalResults": 42, # The total number of results in the result set.
      "resultsPerPage": 42, # The number of results included in the API response.
    },
  }</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 'execute()' 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="update">update(part, body, onBehalfOfContentOwner=None, onBehalfOfContentOwnerChannel=None)</code>
  <pre>Updates a video stream. If the properties that you want to change cannot be updated, then you need to create a new stream with the proper settings.

Args:
  part: string, The part 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.

The part properties that you can include in the parameter value are id, snippet, cdn, and status.

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. If the request body does not specify a value for a mutable property, the existing value for that property will be removed. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A live stream describes a live ingestion point.
    "status": { # Brief description of the live stream status. # The status object contains information about live stream's status.
      "streamStatus": "A String",
      "healthStatus": { # The health status of the stream.
        "status": "A String", # The status code of this stream
        "configurationIssues": [ # The configurations issues on this stream
          {
            "reason": "A String", # The short-form reason for this issue.
            "type": "A String", # The kind of error happening.
            "description": "A String", # The long-form description of the issue and how to resolve it.
            "severity": "A String", # How severe this issue is to the stream.
          },
        ],
        "lastUpdateTimeSeconds": "A String", # The last time this status was updated (in seconds)
      },
    },
    "kind": "youtube#liveStream", # Identifies what kind of resource this is. Value: the fixed string "youtube#liveStream".
    "contentDetails": { # Detailed settings of a stream. # The content_details object contains information about the stream, including the closed captions ingestion URL.
      "isReusable": True or False, # Indicates whether the stream is reusable, which means that it can be bound to multiple broadcasts. It is common for broadcasters to reuse the same stream for many different broadcasts if those broadcasts occur at different times.
          #
          # If you set this value to false, then the stream will not be reusable, which means that it can only be bound to one broadcast. Non-reusable streams differ from reusable streams in the following ways:
          # - A non-reusable stream can only be bound to one broadcast.
          # - A non-reusable stream might be deleted by an automated process after the broadcast ends.
          # - The  liveStreams.list method does not list non-reusable streams if you call the method and set the mine parameter to true. The only way to use that method to retrieve the resource for a non-reusable stream is to use the id parameter to identify the stream.
      "closedCaptionsIngestionUrl": "A String", # The ingestion URL where the closed captions of this stream are sent.
    },
    "cdn": { # Brief description of the live stream cdn settings. # The cdn object defines the live stream's content delivery network (CDN) settings. These settings provide details about the manner in which you stream your content to YouTube.
      "ingestionType": "A String", # The method or protocol used to transmit the video stream.
      "ingestionInfo": { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The ingestionInfo object contains information that YouTube provides that you need to transmit your RTMP or HTTP stream to YouTube.
        "backupIngestionAddress": "A String", # The backup ingestion URL that you should use to stream video to YouTube. You have the option of simultaneously streaming the content that you are sending to the ingestionAddress to this URL.
        "streamName": "A String", # The HTTP or RTMP stream name that YouTube assigns to the video stream.
        "ingestionAddress": "A String", # The primary ingestion URL that you should use to stream video to YouTube. You must stream video to this URL.
            #
            # Depending on which application or tool you use to encode your video stream, you may need to enter the stream URL and stream name separately or you may need to concatenate them in the following format:
            #
            # STREAM_URL/STREAM_NAME
      },
      "frameRate": "A String", # The frame rate of the inbound video data.
      "resolution": "A String", # The resolution of the inbound video data.
      "format": "A String", # The format of the video stream that you are sending to Youtube.
    },
    "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
      "isDefaultStream": True or False,
      "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that is transmitting the stream.
      "description": "A String", # The stream's description. The value cannot be longer than 10000 characters.
      "publishedAt": "A String", # The date and time that the stream was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
      "title": "A String", # The stream's title. The value must be between 1 and 128 characters long.
    },
    "etag": "A String", # Etag of this resource.
    "id": "A String", # The ID that YouTube assigns to uniquely identify the stream.
  }

  onBehalfOfContentOwner: string, Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwner parameter indicates that the request'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 authorized request. Note: This parameter is intended exclusively for YouTube content partners.

The onBehalfOfContentOwnerChannel 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 onBehalfOfContentOwner 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 onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.

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.

Returns:
  An object of the form:

    { # A live stream describes a live ingestion point.
      "status": { # Brief description of the live stream status. # The status object contains information about live stream's status.
        "streamStatus": "A String",
        "healthStatus": { # The health status of the stream.
          "status": "A String", # The status code of this stream
          "configurationIssues": [ # The configurations issues on this stream
            {
              "reason": "A String", # The short-form reason for this issue.
              "type": "A String", # The kind of error happening.
              "description": "A String", # The long-form description of the issue and how to resolve it.
              "severity": "A String", # How severe this issue is to the stream.
            },
          ],
          "lastUpdateTimeSeconds": "A String", # The last time this status was updated (in seconds)
        },
      },
      "kind": "youtube#liveStream", # Identifies what kind of resource this is. Value: the fixed string "youtube#liveStream".
      "contentDetails": { # Detailed settings of a stream. # The content_details object contains information about the stream, including the closed captions ingestion URL.
        "isReusable": True or False, # Indicates whether the stream is reusable, which means that it can be bound to multiple broadcasts. It is common for broadcasters to reuse the same stream for many different broadcasts if those broadcasts occur at different times.
            #
            # If you set this value to false, then the stream will not be reusable, which means that it can only be bound to one broadcast. Non-reusable streams differ from reusable streams in the following ways:
            # - A non-reusable stream can only be bound to one broadcast.
            # - A non-reusable stream might be deleted by an automated process after the broadcast ends.
            # - The  liveStreams.list method does not list non-reusable streams if you call the method and set the mine parameter to true. The only way to use that method to retrieve the resource for a non-reusable stream is to use the id parameter to identify the stream.
        "closedCaptionsIngestionUrl": "A String", # The ingestion URL where the closed captions of this stream are sent.
      },
      "cdn": { # Brief description of the live stream cdn settings. # The cdn object defines the live stream's content delivery network (CDN) settings. These settings provide details about the manner in which you stream your content to YouTube.
        "ingestionType": "A String", # The method or protocol used to transmit the video stream.
        "ingestionInfo": { # Describes information necessary for ingesting an RTMP or an HTTP stream. # The ingestionInfo object contains information that YouTube provides that you need to transmit your RTMP or HTTP stream to YouTube.
          "backupIngestionAddress": "A String", # The backup ingestion URL that you should use to stream video to YouTube. You have the option of simultaneously streaming the content that you are sending to the ingestionAddress to this URL.
          "streamName": "A String", # The HTTP or RTMP stream name that YouTube assigns to the video stream.
          "ingestionAddress": "A String", # The primary ingestion URL that you should use to stream video to YouTube. You must stream video to this URL.
              #
              # Depending on which application or tool you use to encode your video stream, you may need to enter the stream URL and stream name separately or you may need to concatenate them in the following format:
              #
              # STREAM_URL/STREAM_NAME
        },
        "frameRate": "A String", # The frame rate of the inbound video data.
        "resolution": "A String", # The resolution of the inbound video data.
        "format": "A String", # The format of the video stream that you are sending to Youtube.
      },
      "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
        "isDefaultStream": True or False,
        "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that is transmitting the stream.
        "description": "A String", # The stream's description. The value cannot be longer than 10000 characters.
        "publishedAt": "A String", # The date and time that the stream was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
        "title": "A String", # The stream's title. The value must be between 1 and 128 characters long.
      },
      "etag": "A String", # Etag of this resource.
      "id": "A String", # The ID that YouTube assigns to uniquely identify the stream.
    }</pre>
</div>

</body></html>