メディアとストリーミングは、現代のモバイル開発における重要なスキルの一つです。Statista(2025)によると、世界の動画ストリーミング市場は2027年までに1000億ドルを超える見込みです。モバイルデバイスはストリーミングプラットフォーム全体のトラフィックの60%以上を占めています。開発者はプロトコル、プレーヤー、コンテンツ保護メカニズム、Picture-in-Pictureなどの機能を理解する必要があります。モバイルアプリでの高品質なストリーミングには、これらすべての技術の習得が不可欠です。
主要ポイント
HTTP Live Streaming(HLS)は、Appleが開発したモバイルアプリ向けのストリーミングプロトコルです。動画を小さなセグメント(通常6〜10秒)に分割し、通常のHTTPで配信します。プレーヤーはプレイリスト(.m3u8)をダウンロードし、セグメントを順次読み込み、接続速度に応じて品質を適応させます。HLSはすべてのAppleデバイスで信頼性の高いモバイルアプリのストリーミングを提供し、iOSのデファクトスタンダードです。
DASH(Dynamic Adaptive Streaming over HTTP)は、モバイルアプリへのメディア配信のためのオープンなMPEG標準です。HLSとは異なり、DASHはセグメントにMP4形式を使用し、.m3u8の代わりにXMLマニフェスト(MPD)を使用します。DASHはコーデックをより柔軟に制御でき、より多くの形式をサポートします。HLSとDASHの選択は、モバイルデバイス向けストリーミングを開発する際の重要な決定です。プロトコルの比較を以下の表に示します。
| パラメータ | HLS | DASH |
|---|---|---|
| 開発元 | Apple | MPEG(オープン標準) |
| プレイリスト形式 | .m3u8 | .mpd(XML) |
| セグメント | .tsまたはfMP4 | fMP4(任意のコーデック) |
| ネイティブ対応 | iOS、macOS、tvOS | Android、ウェブ |
| アダプティブビットレート | あり(avc1、mp4a) | あり(任意のコーデック) |
| 低遅延 | LL-HLS(2〜5秒) | LL-DASH(2〜5秒) |
実際には、iOSアプリはHLSを選択します — AVPlayerがネイティブでサポートしています。Androidでは、ExoPlayerのおかげでDASHが好まれます。どちらのプロトコルもモバイルデバイスでのメディアストリーミングに適しています。IT Sectrでは両方の技術を使用しており、ターゲットプラットフォームに基づいてプロトコルを選択することを推奨しています。
Adaptive Bitrate(ABR)は、プレーヤーが接続速度に基づいて自動的に動画品質を選択するメカニズムです。ストリームは複数のビットレート(360p、720p、1080p、4K)でエンコードされます。プレーヤーは中断することなくそれらを切り替えます。コーデック:H.264(AVC)— 基本、H.265(HEVC)— 50%効率的、VP9とAV1 — Android向けのオープンな代替。
モバイルアプリでのハードウェアデコーディングには、適切なコーデックを選択することが重要です。Hardware DecodingはデバイスのGPU/ビデオプロセッサを使用し、バッテリー消費が少なくなります。Software DecodingはCPUで動作し、ハードウェアデコーディングが利用できない場合に使用されます。IT Sectrは、モバイルデバイスでの最適なメディア再生のために、MediaCodec(Android)またはAVAssetTrack(iOS)を介してコーデックのサポートを常に確認することを推奨します。
ExoPlayerはGoogleが開発したAndroid向けのメディアプレーヤーで、モバイルアプリでのメディア再生に最適化されています。MediaPlayerとは異なり、ExoPlayerはハードウェアデコーディングに依存せず、拡張モジュールを介してカスタムスキームをサポートします。HLS、DASH、SmoothStreaming、RTSPで動作します。ExoPlayerはYouTube、Google TV、Android TVの主要プレーヤーです。
AVPlayerとAVPlayerViewControllerは、iOS、macOS、tvOS向けのAppleのプレーヤーです。AVPlayerは低レベルAPI、AVPlayerViewControllerはPiPとAirPlayを備えた既製のUIラッパーです。主な違い:ExoPlayerはバッファリングとレンダリングを完全に制御でき、AVPlayerViewControllerは最小限のコードで迅速に統合できます。プレーヤーの選択は、モバイルアプリのストリーミング品質に直接影響します。
// ExoPlayer — Androidでの基本プレーヤー設定
val player = ExoPlayer.Builder(this)
.setMediaSource(ProgressiveMediaSource.Factory(DefaultHttpDataSource.Factory()))
.build()
val mediaItem = MediaItem.fromUri("https://example.com/stream.m3u8")
player.setMediaItem(mediaItem)
player.prepare()
player.playWhenReady = true
コードはExoPlayerの最小限の初期化を示しています:インスタンスの作成、メディアアイテムの設定、再生の開始。ExoPlayerはonStopでのplayer.release()によってActivityのライフサイクルを自動的に処理します。Android TVやPiPの場合は、PlayerViewを介した追加のライフサイクル処理が必要です — これはモバイルアプリ用のストリーミングを設定する際に特に重要です。
Transcoding(トランスコーディング)は、動画をある形式から別の形式に変換することです。さまざまなモバイルデバイスにメディアストリームを最適化するために使用されます(例:H.264 → H.265)。モバイルデバイスでは、MediaCodec(Android)またはAVAssetExportSession(iOS)を介してトランスコーディングが可能です。トランスコーディングはリソースを消費し、バッテリーを消耗するため、WorkManagerまたはBGTaskSchedulerを使用してバックグラウンドで実行してください。
Digital Rights Management(DRM)は、メディアコンテンツを不正コピーから保護するシステムです。モバイルアプリでのプレミアムメディアストリーミングには、Widevine(Google)、FairPlay(Apple)、PlayReady(Microsoft)の3つの主要技術が使用されます。DRMなしでは、プレミアムサービス(Netflix、Spotify、Disney+)はコンテンツを配信できません。
WidevineはAndroidのDRM保護標準で、L3(ソフトウェア暗号化)、L2、L1(ハードウェア暗号化、Trusted Execution Environmentのみ)の3つのレベルがあります。FairPlayはAppleの独自システムで、チップレベルでSVP(Secure Video Pipeline)を使用します。PlayReadyはMicrosoftのシステムで、XboxおよびWindowsデバイスで広く使用されています。
Multi-DRMは、単一のプラットフォームですべてのDRMキーを管理するアプローチです。例:EZDRMやVerimatrix。これらは統一されたAPIを介してWidevine、FairPlay、PlayReadyのライセンスを発行します。Multi-DRMはモバイルデバイスでのプレミアムメディアに特に関連性が高いです。IT Sectrでは、アグリゲーターを介してmulti-DRMを実装しています — これにより、各DRMを個別に統合するよりも時間とコストを節約できます。
Audio Focus(Android)は、モバイルアプリでのメディア再生のためのオーディオストリーム管理システムです。アプリがAudio Focusを要求すると、他のアプリ(音楽、ポッドキャスト)は一時停止するか、音量を下げます(ダッキング)。Audio Focusがないと、2つのアプリが同時に再生され、ノイズが発生します。
AndroidはオーディオストリームをMUSIC、VOICE_CALL、ALARM、NOTIFICATIONのタイプに分類します。メディアプレーヤーでは、AudioManager.AUDIOFOCUS_GAINを要求する必要があります。フォーカスを失った場合(着信)、メディア再生を一時停止し、フォーカスが戻ったら再開する必要があります。実装はAudioManager.OnAudioFocusChangeListenerを介して行います。
Audio Session(iOS)は、Appleモバイルデバイス上のメディアアプリ向けのAudio Focusに相当します。AVAudioSession.sharedInstance()を介して設定します。カテゴリ:.playback(動画に必須)、.soloAmbient(デフォルト、ロック時に無音)、.playAndRecord(録音用)。ストリーミングには、.allowAirPlayオプションを付けて.playbackを使用します。
Picture-in-Picture(PiP)は、アプリを最小化したり別の画面に移動したりしても、メディアコンテンツが小さなフローティングウィンドウで再生され続けるモードです。PiPはモバイルデバイスのメディアアプリの標準となっています — iOS(iPadOS 13以降)およびAndroid(Android 8.0以降)。
Androidでは、PiPはActivity.isInPictureInPictureMode()とPictureInPictureParams.Builderを介して有効になります。アプリはマルチウィンドウモードである必要があります。PiPウィンドウからメディア再生を制御するにはMediaSessionが必要です。マニフェストでandroid:supportsPictureInPicture="true"を指定してください。
AirPlayは、Apple TV、HomePod、対応スマートTVにメディアをストリーミングするためのAppleのプロトコルです。iOSでは、AVRoutePickerViewまたはMPNowPlayingInfoCenterを介して実装されます。Androidでは、同等のものはGoogle Cast SDK(Chromecast)です。どちらの技術もバイナリファイルでの設定とプレーヤーのサポートが必要です。モバイルアプリでの高品質なストリーミングには、これらのいずれかが不可欠です。
よくある質問
iOSの場合はHLSが適しています — AVPlayerがネイティブでサポートしています。Androidおよびクロスプラットフォームアプリの場合は、ExoPlayerがDASHをより適切にサポートし、バッファリング制御も柔軟なため、DASHが推奨されます。プロトコルの選択はモバイルアプリのストリーミングに直接影響します。
DRMは必須なのは、プレミアムメディアコンテンツ(映画、音楽、コース)を配信する場合のみです。ユーザー生成コンテンツやフリーエア放送にはDRMは必要ありません。IT SectrはDRMなしで開始し、必要な場合にのみ追加することを推奨します。
ExoPlayerはDASH、HLS、SmoothStreamingをサポートするAndroid向けのカスタマイズ可能なメディアプレーヤーです。AVPlayerViewControllerはPiPとAirPlayを備えたiOSのネイティブプレーヤーです。ExoPlayerの方が制御性が高く、AVPlayerViewControllerの方がコード量が少なくて済みます。どちらもモバイルアプリで高品質なメディア再生を提供します。
PiPは、アプリを最小化してもメディアコンテンツが小さなウィンドウで再生され続けるモードです。iOSではAVPlayerViewControllerのデリゲートを介して、AndroidではPictureInPictureParamsを介して有効になります。マニフェストの設定とライフサイクル処理が必要です。
Audio Focus(Android)とAudio Session(iOS)は、異なるソースからの同時オーディオ再生を管理します。これらにより、メディアアプリが着信、通知、他のオーディオアプリの起動に適切に応答することが保証されます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。