Swift Academy · レッスン

AVPlayerによるメディア再生

音声や動画のアセットをストリーミング再生します。

レッスン 1/413 ステップ

「AVPlayerによるメディア再生」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

メディアのためのAVFoundation

AVFoundation は、時間軸を持つ音声・映像メディアを扱うためのAppleのフレームワークです。再生、キャプチャ、編集、書き出しに対応しています。

再生の中心となるクラスは AVPlayer です。

import AVFoundation

AVPlayerと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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. AVPlayerによるメディア再生
  2. 音声の録音
  3. AVAssetとコンポジション
  4. SwiftUIへのプレイヤーの埋め込み
← Swift Academyに戻る