takuroooのブログ

勉強したこととか

YouTube Live Streaming API でライブ配信する

YouTube Live Streaming APIを触ってみたのでその覚え書き

目次

YouTube Live Streaming APIとは

公式ページからの引用

The YouTube Live Streaming API lets you create, update, and manage live events on YouTube. Using the API, you can schedule events (broadcasts) and associate them with video streams, which represent the actual broadcast content.

developers.google.com

つまり下記のようなことがAPIでできる。

  • YouTube Liveのイベントを管理(生成、更新、削除)できる。
  • YouTube Liveに配信する映像の設定ができる。(配信プロトコルの設定、解像度、フレームレート、映像を受け付けるURLとストリームキーの取得など)

YouTube関連のAPIにはYoutube Data APIというものもある。こちらはYouTube関連のデータ操作を行えるAPIになっている。YouTube Live Streaming APIYoutube Data APIの機能を使ってるようで、後述するようにAPIを有効にする操作ではYoutube Data APIを有効にすることでYouTube Live Streaming APIが使えるようになる。

YouTube Data API の概要  |  Google Developershttps://developers.google.com/youtube/v3/getting-started?hl=ja

とりあえずAPIを触ってみる

ここでAPIのサンプルを動かすことができる。 developers.google.com

ここではさらにクライアントライブラリを使ったサンプルコードも表示してくれるのでとても便利。

APIを使う前にやること

事前準備

APIを使う前の事前準備としてやっておくことがある。

  1. Googleアカウント作成する。
  2. Google APIsでプロジェクトを作成し、YouTube Data API v3を有効化する。
  3. Google APIsで「OAuth同意画面」を作成(同意画面作成時はとりあえずアプリケーション名だけを設定)
  4. Google APIsで「認証情報」を取得。「APIキー」と「OAuth クライアントID」を取得。OAuthクライアント情報はJSONファイルとしてダウンロードする。

APIキーとOAuth クライアントID

YouTubeのパブリックなデータを操作するときは、APIキーがあればYouTubeAPIを使うことができる。しかし、ユーザーのプライベートなデータを操作する場合は、そのユーザーから許可をもらう必要がある。

OAuthとはユーザーからデータへのアクセス許可をもらう手順を規格化したもので、YouTube Live Streaming APIを使う場合はOAuthのシーケンスを踏まなければならない。

そのための事前準備として「OAuth同意画面」と「OAuth クライアントID」が必要になる。

クライアントライブラリのインストール

APIの呼び出しやOAuthのシーケンス実装はクライアントライブラリを使うと実装が簡単になる。

Client Libraries  |  YouTube Live Streaming API  |  Google Developers

クライアントライブラリのサンプルもリポジトリにまとまっている。

github.com

こちらはOAuthのクライアントライブラリ(Python) Documentationに簡単なサンプルコードがある。

github.com

クライアントライブラリとしてPythonを使うなら下記コマンドで必要なライブラリがインストールできる。

pip install google-api-python-client
pip install google-auth-oauthlib

リソースについて

YouTube Live Streaming APIで操作できるリソースはいくつかあるが基本的なものとしてLiveBroadcastsLiveStreamsがある。

LiveBroadcastsリソース

YouTubeライブ配信のイベントを作成するときに最初に「配信タイトル」や「公開範囲」「配信スケジュール」などを設定できるが、これらの操作はLiveBroadcastsリソースを使うことで実現できる。

LiveStreamsリソース

YouTubeライブ配信するときには、どんな映像を取り扱うかを決めなければならない。(映像の解像度、フレームレート、エンコーダからYouTubeサーバーへ送信するプロトコルなど)これらの設定をするために使用するのがLiveStreamsリソースになる。
この他にLiveStreamsリソースを使うとエンコーダの配信先URLやストリームキー(APIの中ではストリームネームと呼ばれている)を取得することができる。

各リソースがどんなメソッドがあるのかはReferenceに詳細に書かれている。

developers.google.com

Pythonのクライアントライブラリ関連のメソッド(YouTube Data API v3)は下記ページで見れる。(liveBroadcastsとliveStreamsというメソッドがある。)

http://googleapis.github.io/google-api-python-client/docs/dyn/youtube_v3.html

APIを使った配信イベントの作成から配信までのシーケンス

APIを使ってどうやって配信イベントを作成して、配信するのかは下記URL先で解説されている。 developers.google.com

ここの内容を参考に自分でシーケンスを組んでみた。 github.com

コードの大まかな流れとしては、下記のようなことをやっている。

  1. OAuthシーケンスでユーザーからデータアクセスの許可をもらう。
  2. liveBroadcastsinsertメソッドでライブイベントを作成する。
  3. liveStreamsinsertメソッドでストリームを作成する。
  4. 2で作ったイベントと3で作ったストリームをliveBroadcastsbindメソッドで紐づける。
  5. liveStreamslistメソッドでエンコーダの配信先URL(cdn.ingestionInfo.ingestionAddress)とストリームキー(cdn.ingestionInfo.streamName)を取得する。
  6. 配信者は配信ソフトと5で取得したURLとストリームキーを使って配信する。(これはAPIの操作ではなく手動で行うこと)

この後はtransitionメソッドを使ってliveBroadcastsのステータス(status.liveCycleStatus)を適切に変更してライブ配信をしている。

参考情報

YouTube Live Streaming API

OAuth/OpenID Connect

こちらの動画ではOAuth2.0とOpen ID Connectについてとてもわかりやすく解説されている。 www.youtube.com