在我的應用程序中,我們需要顯示視頻幀從服務器接收到我們的android應用程序,
服務器正在發送每秒50幀的視頻數據,在WebM中編碼,即使用libvpx編碼和解碼圖像,在Android中顯示YUV圖像
現在從libvpx其獲得的YUV數據
當前實現是這樣的,
在JNI /原生C++代碼進行解碼,我們就可以顯示在圖像上的佈局,之後,我們正在將YUV數據轉換爲RGB數據 在Android框架,呼籲
public Bitmap createImgae(byte[] bits, int width, int height, int scan) {
Bitmap bitmap=null;
System.out.println("video: creating bitmap");
//try{
bitmap = Bitmap.createBitmap(width, height,
Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bits));
//}catch(OutOfMemoryError ex){
//}
System.out.println("video: bitmap created");
return bitmap;
}
要創建位圖圖像,
使用下面的代碼顯示在imageview的形象,
img = createImgae(imgRaw, imgInfo[0], imgInfo[1], 1);
if(img!=null && !img.isRecycled()){
iv.setImageBitmap(img);
//img.recycle();
img=null;
System.out.println("video: image displayed");
}
我的查詢,總體來說,這一功能被約走40毫秒,有沒有什麼辦法來優化它,
1 - 有沒有什麼方法可以將YUV數據顯示到imageView?
2 - 是否有任何其他的方法來創建映像(位圖圖像)的RGB數據,
3 - 我相信,我總是創造的形象,但我想我應該只有一次創建位圖,並做/總是提供新的緩衝區,當我們收到時。
請分享您的觀點。
'bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(位));'並從YUV變換爲RGB?或者你說這就是你在本地做的事情? – weston 2012-02-08 12:11:10
這是一種方法。檢查出http://stackoverflow.com/questions/9192982/displaying-yuv-image-in-android – bob 2012-06-30 20:34:43