疑難排解


為什麼我無法存取試用版應用程式中的本機檔案?

自 Android 11 (API 級別 30) 起,強制使用限定範圍儲存空間可防止檔案系統直接存取。如要在開發期間手動測試,您可以在試用版應用程式資訊清單中新增管理外部儲存空間權限,藉此存取本機檔案:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

接著透過 ADB 授予權限:

adb shell appops set --uid androidx.media3.demo.transformer \
    MANAGE_EXTERNAL_STORAGE allow

為什麼在特定裝置上匯出失敗?

請在 Media3 Issue Tracker 中回報問題,並提供充足的資訊以便重現問題。您可以在程式庫中新增裝置相關問題的解決方法,以便持續改善相容性。

Transformer 是否支援轉換 (或記錄) 遠端媒體?

Transformer 支援遠端漸進式串流,包括 MP4 等媒體檔案容器。

在極差的網路條件下,匯出可能會失敗,因為在 Muxer 中為了識別管道停滯問題,而對遠端媒體進行長時間的檢查而觸發檢查。您可以在 Transformer.Builder 上設定 maxDelayBetweenMuxerSamplesMs 來覆寫預設行為:

Kotlin

Transformer.Builder(context)
    .setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET)
    .build()

Java

new Transformer.Builder(context)
    .setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET)
    .build();

傳入 C.TIME_UNSET 會完全移除逾時,但如果應用程式在晶片組上執行,且 MediaCodec 可能會卡住,建議您設定較大的非零逾時時間。

Transformer 是否支援 8K 輸入?

Transformer 是以各格式的方式實作,因此不一定會限制 8K 影片處理,但裝置上的硬體功能可能表示無法匯出。舉例來說,即使裝置能夠擷取 8k,但由於可用硬體轉碼器或 RAM 資源超出可用上限,系統可能無法解碼並重新編碼 8K 影片。

Transformer 與平台相容媒體轉碼有何關聯?

相容媒體轉碼是 Android 12 (API 級別 31) 的 Android 平台功能,可將中一分鐘的媒體轉換成應用程式支援的格式。如果您選擇採用這項功能,系統就會在需要時以不相容的格式讀取媒體檔案,並將結果快取處理供之後讀取。

Transformer 也支援格式轉換,但這可做為支援資料庫使用,而且應用程式可完全控管轉碼作業。

如何減少匯出延遲或增加處理量?

Transformer 仰賴硬體加速和編碼的 MediaCodec 以及 OpenGL 處理視訊影格。根據我們在一般裝置的測量結果,Transformer 的處理量限制係數是針對未使用高權重影響處理用途的硬體 MediaCodec 編碼器處理量。如此一來,其他導入的導入方式就有可能會受到影響。例如,平台相容轉碼功能的效能與 Transformer 類似。

試用版應用程式的偵錯預覽功能會大幅降低處理量,因此在使用試用版應用程式的發布子版本進行測試時,請關閉預覽功能,真正瞭解效能。