画面収録を実装したけど音声がおかしい……原因不明の現象をどう切り分けたか

>100 Views

September 13, 26

スライド概要

これは「iOSDC Japan 2026」のday2 LT大会で発表したスライドです。
https://fortee.jp/iosdc-japan-2026/proposal/ca27d9c4-145f-45ab-bb45-0a210f0ab2c9

ReplayKitを使って画面収録機能を実装したものの、収録されたアプリ音声がぶちぶちとしたノイズが記録される現象がありました。しかも、ノイズというよりは、再生される音声のスピードだけが、極端に遅く、ちぎれたような症状です。このLTでは、原因の掴みにくいノイズ現象に対して、どのように対応したか、調査したポイントを共有します。
深く調査をしていくと、どうやらシステムから届くアプリ音声の再生タイミングの情報が、映像のタイミング情報とは極端に乖離していく場合があることが判明しました。また、他の画面収録系のアプリや、ゲームのプレイ動画を録画する機能でも似た症状がありました。
この件について、「フィードバックアシスタント」を通してAppleにも共有。LTでは、この現象に対してどのように切り分けを進め、原因を探っていったのか、その調査過程を紹介します。

profile-image

ソフトウェアエンジニア|Swift中心にモバイルアプリやウェブ開発をやっています。 ESP32や3Dプリンタ(Ender3 S1 Pro)を活用して、自宅の作業環境をカスタマイズ中。 シンプルで使いやすいものを作るのが理想。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

画面収録を実装したけど 音声がおかしい…… 原因不明の現象をどう切り分けたか sussan(鈴木孝宏/sussan0416), 2026-09-13, iOSDC 2026

2.

sussan( 鈴木孝宏/ @sussan0416 ) 株式会社Helpfeel プロダクトエンジニア スクリーンショット共有ツール「Gyazo」の開発

3.

正常な音声の画面収録

4.

異常な音声の画面収録

5.

症状の概要 • 映像は正常 • 音声がぶちぶちと切れてゆっくり • 収録開始時に無音だと発生

6.

画面収録機能の構成 BroadcastUploadExtension AVAssetWriterInput App RPBroadcastSampleHandler processSampleBuffer(_:with:) video AVAssetWriter MP4 AVAssetWriterInput audioApp CMSampleBuffer iOS/ReplayKit .video .audioApp • シンプルな構成 • Xcodeにそれらしきエラーなし ➡ 末端から調べていくしかない

7.

画面収録機能の構成 BroadcastUploadExtension 動画がおかしい? AVAssetWriterInput App RPBroadcastSampleHandler processSampleBuffer(_:with:) video AVAssetWriter AVAssetWriterInput audioApp CMSampleBuffer iOS/ReplayKit .video .audioApp MP4

8.

ff 画面収録機能の構成 • probe(FFmpeg)で、動画ファイルをチェック • 正常時、異常時ともに、ファイル自体は問題なさそう… BroadcastUploadExtension $ ffprobe audio_normal_3.mp4 ... App RPBroadcastSampleHandler AVAssetWriterInput ←正常な音声 video AVAssetWriter processSampleBuffer(_:with:) Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), AVAssetWriterInput 44100 Hz, stereo, fltp, 139 kb/s, start 0.021587 (default) audioApp $ ffprobe audio_collapsed_3.mp4 ... ←異常な音声 CMSampleBuffer Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), iOS/ReplayKit 44100 Hz, stereo, fltp, 123 kb/s (default) .video 動画がおかしい? .audioApp MP4

9.

画面収録機能の構成 実装がおかしい? BroadcastUploadExtension AVAssetWriterInput App RPBroadcastSampleHandler processSampleBuffer(_:with:) video AVAssetWriter AVAssetWriterInput audioApp CMSampleBuffer iOS/ReplayKit .video .audioApp MP4

10.

画面収録機能の構成 • 仮説を立てて変更を繰り返すも、改善せず… BroadcastUploadExtension 仮説 / 検証 実装がおかしい? 結果 AVAssetWriterInput AVAssetWriterInputの設定とSampleBu erのズレが原因? x(差がない) video RPBroadcastSampleHandler App processSampleBuffer(_:with:) 最初のSampleBu erを元に、AVAssetWriterInputを設定する AVAssetWriter x(改善せず) AVAssetWriterInput audioApp AVAssetWriterInput.isReadyForMoreMediaDataが、falseになっている? x(falseになることがない) SampleBu erをリングバッファを経由して書き込む CMSampleBuffer x(改善せず) iOS/ReplayKit AVAssetWriterInput.append(sampleBu er)に失敗している? x(失敗していない) .video ff ff ff ff ff SampleBu erのPTSが飛んでいる? .audioApp x(飛んでいない) MP4

11.

画面収録機能の構成 BroadcastUploadExtension AVAssetWriterInput App RPBroadcastSampleHandler processSampleBuffer(_:with:) video AVAssetWriter AVAssetWriterInput audioApp 受け取るバッファが おかしい? CMSampleBuffer iOS/ReplayKit .video .audioApp MP4

12.

PTS(音声のバッファを再生するタイミング)の値に異常があった 録画開始から3秒 → 3秒分の音声でOK 録画開始から4秒 → 約15秒分の音声として記録 正常時は、音声のPTSが実時間とほぼ一致 異常時は、音声のPTSが実時間よりも高速に増加 → 再生時に、映像と音声が同期する → 再生時に、音声だけがゆっくりになる

13.

末端側から調査して原因を切り分け • 原因は、システムから受け取る CMSampleBu erの異常なPTS • 実装側で回避するのは困難 • PTSの付け直しなども試行したが 困難 • 他の画面収録アプリや ゲームのプレイ録画機能でも発生 ff (似た機能を持つ他のアプリを見るのも大事)

14.

• 「フィードバックアシスタント」で 症状と再現方法を報告 • 1回返信あり、 追加の診断ログを共有 • 担当者には届いたはず! 引き続き待ちます…! (2026年5月に報告したフィードバックのタイトル部分) ※「フィードバックアシスタント」の使用許諾契約を読むと、自分が送信した内容については公開しても大丈夫そうだった

15.

• 私たちが利用できる他のリソース • Appleのエンジニアとつながること ができる場所 出典: Apple Developer Forums https://developer.apple.com/jp/support/forums/

16.

出典: Apple Developer Forums https://developer.apple.com/jp/support/forums/ フィードバックアシスタントで報告 → フォーラムで議論 の順序らしい

17.

• ReplayKitのAPIの多くは、iOS 27 でDeprecateに。 出典: Apple Developer Documentation https://developer.apple.com/documentation/replaykit/ rpscreenrecorder

18.

出典: Apple Developer Documentation https://developer.apple.com/documentation/replaykit/rpscreenrecorder ScreenCaptureKitを使うよう案内されている。

19.

• RPBroadcastSampleHandlerも、 もちろんDeprecate。 出典: Apple Developer Documentation https://developer.apple.com/documentation/replaykit/ rpbroadcastsamplehandler

20.

出典: Apple Developer Documentation https://developer.apple.com/documentation/replaykit/rpbroadcastsamplehandler 「No longer supported」と記載されている… 画面収録の時代が移り変わっていく…

21.

ReplayKit ありがとう!