AVFoundation は、iOS、macOS、tvOS、watchOS でオーディオ、ビデオ、画像を操作するための完全なワークフローを提供する Apple のマルチメディアフレームワークです。カメラやマイクからのキャプチャ、メディアファイルの再生、オーディオトラックの編集、リアルタイムのサウンド処理、ネットワークストリーミングをカバーします。Apple AVFoundation Documentation (2026) によると、このフレームワークはメディアコンテンツを扱う App Store アプリケーションの 90% で使用されています。
重要なポイント
AVFoundation は、オーディオとビデオの再生のために廃止された UIWebView の代替として iOS 4(2010)で導入された Apple の基本的なマルチメディアフレームワークです。それ以来、AVFoundation はあらゆるタイプのメディアを扱うための本格的なツールセットに進化しました。シンプルな MP3 ファイル再生から、マルチチャンネルマイクを使ったプロフェッショナルなビデオキャプチャ、リアルタイムエフェクトによるサウンド変換までをカバーします。
AVFoundation のアーキテクチャは、AVAsset(メディアデータ)、AVPlayer(再生)、AVCaptureSession(キャプチャ)、AVAudioEngine(処理)といういくつかの基本抽象化に基づいて構築されています。各コンポーネントは非同期で動作し、大きなファイルの読み込みや処理中に UI のスムーズさを維持するために重要です。Apple(WWDC 2025)によると、AVFoundation は M シリーズチップを搭載したデバイスでパフォーマンスを損なうことなく 8K ビデオまで処理できます。
AVFoundation は、4K ProRes、HDR、スローモーションで最大 240 FPS をサポートするカメラからのビデオキャプチャ、内蔵および外部マイクからのオーディオ録音とミキシング、HLS、MPEG-4、QuickTime、MP3、AAC、FLAC をサポートするメディア再生、AVAssetExportSession によるファイルのエクスポートと変換、リバーブ、イコライザー、ピッチシフトエフェクトを使用した AVAudioEngine によるリアルタイムオーディオ処理、さらに AirPlay やネットワークプロトコルによるストリーミングを提供します。
AVFoundation は複数のモジュールで構成され、各モジュールはメディア作業の特定の分野を担当します。コンポーネントの選択はタスクによって異なります:キャプチャ、再生、エクスポート、またはリアルタイム処理。
| コンポーネント | 目的 | 主要クラス |
|---|---|---|
| キャプチャ | カメラとマイクの操作 | AVCaptureSession |
| 再生 | オーディオとビデオのプレーヤー | AVPlayer / AVAudioPlayer |
| 編集 | 合成と編集 | AVMutableComposition |
| エクスポート | 他の形式への変換 | AVAssetExportSession |
| オーディオエンジン | リアルタイムサウンド処理 | AVAudioEngine |
| メタデータ | ID3、EXIF、XMP の読み取り | AVMetadataItem |
AVCaptureSession はビデオとオーディオのキャプチャのための中心的なオブジェクトです。物理デバイス(カメラ、マイク)からの受信データストリームを管理し、その設定(解像度、FPS、フォーマット)を構成して、出力(AVCaptureVideoPreviewLayer)、ファイル記録(AVCaptureMovieFileOutput)、またはフレームごとの処理(AVCaptureVideoDataOutput)に送ります。
AVPlayer は、ローカルとネットワークの両方でメディアコンテンツを再生できるユニバーサルな AVFoundation プレーヤーです。AVPlayer は HLS ストリーミング、MPEG-4、QuickTime Movie、およびほとんどのオーディオフォーマットをサポートしています。再生制御は AVPlayerItem を介して非同期で処理されます。AVPlayerViewController は、再生/一時停止、スクラブ、AirPlay、PiP などのコントロールを備えた既製の UI を提供します。
ビデオとオーディオのキャプチャは、AVFoundation の最も需要の高い機能の 1 つです。キャプチャセッションのセットアップには、AVCaptureSession の作成、入力(カメラ、マイク)の追加、出力の構成、セッションの開始という複数の手順が含まれます。
iPhone の背面カメラからビデオをキャプチャし、同時にマイクから音声を録音するための AVCaptureSession の段階的なセットアップを見ていきましょう。プロセスは Swift の 4 つのステップで構成されています。
import AVFoundation
// 1. セッションの作成と設定
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. カメラ入力の追加
guard let camera = AVCaptureDevice.default(
for: .video
) else { return }
let cameraInput = try? AVCaptureDeviceInput(device: camera)
guard let input = cameraInput,
session.canAddInput(input)
else { return }
session.addInput(input)
// 3. 録画用出力の追加
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. セッションの開始
session.startRunning()
Swift コードは Full HD プリセットで AVCaptureSession を作成し、背面カメラをビデオソースとして接続し、ファイル録画用の出力を追加します。session.startRunning() の後、カメラはプレビューと出力ファイルにフレームを送信し始めます。録画は output.stopRecording() で停止し、ギャラリーに保存するオプションがあります。
オーディオのみのキャプチャ(ビデオなし)の場合は、AVCaptureDevice.default(.audio) を介してマイクのみを AVCaptureSession に追加します。出力は、リアルタイムサウンド処理用の AVAudioFileOutput または AVCaptureAudioDataOutput です。AVFoundation はマルチチャンネルキャプチャをサポートしています:iPad Pro で最大 8 チャンネル、iPhone で最大 2 チャンネルで、Lightning、USB-C、または Bluetooth を介した外部マイクからのステレオ録音が可能です。入力ソースの選択は AVAudioSession.sharedInstance().setPreferredInput を介して行われ、外部ヘッドセットや Bluetooth マイクを扱うアプリケーションにとって重要です。
AVFoundation はメディアを再生する 2 つの主要な方法を提供します:ビデオ用の AVPlayer とオーディオ用の AVAudioPlayer です。AVPlayer を使用してリモート HLS ストリームを再生する例を見てみましょう。
コードは AVPlayer を作成し、URL から HLS ストリームをロードし、低い音量レベルで再生を開始します。AVPlayerItem はロードとバッファリングの状態を管理し、ステータスの KVO 監視によりエラーを処理できます。
import AVFoundation
import AVKit
// 1. HLSストリームでAVPlayerを作成
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. 再生
player.play()
// 3. プレーヤーの表示
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. ステータスの監視
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
コードは HLS URL で AVPlayer を作成し、音量を 70% に設定して再生を開始します。AVPlayerViewController は、コントロール、AirPlay、ピクチャーインピクチャーモードを備えた組み込み UI を提供します。プレーヤーのステータスは KVO を介して監視され、HLS ストリームが一時的に利用できない場合を処理します。
ビデオインターフェースなしのオーディオ再生には AVAudioPlayer が使用されます。これは AVPlayerItem を必要としない軽量プレーヤーです。AVAudioPlayer は MP3、AAC、ALAC、FLAC、WAV、AIFF のオーディオフォーマットをサポートし、play()、pause()、stop() メソッドと、再生完了やデコードエラーを追跡するための AVAudioPlayerDelegate を提供します。AVAudioPlayer は、iOS および macOS でのバックグラウンド音楽再生、ポッドキャスト、ゲーム内のサウンドエフェクトに最適です。
AVFoundation を使用するさらに 2 つの典型的なシナリオを見てみましょう:AVAudioEngine によるオーディオ処理と、別の形式へのビデオエクスポートです。
AVAudioEngine は、処理グラフ内のノードを接続することでリアルタイムオーディオ処理を可能にします:入力ノード(マイク)→ エフェクト → 出力ノード(スピーカー)。以下の例では、声にリバーブを追加しています。
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// リバーブの設定
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// 接続: マイク -> リバーブ -> スピーカー
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
AVAudioEngine は 3 つのノードのグラフを作成します:入力(マイク)、エフェクト(大ホールプリセットのリバーブ)、出力(スピーカー)。engine.start() の後、マイクからのオーディオはリアルタイムでエフェクトによって処理され、デバイスのヘッドフォンまたはスピーカーに出力されます。処理レイテンシは、すべての最新 Apple デバイスで 10 ミリ秒未満です。
AVAudioEngine の追加機能は、AVAudioUnitEQ と AVAudioUnitMixer によるサウンド分析です。開発者は任意のオーディオストリームにイコライザー、コンプレッサー、リミッターを追加できます。音楽アプリケーション向けに、AVFoundation は MIDI ファイル再生用の AVAudioSequencer と音声合成用の AVSpeechSynthesizer を提供します。すべてのコンポーネントは単一のオーディオグラフで動作し、Apple デバイスでキャプチャから処理までのレイテンシを 5 ミリ秒未満に抑えます。
AVFoundation を使用する際は、システム権限を考慮することが重要です:カメラへのアクセスには Info.plist の NSCameraUsageDescription が必要で、マイクには NSMicrophoneUsageDescription が必要です。AVFoundation は、デバイスへの最初のアクセス試行時に自動的にシステム権限ダイアログを表示します。ユーザーの拒否は AVCaptureDevice.authorizationStatus() を介して処理され、設定に移動する提案とともにカメラが利用できない旨の適切なメッセージを表示できます。
AVFoundation は、プロジェクトの Capabilities の Audio Background Mode を介して バックグラウンドオーディオ再生をサポートしています。有効にするには、UIBackgroundModes Info.plist に audio エントリを追加し、AVAudioSession を .playback カテゴリで設定するだけです。ビデオはデフォルトではバックグラウンドで再生されませんが、iPad で最小化されたアプリでビデオ再生を続けるために、ピクチャーインピクチャーモードの AVPlayer を使用できます。PiP モードのアイコンは、プロトコルデリゲートとともに AVPictureInPictureController を介して設定されます。
よくある質問
iOS 4+ 基本的な再生とキャプチャ用。iOS 8+ AVAudioEngine 用。iOS 17+ HDR モードの AVAssetWriter 用。フレームワークの現在のバージョンは、すべての iPhone、iPad、Mac デバイスでサポートされています。
はい、AVPlayer は Apple の主要なストリーミングプロトコルである HLS(HTTP Live Streaming)をサポートしています。サーバーにメディアを送信するには、URLSession 上でカスタムプロトコルを使用する AVAssetWriter を使用します。
AVFoundation はメディアを扱うための低レベルフレームワークです。AVKit は AVFoundation 上のレイヤーで、AVPlayerViewController、AVPictureInPictureController、AVPipView などの既製の UI コンポーネントを提供します。
はい、iOS 11 以降、AVFoundation は再生用に FLAC(Free Lossless Audio Codec)をサポートしています。ALAC(Apple Lossless)は iOS 4 からサポートされています。両方のコーデックは AVAudioPlayer と AVPlayer を介して動作します。
ReplayKit の RPScreenRecorder を介して、内部で AVFoundation を使用します。iOS 9 以降、画面録画はオプションのマイクとともに RPScreenRecorder.shared().startRecording() を介して利用可能です。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。