- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个扩展 Camera2Capturer 的类,以便从相机中获取帧,对其进行修改,然后将其反馈给观察者回调。
我能够获取帧,将其转换为位图,将该位图修改为我想要的,然后使用 OpenGL 将其绘制到一个新的 VideoFrame 中,并返回 capturerObserver.onFrameCaptured(videoFrame);
问题是,我新创建的 videoFrame 被拉伸(stretch)了。我检查时位图是正确的,但绘制的视频帧在侧面拉伸(stretch)。我在不同分辨率的不同设备上尝试过,但问题在任何地方都完全相同。
这是我的 startCapture 方法的代码:
@Override
public void startCapture(int width, int height, int fps) {
super.startCapture(width, height, fps);
this.width = width;
this.height = height;
captureThread = new Thread(() -> {
final int[] textureHandle = new int[1];
GLES20.glGenTextures(1, textureHandle, 0);
Matrix matrix = new Matrix();
matrix.postScale(1f, -1f);
TextureBufferImpl buffer = new TextureBufferImpl(width, height, VideoFrame.TextureBuffer.Type.RGB, textureHandle[0], matrix, surTexture.getHandler(), yuvConverter, null);
// Bind to the texture in OpenGL
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);
try {
while (true) {
surTexture.getHandler().post(() -> {
if (needsToRedrawFrame) {
VideoFrame lastFrameReceived = capturerObs.getLastFrameReceived();
//This is the bitmap I want to draw on the video frame
Bitmap bitmapToDraw = drawingCanvasView.getmBitmap();
//At this point, bitmmapToDraw contains the drawing and the frame captured from the camera overlayed
//Now we need to convert it to fit into the onFrameCaptured callback (requires a VideoFrame).
// Set filtering
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
// Load the bitmap into the bound texture.
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmapToDraw, 0);
bitmapToDraw.recycle();
//The bitmap is drawn on the GPU at this point.
//We transfer it to the VideoFrame
VideoFrame.I420Buffer i420Buf = yuvConverter.convert(buffer);
VideoFrame videoFrame = new VideoFrame(i420Buf, 0, lastFrameReceived.getTimestampNs());
ogCapturerObserver.onFrameCaptured(videoFrame);
needsToRedrawFrame = false;
}
});
Thread.sleep(100);
}
} catch (Exception e) {
LogHelper.logError(CapturerObserverProxy.class, "RMTEST THIS > " + e.getMessage(), e);
}
});
captureThread.start();
}
最佳答案
事实证明框架是正确绘制的。但是框架的分辨率与实际绘制的 Surface 不同,因此会进行拉伸(stretch)。
我不得不调整我要绘制的位图的大小(同时保持纵横比!)。如果位图与渲染的 Surface 大小相同,则不会被拉伸(stretch)。
关于android - 使用 OpenGL 将位图绘制到 VideoFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59856140/
我正在使用 native 实现 (org.webrtc:google-webrtc:1.0.24064) 为 Android 开发基于 WebRTC 的应用程序,并且我需要与相机流一起发送一系列位图。
对于一个项目,我需要在非常特定的时间暂停视频。为了准确起见,我使用 VideoFrame 观看视频帧。 demo here 它有效,但我不明白为什么我需要单击两次才能重新播放视频。有什么想法或其他解决
我正在开发一个扩展 Camera2Capturer 的类,以便从相机中获取帧,对其进行修改,然后将其反馈给观察者回调。 我能够获取帧,将其转换为位图,将该位图修改为我想要的,然后使用 OpenGL 将
我正在尝试获取视频的帧,所以我像这样使用 MediaMetadataRetriever.getFrameAtTime(): Uri directorio = Uri.parse("androi
我是 Computer Vison 的中级水平并且相当精通 opencv python 但是来到 c++ 我在从视频提要中选择 ROI 并显示裁剪提要时遇到问题。我的代码如下所示。 #include
问题是 webrtc::VideoFrame 和 webrtc::EncodedImage 有什么区别。问题的目的是我有 webrtc::EncoededImage 并且我需要将它发送给另一个对等方。
我希望你大声而自豪。 我是 PyAV 的新手我正在使用 aiortc对于 WebRTC MediaServer,在 aiortc 中现场 session 我有av.VideoFrame每个视频帧可用的
我正在寻找关于 openni VideoFrame 对象格式的一般描述/规范,我试图将其转换为 opencv Mat。 是否有一些官方网站/文档可用?我在 ros.org 上找到了以下内容其中描述了
我正在使用 MediaMetadataRetriever 按视频帧创建缩略图,但我在 Logcat 中收到此消息: E/MediaMetadataRetrieverJNI(14060): getFra
我是一名优秀的程序员,十分优秀!