使用
JavaCV来使用多播流,我想在GLSurfaceView中呈现视频帧.使用FFmpegFrameGrabber类抓取帧;我已成功将捕获的帧输出到SD卡和非GL表面以进行可视化调试.我一直在寻找解决方案或线索无济于事;这是需要帮助的代码部分:
// get the frame
opencv_core.IplImage img = capture.grab();
if (img != null) {
opencv_core.CvMat rgbaImg = opencv_core.CvMat.create(height,width,CV_8U,4);
Bitmap bitmap = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
// convert colorspace
cvCvtColor(img,rgbaImg,CV_BGR2RGBA);
bitmap.copyPixelsFromBuffer(rgbaImg.getByteBuffer());
Rect rect = new Rect(x,y,height);
Canvas c = surface.lockCanvas(rect);
c.drawBitmap(bitmap,null);
surface.unlockCanvasAndPost(c);
if (bitmap != null) {
bitmap.recycle();
}
if (rgbaImg != null) {
rgbaImg.release();
}
}
如果有更好的方法可以做任何事情,请告诉我.
编辑因为在这个问题的第一部分没有太多的动作,所以用于创建Surface的SufaceTexture渲染的“解决方法”是否可能?
SurfaceTexture surfaceTexture = new SurfaceTexture(textureId);
surfaceTexture.setOnFrameAvailableListener(this);
surface = new Surface(surfaceTexture);
注意:我现在被迫坚持使用Android 4.2.2.