WWDC Quick Look 💓 By SwiftGGTeam
Discover rolling clips with ReplayKit

Discover rolling clips with ReplayKit

元の動画を見る

ハイライト

ReplayKit は、iOS 15 および macOS Monterey にクリップ録画機能を追加しました。アプリの起動後、15 秒間のローリング オーディオおよびビデオ バッファーが自動的に維持されます。プレーヤーは、事前に録画を開始しなくても、エキサイティングな瞬間にエクスポートをトリガーすることで、過去の映像を最大 15 秒保存できます。

主要内容

プレイヤーは 5 人のキルを達成し、隠しレベルのロックを解除し、速度記録を樹立します。これらの瞬間は、多くの場合突然訪れます。これまでのやり方では、プレイヤーはゲーム画面全体を録画し、その後長いビデオから編集する必要がありました。これは多くのストレージ容量を占有し、編集プロセスも面倒です。

ReplayKit の Clips Recording は、このプロセスを変更します。

アプリケーションの起動後に呼び出されますstartClipBuffering, ReplayKit はメモリ内のスクロール バッファの維持を開始し、画面イメージとアプリケーション オーディオの最後の 15 秒を継続的に保存します。バッファがいっぱいになると、古いデータは新しいデータで自動的に上書きされます。素晴らしい瞬間が起こると、アプリが呼び出しますexportClip過去 15 秒までを別のビデオ ファイルとしてエクスポートできます。

開発者は、さまざまなトリガー方法を設計できます。プレーヤーが手動で制御できるようにインターフェイスにエクスポート ボタンを追加したり、ボスを倒したとき、コンボを完了したとき、レコードを更新したときにクリップを自動的に保存するなど、ゲーム ロジックによって自動的にトリガーすることもできます。

エクスポートされたクリップはアプリケーションで指定された URL に保存され、開発者はその後のエクスペリエンスを自由に構築できます。ゲームのハイライトを表示したり、カスタムの透かしやフィルターを追加したり、アルバムに直接保存したりできます。

ゲーム コントローラー フレームワークには、クリップ記録のサポートも組み込まれています。プレーヤーはコントローラーの録音ボタンを押してクリップをエクスポートでき、これらのクリップはアルバムまたはデスクトップに直接保存されます。

詳細

スクロールバッファの開始と停止

(05:19) Clips Recording の中核は 3 つの API です。startClipBufferingstopClipBufferingそしてexportClip

バッファを開始するコード:

func startClipBuffering() {
    RPScreenRecorder.shared().startClipBuffering { error in
        if error != nil {
            print("Error attempting to start Clip Buffering")
            self.setClipState(active: false)
        } else {
            self.setClipState(active: true)
            self.setupCameraView()
        }
    }
}

キーポイント:

  • RPScreenRecorder.shared()ReplayKit のすべての機能への入り口であるシングルトン インスタンスを取得します。
  • startClipBufferingローリングバッファリングを開始します。期間を指定する必要はありません。システムはメンテナンスのために 15 秒間固定されます。
  • コールバックでエラーを処理し、UI 状態を更新して、記録がアクティブ化されたことをユーザーに知らせます
  • setupCameraView()フロントカメラ画面のオーバーレイを設定してプレーヤーの反応を記録できる

バッファを停止するコード:

func stopClipBuffering() {
    RPScreenRecorder.shared().stopClipBuffering { error in
        if error != nil {
            print("Error attempting to stop clip buffering")
        }
        self.setClipState(active: false)
        self.tearDownCameraView()
    }
}

キーポイント:

  • stopClipBufferingスクロールバッファリソースを解放する
  • 停止後、ライブブロードキャスト(アプリ内ブロードキャスト)など、ReplayKitの他の機能に切り替えることができます
  • カメラのプレビュー ビューを忘れずにクリーンアップしてください

ビデオクリップをエクスポートする

(06:13) クリップのエクスポートは、ユーザーが手動でトリガーできます。

@IBAction func exportClipButtonTapped(_ sender: Any) {
    if self.isActive && self.getClipButton.isEnabled {
        exportClip()
    }
}

実際のエクスポート ロジック:

func exportClip() {
    let clipURL = getAppTempDirectory()
    let interval = TimeInterval(5)

    print("Generating clip at URL: \(clipURL)")
    RPScreenRecorder.shared().exportClip(to: clipURL, duration: interval) { error in
        if error != nil {
            print("Error attempting to export clip")
        } else {
            self.saveToPhotos(tempURL: clipURL)
        }
    }
}

キーポイント:

  • exportClip(to:duration:)2 つのパラメータ: ターゲット ファイル URL とセグメント期間 (最大 15 秒)
  • 例では5秒のクリップをエクスポートしていますが、シーンに応じて調整できます。
  • エクスポートが成功すると、クリップは指定された URL に保存されます。開発者は、アルバムに保存したり、サーバーにアップロードしたり、後処理を実行したりできます。
  • エクスポート プロセスは、エンコードとカプセル化のために ReplayKit によって処理されるため、開発者はビデオ形式の詳細を気にする必要はありません。

ゲームパッドとの統合

(07:26) ゲーム コントローラー フレームワークには、クリップ記録サポートが組み込まれています。プレーヤーがコントローラーの録音ボタンを押すと、システムは自動的にクリップをエクスポートし、フォト アルバムまたはデスクトップに保存します。

開発者が独自のクリップ エクスペリエンス (ゲーム内のハイライトの表示など) を構築したい場合は、ReplayKit Clips API とゲームパッド フレームワークの両方を統合する必要があります。提案:

  • KVOを使用した監視RPScreenRecorderavailableそしてrecording財産
  • フォローするRPScreenRecorderDelegate記録状態の変化に迅速に対応するためのプロトコル

重要ポイント

  • 自動ハイライト キャプチャ: ゲーム イベントを使用して、レーシング ゲームでゴール ラインに到達したとき、格闘ゲームでコンボをヒットしたとき、またはパズル ゲームで隠されたイースター エッグを発見したときに自動的にトリガーします。exportClip、プレーヤーに「何が起こったのか」のインスタントリプレイを生成します。入口API:RPScreenRecorder.shared().exportClip(to:duration:)

  • 現在のハイライトの生成: レベルの最後に、このラウンドの自動的にエクスポートされたクリップをすべて収集します。AVFoundationBGMと決済データ(キル数、滞在時間など)を共有素材としてハイライトビデオにつなぎました。フラグメント ファイルはローカル URL に保存されており、直接読み取ることができます。

  • プレイヤーの反応記録: バッファーの開始時に同時にフロントカメラをオンにします (setupCameraView)、エクスポートされたクリップには、画面フッテージとピクチャ イン ピクチャ プレーヤーの表現の両方が含まれます。ホラー ゲームの飛び降りる恐怖の瞬間や、AR ゲームの実際のインタラクティブな反応に適しています。

  • ライブ ブロードキャストのハイライトをアーカイブ: ライブ ブロードキャスト中に、弾幕の人気がピークに達するか、アンカーが手動でマークすると、クリップが自動的にエクスポートされ、ローカルに保存されます。これらのクリップは、後からショートビデオに編集して他のプラットフォームに公開することで、「生放送+ショートビデオ」のコンテンツ再利用を実現します。

関連セッション

コメント

GitHub Issues · utterances