曲を聴くためにYoutube Premiumuに登録して早3年経った僕ですが、ふと思ったことがあります。
「なんで画面が閉じても曲が流れ続けるんだろう?」と
そこで自分なりに色々調べたところ裏では色々な技術が使われている事が分かったので、
今回はエンジニア初学者でもわかるように、その仕組みをざっくり分解してご説明いたします。
目次
そもそもバックグラウンド再生とは?
⚙️仕組み①:音声と映像を分けて配信している
📱仕組み②:OSのバックグラウンド再生API
💎仕組み③:Premiumu会員かどうかをサーバーで判定
ステップ①:アカウント認証(OAuth)
ステップ②:サブスクリプション情報をサーバーから取得
ステップ③:アプリ内の機能フラグで制御
まとめ
最後に
そもそもバックグラウンド再生とは?
念のためバックグラウンド再生についても軽く説明いたします。
通常、アプリは「画面が閉じられる=アプリを停止する」となります。
例えば無料ユーザーでは、スマホをスリープにした瞬間に再生が止まりますよね。
しかしPremiumu会員になると、アプリを閉じても音楽が流れ続ける。
これが「バックグランド再生」です。
⚙️仕組み①:音声と映像を分けて配信している
Youtubeの動画データは、「DASH(Dynamic Adaptive Streaming over HTTP)※1」という形式で配信されています。
この形式では、映像と音声が別々のデータストリームとして送られます。
📽️映像:video stream
🔊音声:audio stream
バックグラウンド再生の時は、映像データは止めて、音声データだけを再生しています。
これにより、通信量もバッテリーも節約できます。
※1 インターネットを介して動画や音声を効率的かつ途切れにくく配信する仕組み
詳細【https://www.cloudflare.com/ja-jp/learning/video/what-is-mpeg-dash/】
📱仕組み②:OSのバックグラウンド再生API
スマホのOS(iOS/Android)には、「音楽プレイヤーアプリはバックグラウンドで再生できる」という仕組みがあります。
Premiumu会員の場合、このAPIを使ってバックグラウンド専用の再生サービスを起動します。
これによって、アプリが画面に表示されなくても音を出し続けられるわけです。
無料ユーザーの場合はこのAPIが使われず、Youtube側のコード(アプリ内部のロジック)で、
Premiumu会員→バックグラウンドAPIを初期化・利用OK
無料ユーザー→通常の再生API(=画面表示中限定)しか呼ばない
という条件分岐が入っています。
ネットでこのAPIについて調べてみると、例となるコードを上げている記事がいくつかあってなので、気になる人は調べてみてください。
💎仕組み③:Premiumu会員かどうかをサーバーで判定
Youtubeのバックエンド(Googleのサーバー)でユーザーごとに管理されており、アプリ起動時や再生時に「このアカウントはPremium会員か?」を問い合わせている構造です。
流れとしては以下になります。
ステップ①:アカウント認証(OAuth)
Youtubeアプリでは、Googleアカウントでログインをするかと思いますが、ログイン状態の裏ではOAuth(オーオース)という認可プロトコルを使って「このユーザーが誰なのか」をトークンでやり取りしています。
アプリ側が「このGoogleアカウントの情報欲しい」と言えばGoogleサーバーは「OK~このトークンを使ってAPIを叩いていいよ~」と返します。
この「トークンは」一時的なパスワードのようなもので、実際のログイン情報をやり取りせずに安全にユーザーを識別できます。
ステップ②:サブスクリプション情報をサーバーから取得
ログイン後、YoutubeアプリはバックエンドAPIを通じてユーザーのサブスクリプション情報(契約状況)を問い合わせます。
イメージとしては以下のような感じ👇
GET https://www.googleapis.com/youtube/v3/user/subscriptionStatu
Authorization: Bearer <access_token>
サーバーはそれに対して、こんなレスポンスを返します
{
"userId" : "12345",
"premiumu" : true,
"planType" : "Youtube Premiumu",
"expiresAt" : "2025-10-31T00:00:00Z"
}
このレスポンスの"premiumu" : trueがポイントです。
この値をもとに、アプリ側が「このユーザーはPremiumu会員だから、バックグラウンド再生OK」と判断します
もちろん、毎回APIを叩いて確認していたら通信コストが大きいので、アプリ側は一度取得したPremiumu状態を端末内にキャッシュ(保存)しています。
ステップ③:アプリ内の機能フラグで制御
サーバーのレスポンスを受け取ったアプリは、機能ごとに「ON/OFF」を切り替えるFeature Flag(機能フラグ)を内部的に持っています。
疑似コードで書くと以下のような感じです。
if (user.premiumu === true) {
enableFeature("background_playback");
enableFeature("offline_downlad");
} else {
disableFeature("background_playback");
}
これによって、Premiumuユーザーだけがバックグラウンド再生や広告なし再生などを利用できるになります。
まとめ
色々調べてみるとバックグラウンド再生は、実は複数の技術が組み合わさって動いていることが分かりました。
こうしてみると、シンプルなユーザー体験の裏には、多層的な仕組みがあることが分かりますね。
最後に
「バックグラウンド再生」の仕組みを理解すると、音楽アプリや動画アプリを自作したいときにも応用できます。
もし自分で試してみたいなら、
AndroidならMediaPlayerやForeground Service、
iOSならAVAudioSessionを使って簡単な実装をしてみるのがおすすめです!