fix(tvos): make EAC3 playback conform to Dolby's guidance
Groundwork for #1300. Establishes the session, buffering and route handling Dolby's application guide prescribes, and adds the diagnostic arm needed to find out whether Apple's sample-buffer renderer can carry Atmos objects at all. Audio session, per the guide's sequence: - Adopt the long-form playback profile in one atomic call at app launch and activate the session there. The SDK only accepts that policy with category Playback, a Default/MoviePlayback/SpokenAudio mode and no options, so it cannot be assembled from separate calls. - Report the resolved rendering mode in the player, hidden unless the system resolves it. Apple only resolves it for CarPlay and AirPlay, so an unresolved value means unknown, never "not Dolby". Diagnostics (Apple TV only, Settings > Video Playback > Atmos Output Test): - Add a sample-buffer arm. It reads the asset with AVAssetReader at outputSettings nil and hands the untouched compressed buffers and the untouched format description straight to the renderer, with a variant that rebuilds the description the way playback builds it. Every existing mode went through AVPlayer, so nothing exercised the path playback actually uses; this is what tells us whether the renderer or our construction is at fault. - Add an AirPlay route picker. AirPlay is the only route where the system resolves the rendering mode and the supported channel layouts, so it is what makes those observations reachable at all, and the AVPlayer arms now allow external playback so every arm can be compared on the same destination. - Add a session-mode toggle for the one profile difference between the guide and previous playback behaviour. - Report the session profile, supported layouts, both format descriptions, the magic cookie and the renderer status, and release the session on stop so a failed run cannot contaminate the next one. Also bumps MPVKit to 1.0.14, which carries the matching audio output work: the channel layout AVFoundation itself uses for Dolby content, a renderer-failure observer so the fallback to PCM can actually run, the prescribed feed ordering and preroll, flush recovery that re-supplies the discarded audio instead of shifting later audio into its place, and capability-driven fallback on route and capability changes. This does not yet fix #1300. Whether the sample-buffer renderer can carry JOC is still unknown; it removes every difference from the documented setup that could explain the failure, and gives us the arm to answer it on real hardware.
This commit is contained in:
@@ -289,6 +289,15 @@
|
||||
"atmosTestRawStreamDescription": "以與播放器播放 Atmos 完全相同的方式串流測試檔案。需要測試檔案的 URL。",
|
||||
"atmosTestRawFile": "原始 EAC3 檔案",
|
||||
"atmosTestRawFileDescription": "以已知長度播放測試檔案。需要測試檔案的 URL。",
|
||||
"atmosTestAsbarNative": "取樣緩衝渲染器(原生)",
|
||||
"atmosTestAsbarNativeDescription": "將檔案未經更動的壓縮音訊直接交給系統渲染器。需要測試檔案 URL。",
|
||||
"atmosTestAsbarGenerated": "取樣緩衝渲染器(重建)",
|
||||
"atmosTestAsbarGeneratedDescription": "相同,但音訊描述以播放時的方式重建。需要測試檔案 URL。",
|
||||
"atmosTestSessionMode": "使用影片播放工作階段模式",
|
||||
"atmosTestSessionModeDescription": "關閉時使用 Dolby 文件所述的模式。開啟時使用先前的模式。",
|
||||
"atmosTestShowRoutePicker": "選擇 AirPlay 輸出",
|
||||
"atmosTestHideRoutePicker": "隱藏 AirPlay 輸出選擇器",
|
||||
"atmosTestRoutePickerDescription": "將測試傳送到 AirPlay 接收器。只有 AirPlay 會回報已確定的音訊模式。",
|
||||
"atmosTestStop": "停止測試",
|
||||
"atmosTestUrl": "測試檔案 URL",
|
||||
"atmosTestUrlDescription": "原始 .ec3 Dolby Atmos 檔案的 HTTP URL(例如使用 ffmpeg 提取的檔案)",
|
||||
@@ -1344,6 +1353,11 @@
|
||||
"audioOutput": "音訊輸出",
|
||||
"performanceOverlay": "效能監控",
|
||||
"audioPassthrough": "音訊直通",
|
||||
"audioOutputDolbyAtmos": "Dolby Atmos",
|
||||
"audioOutputDolbyAudio": "Dolby Audio",
|
||||
"audioOutputSurround": "環繞聲",
|
||||
"audioOutputSpatial": "空間音訊",
|
||||
"audioOutputStereo": "立體聲",
|
||||
"audioNormalization": "音量標準化",
|
||||
"audioDownmix": "下混為立體聲"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user