2015-11-11 75 views
2

一直在尋找通過谷歌公佈的camera2視頻sample app和方法之一去如下:記錄4K與MediaRecorder

/** 
* In this sample, we choose a video size with 3x4 aspect ratio. Also, we don't use sizes 
* larger than 1080p, since MediaRecorder cannot handle such a high-resolution video. 
* 
* @param choices The list of available sizes 
* @return The video size 
*/ 
private static Size chooseVideoSize(Size[] choices) { 
    for (Size size : choices) { 
     if (size.getWidth() == size.getHeight() * 4/3 && size.getWidth() <= 1080) { 
      return size; 
     } 
    } 
    Log.e(TAG, "Couldn't find any suitable video size"); 
    return choices[choices.length - 1]; 
} 

我撥弄着我自己的實現camera2,並試圖錄制4K視頻與媒體記錄器工作得很好 - 記錄的文件報告尺寸爲3840×2160.

因此,是樣品中的評論不正確或MediaRecorder不能處理更大的決議對棒棒糖,但能夠在棉花糖或別的什麼?

+2

媒體錄製的功能因設備而異,與操作系統相比,差異不盡相同。 – CommonsWare

+0

所以你建議作者是安全的說,所有的設備將處理<= 1080p,但更大的水庫是不安全的?儘管此方法中的'choices'數組來自'CameraCharacteristics' /'StreamConfigurationMap' getOutputSize--我認爲這是從相機硬件配置文件收集的?混淆.. – vkislicins

+3

我的意思是Android上的相機內容通常令人困惑。 :-) – CommonsWare

回答

4

CamcorderProfile確實支持4K,因爲'QUALITY_2160P',因此最佳做法是檢查是否支持該配置文件。如果是這樣,那麼使用這個大小的攝像機2輸出到MediaRecorder預計將工作。

但是,由於並非所有設備都支持4K,因此1080p是示例應用程序中使用的保守限制 - 應用程序的某些部分還早於CamcorderProfile的4K支持,因此評論有點過時。

2

此方法中的選擇數組來自CameraCharacteristics/StreamConfigurationMap getOutputSize - 我認爲這是從相機硬件配置文件中收集的?

權,但該攝像機配置並不一定符合MediaRecorder功能,例如this

您可以更好地信任攝像機型材,

mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 

但並非沒有glitches,並不能保證在特定設備的MediaRecorder無法處理不止於此。

無論如何,CamcorderProfile擁有高達1080p的「官方」配置文件,因此對於示例代碼來說這是一個合理的選擇,它並不聲稱爲最廣泛的設備提供最佳可能的結果。

+0

沒錯,但是這個攝像頭配置文件不一定符合MediaRecorder - 你確定這對camera2還是相關的嗎?這一切都是真實的,我用前棒棒糖相機的實施經歷了與此相關的痛苦。我希望他們修復/簡化爲camera2和'StreamConfigurationMap'是camera2類 – vkislicins

+0

相機仍然是獨立於MediaRecorder,即使它是camera2。我相信攝像機與MediaRecorder更緊密地結合在一起,但即使這樣也不能保證。實際上,我個人的經驗表明,camera2的實現經常比舊的API更不穩定。 –

+0

'CamcorderProfile.QUALITY_HIGH'不適用於Sony L1 – vuhung3990