13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

iOS ReplayKitを調べてみた

Posted at

iOS ReplayKitを調べた内容を纏めてみました。

環境

  • macOS Big Sur 11.0 Beta
  • Xcode 11.6
  • 実機 iOS 13.6

機能概要

ReplayKitの主な流れ

  • ReplayKitはiOS9から追加
  • iOS11からアーキテクチャが変更され、RepalyKit2に
    • iOS11からコントロールセンターの画面収録機能が追加

ReplayKitには、主に2つの機能がある

1. 画面録画

1.1. Screen Recording(iOS9〜)

  • 実行中のアプリを録画し、プレビューコントローラーから写真や共有で保存
    スクリーンショット 2020-08-17 22.45.19.png

1.2. In-App Screen Capture(iOS11〜)

  • 実行中のアプリを録画した映像と音声を取得
    スクリーンショット 2020-08-17 22.45.36.png

2. Live Broadcasting

2.1. In-App Broadcast(iOS10〜)

  • 実行中アプリの映像と音声を配信

2.2. Broadcast Pairing(iOS11〜)

2.3. iOS System Broadcast(iOS11〜)

  • 実行中アプリ以外のiOS画面も配信可能に
  • コントロールセンターの画面収録からブロードキャスト配信を行う設定が追加
    _2020-08-17_22.53.06.png

2.4. System Broadcast Picker(iOS12〜)

  • 自アプリから画面収録画面を表示
    スクリーンショット 2020-08-17 22.54.59.png

実装方法

Screen Recording

RPScreenRecorderRPPreviewViewController を使用する

ネットに情報が多いので割愛

In-App Screen Capture

RPScreenRecorder を使用する

ネットに情報が多いので割愛

In-App Broadcast

RPBroadcastActivityViewController を使用する

いまいち使い方はよくわからず

Broadcast Pairing

RPBroadcastActivityViewController を使用する

preferredExtension に Broadcast Setup UI Extension のBundle IDを設定するとリストにSetup UIが表示されるが、いまいち使い方はよくわからず

iOS System Broadcast

  • File → new → Target から Broadcast Upload Extension を追加する
  • コントロールセンター → 画面収録 を長押しすると一覧に追加したExtensionが表示され、ブロードキャストを開始ができる
  • ブロードキャストを開始すると Broadcasst Upload Extension の processSampleBuffer() で Video / Audio Sample を受信する

System Broadcast Picker

  • 自アプリから画面収録画面を表示するには RPSystemBroadcastPickerView を使用する
let broadcastPicker = RPSystemBroadcastPickerView(frame: CGRect(x: 10, y: 50, width: 100, height: 100))

// 追加したBroadcast Upload ExtensionのBundleIDを設定
broadcastPicker.preferredExtension = kUploadExtension
// マイクのオン/オフ表示を設定
broadcastPicker.showsMicrophoneButton = true

// デフォルト表示の二重丸アイコンを文字列に変更
for subview  in broadcastPicker.subviews {
    let b = subview as! UIButton
        b.setImage(nil, for: .normal)
        b.setTitle("画面共有", for: .normal)
        b.setTitleColor(.black, for: .normal)
}

self.view.addSubview(broadcastPicker)

対応ソース

https://github.com/shima-0215/ReplayKitSample

ReplayKit対応アプリの動作

Zoom

ZoomはReplayKitを使用し、画面の共有をおこなう機能を有している

  • コントロールセンターの画面収録を長押しし、zoom を選択し ブロードキャストを開始する をタップするとiOS画面を共有できる(iOS11〜)

  • ミーティング中画面の 共有 から 画面 をタップすると画面収録画面が表示され、zoom を選択し ブロードキャストを開始する をタップするとiOS画面を共有できる(iOS12〜)

    • iOS11の場合、共有 から画面 をタップすると、コントロールセンターからのセットアップ方法の画面が表示される

      https://support.zoom.us/hc/ja/articles/115005890803-iOS-Screen-Sharing

  • ミーティング中以外にコントロールセンターからブロードキャストを開始するとエラーとなる

  • 画面の共有中に、他の端末でブロードキャストを開始されると、共有中の端末はエラーとなり終了する(後勝ちで動作)

その他

  • Skype, Teams, LINE, LINE LIVE も対応してそうだが、動作は未確認。

今後、調べたいこと

参考サイト

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?