疑難排解


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

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 問題追蹤器上提出問題,並提供足夠資訊來重現問題。您可以將裝置專屬問題的解決方法新增至程式庫,隨著時間提升相容性。

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

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

在網路狀況極差的情況下,匯出作業可能會失敗,因為緩衝遠端媒體的時間過長,會觸發多工器中的檢查,目的是要找出管道是否停滯。如要覆寫預設行為,請在 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 的效能相近。

示範應用程式的偵錯預覽會大幅降低輸送量,因此使用示範應用程式的發布版本進行測試時,請關閉預覽功能,以瞭解實際效能。