當前位置:首頁 » 安卓系統 » android硬解碼

android硬解碼

發布時間: 2024-01-09 12:14:12

1. 在android 平台實現硬解的大俠們,你們是怎麼實現硬解碼的

1、視頻尺寸
一般都能支持176X144/352X288這種尺寸,但是大一些的,640X480就有很多機子不行了,至於為什麼,我也不知道。當然,這個尺寸必須和攝像頭預覽的尺寸一致,預覽的尺寸可以枚舉一下。
2、顏色空間
根據ANdroid SDK文檔,確保所有硬體平台都支持的顏色,在攝像頭預覽輸出是YUV12,在編碼器輸入是COLOR_FormatYUV420Planar,也就是前面代碼中設置的那樣。 不過,文檔終究是文檔,否則安卓就不是安卓。
在有的平台上,這兩個顏色格式是一樣的,攝像頭的輸出可以直接作為編碼器的輸入。也有的平台,兩個是不一樣的,前者就是YUV12,後者等於I420,需要把前者的UV分量顛倒一下。
byte[] i420bytes = null;
private byte[] swapYV12toI420(byte[] yv12bytes, int width, int height) {
if (i420bytes == null)
i420bytes = new byte[yv12bytes.length];
for (int i = 0; i < width*height; i++)
i420bytes[i] = yv12bytes[i];
for (int i = width*height; i < width*height + (width/2*height/2); i++)
i420bytes[i] = yv12bytes[i + (width/2*height/2)];
for (int i = width*height + (width/2*height/2); i < width*height + 2*(width/2*height/2); i++)
i420bytes[i] = yv12bytes[i - (width/2*height/2)];
return i420bytes;
}
3、輸入輸出緩沖區的格式
SDK里並沒有規定格式,但是,這種情況H264的格式基本上就是附錄B。但是,也有比較有特色的,它就是不帶那個StartCode,就是那個0x000001,搞得把他編碼器編出來的東西送給他的解碼器。
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
byte[] outData = new byte[bufferInfo.size + 3];
outputBuffer.get(outData, 3, bufferInfo.size);
if (frameListener != null) {
if ((outData[3]==0 && outData[4]==0 && outData[5]==1)
|| (outData[3]==0 && outData[4]==0 && outData[5]==0 && outData[6]==1))
{
frameListener.onFrame(outData, 3, outData.length-3, bufferInfo.flags);
}
else
{
outData[0] = 0;
outData[1] = 0;
outData[2] = 1;
frameListener.onFrame(outData, 0, outData.length, bufferInfo.flags);
}
}

熱點內容
微信在安卓手機的哪個文件夾 發布:2025-01-21 18:43:52 瀏覽:51
sql127001 發布:2025-01-21 18:31:50 瀏覽:112
伺服器ip是什麼格式 發布:2025-01-21 18:13:13 瀏覽:706
oa和郵箱的初始密碼在哪裡改 發布:2025-01-21 18:08:46 瀏覽:52
如何去除pdf的加密 發布:2025-01-21 18:08:46 瀏覽:565
雲端的伺服器怎麼設置ip 發布:2025-01-21 17:48:52 瀏覽:186
會議腳本 發布:2025-01-21 17:41:29 瀏覽:23
android的toast 發布:2025-01-21 17:41:28 瀏覽:9
linux默認安裝的mysql 發布:2025-01-21 17:40:08 瀏覽:912
java輸出資料庫 發布:2025-01-21 17:35:38 瀏覽:963