在我的应用程序中,我们需要显示视频帧从服务器接收到我们的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