AVPlayerによるメディア再生
音声や動画のアセットをストリーミング再生します。
「AVPlayerによるメディア再生」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
メディアのためのAVFoundation
AVFoundation は、時間軸を持つ音声・映像メディアを扱うためのAppleのフレームワークです。再生、キャプチャ、編集、書き出しに対応しています。
再生の中心となるクラスは AVPlayer です。
import AVFoundationAVPlayerとAVPlayerItem
AVPlayer は再生を制御し、AVPlayerItem は再生対象のメディアを表して、その状態を追跡します。itemの基盤となるのが AVAsset です。
let url = URL(string: "https://example.com/video.mp4")!
let item = AVPlayerItem(url: url)
let player = AVPlayer(playerItem: item)再生の開始と一時停止
play()、pause()、seek(to:) で再生を制御します。再生は現在の時刻から始まります。
player.play()
// later
player.pause()動画の表示
UIKitで動画を表示するには、ビューに AVPlayerLayer を配置します。このレイヤーがプレーヤーの映像出力を描画します。
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.bounds
playerLayer.videoGravity = .resizeAspect
view.layer.addSublayer(playerLayer)ステータスの監視
AVPlayerItem は status を通知します。これを監視すると、メディアが readyToPlay になったことや failed になったことを把握できます。
let observation = item.observe(\.status) { item, _ in
if item.status == .readyToPlay {
player.play()
}
}再生時刻の追跡
addPeriodicTimeObserver を使うと、再生の進行に合わせて進捗UIを更新できます。時刻は CMTime の値で表されます。
let interval = CMTime(seconds: 0.5, preferredTimescale: 600)
player.addPeriodicTimeObserver(forInterval: interval, queue: .main) { time in
let seconds = time.seconds
print("at \(seconds)s")
}CMTimeの基本
CMTime は、サンプル単位で正確な精度を得るため、時間を有理数(valueをtimescaleで割った値)として保持します。timescaleに600を指定すると、一般的なフレームレートをきれいに割り切れます。
let t = CMTime(seconds: 5, preferredTimescale: 600)
let half = CMTimeMultiplyByFloat64(t, multiplier: 0.5)正確なシーク
seek(to:toleranceBefore:toleranceAfter:) で許容範囲をゼロにすると、フレーム単位で正確にシークできます。ただし、デコード処理の負荷は高くなります。
let target = CMTime(seconds: 30, preferredTimescale: 600)
player.seek(to: target, toleranceBefore: .zero, toleranceAfter: .zero)再生の終了
AVPlayerItem.didPlayToEndTimeNotification を監視して再生完了を検出し、その後にループ、閉じる、または次のitemを表示します。
NotificationCenter.default.addObserver(
forName: .AVPlayerItemDidPlayToEndTime,
object: item, queue: .main) { _ in
player.seek(to: .zero)
player.play() // loop
}再生のためのオーディオセッション
音声を正しく再生し、設定によってはバックグラウンドでも再生を続けるには、適切なカテゴリで AVAudioSession を設定します。
let session = AVAudioSession.sharedInstance()
try? session.setCategory(.playback)
try? session.setActive(true)プレイリスト用のAVQueuePlayer
AVQueuePlayer は AVPlayer のサブクラスで、複数のitemをキューに入れて順番に再生します。プレイリストや連続する動画フィードに適しています。
let queue = AVQueuePlayer(items: [item1, item2, item3])
queue.play()理解度チェック:AVPlayer
AVPlayerによる再生についての理解度を確認します。
まとめ:AVPlayerでメディアを再生する
AVPlayer は AVAsset を基盤とする AVPlayerItem の再生を制御し、AVPlayerLayer が動画を描画します。itemの status を監視し、周期的な CMTime オブザーバーで進捗を追跡し、許容範囲をゼロにして正確にシークし、再生終了通知を処理します。
AVAudioSession を設定して音声を正しく再生し、プレイリストには AVQueuePlayer を使用します。
AI チューターと学ぶ Swift — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 122
- レッスン
- 409
よくある質問
「AVPlayerによるメディア再生」レッスンは無料ですか?
はい。「AVPlayerによるメディア再生」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「AVPlayerによるメディア再生」で何を学びますか?
音声や動画のアセットをストリーミング再生します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「AVPlayerによるメディア再生」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- AVPlayerによるメディア再生
- 音声の録音
- AVAssetとコンポジション
- SwiftUIへのプレイヤーの埋め込み