2016-03-02 67 views
0

我使用MediaCodec對相機數據進行編碼,當我在名爲Vivo X5 Pro(android 5.0,API 21)的設備上使用它時,MediaCodec編碼的數據大小高於90000,並且通常在其他設備上大小約爲15000.然而,我改變媒體格式的參數,它也無濟於事。 我還發現,當我在Vivo X5 Pro(android 5.0,API 21)上使用方法MediaCodec.getOutputFormat()獲得格式時,它有7個數據,比其他正常情況多一個,它命名爲「buffer-size」是1048576,這是否會影響MediaCodec編碼?我如何使用Vivo X5 Pro(android 5.0,API 21)編碼正常的數據大小?感謝幫助!MediaCodec編碼數據太大

MediaCodec mEncoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC); 
    MediaFormat format = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, 320, 568); 
    format.setInteger(MediaFormat.KEY_BIT_RATE, 320 * 568 * 2); 
    format.setInteger(MediaFormat.KEY_FRAME_RATE, 20); 
    format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1); 
    format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 320 * 568); 

PS:不過我改變PARAMS體內X5臨(的是Android 5.0,API 21)編碼數據量仍高於90000

回答

1

確保您通過適當的時間戳的輸入框,在右邊單位(微秒),否則編碼器可以每幀分配太少/多位 - 參見https://stackoverflow.com/a/20663056/3115956以獲得對此的更長解釋。

您是否嘗試過降低/提高比特率參數以查看它是否實際更改了輸出大小?否則,編碼器可能僅僅因爲它不尊重這個參數而被破壞。 (另外,第一個輸出數據包的大小可能不會完全反映輸出流的總平均比特率,因此即使第一幀可能有點過大,後面的數據也可能彌補它的不足。)

+0

似乎與我的情況相反。我的情況太大了,他太小了。我改變了參數,但它在Vivo X5 Pro中不起作用(尺寸不低),但它適用於其他設備.T_T –

+0

它只是第一個緩衝區的大小太大,還是它們太大?如果你改變比特率,後面的緩衝區是否也保持相同的大小或者它們是否改變(而第一個緩衝區仍然很大)? – mstorsjo

+0

都太大了,如果我改變比特率,大小沒有變化 –