В моем приложении нам нужно отобразить получение видеофрагмента с сервера на наше приложение для Android,
Сервер отправляет видеоданные с частотой 50 кадров в секунду, закодированные в WebM, то есть используя libvpx для кодирования и декодировать изображения,Отображение изображения YUV в Android
Теперь после декодирования с libvpx его получения данных YUV, что мы можем отображаться поверх макета изображения,
текущая реализация является чем-то вроде этого,
В JNI код/Native 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 - Есть ли другой способ создания изображения (Bitmap изображение) из данных RGB,
3 - Я считаю, что я всегда создаю образ, но я полагаю, я должен создать изображение только один раз и сделать/всегда поставляйте новый буфер, когда и когда мы получаем.
поделитесь своими мнениями.
'bitmap.copyPixelsFromBuffer (ByteBuffer.wrap (биты));' делает преобразование из YUV в RGB? Или вы говорите, что это то, что вы делаете в родном? – weston
Вот один из способов сделать это. Проверьте http://stackoverflow.com/questions/9192982/displaying-yuv-image-in-android – bob