<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=None, 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=None, 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=None, 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",
    },
    "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.
      "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
      },
      "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.
      "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",
      },
      "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.
        "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
        },
        "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.
        "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. Acceptable values are 0 to 50, inclusive. The default value is 5.
  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",
          },
          "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.
            "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
            },
            "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.
            "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=None, 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",
    },
    "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.
      "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
      },
      "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.
      "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",
      },
      "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.
        "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
        },
        "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.
        "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>