我有我想裁剪的相机的视频预览. 但是,裁剪窗口正在逐帧(裁剪窗口的尺寸和位置). . 我如何在Android(Flutter,Kotlin,Java,nativecript,..没关系)上实现这一目标才能在某种程度上显示实时裁剪结果并能够保存结果以归档? 我不想要代码,我只是不知道要使用哪个库和API(链接也是文档)以及如何解决此问题的概念. 如何逐帧从相机上裁剪实时视频,然后预览并保存到文件? i let a = 10; processor.computeFrame = function computeFrame() { let frame = ctx.getImageData(a,0, this.width*0.5 +a, this.height); // here I use a moving window from left to right for the crop ctx2.drawImage(frame, 0, 0); // and draw i
以下是关于 textureview 的编程技术问答
我设法编写了一个演示,该演示显示了TextureView上的3D模型,并且该模型可以根据手机的传感器移动. 3D引擎由C ++撰写,我需要做的就是将纹理视图的表面纹理介绍给3D引擎. 该引擎调用函数andativeWindow_fromSurface来检索本机窗口并在其上绘制3D模型. 3D引擎不是我想在这个问题中谈论的关键点. 现在,我想将移动的3D模型记录到视频中.一种方法是使用gl_texture_external_oes纹理,就像grafika一样,使3D引擎绘制框架到OES纹理,并在每次呼叫UpdateTexeximage()呼叫后将纹理内容绘制为屏幕.但是,对于某些限制,我不允许使用这种方式. 我计划直接使用纹理视图的表面文字.我认为诸如entacttoglcontext()和distachfromglcontext()之类的功能对我的工作很有用. 有人可以给我一些建议吗? 解决方案 Grafika的" Record GL应用程序"具有三种不同的操作模式
我设法在Android上使用TextureView和Mediaplayer播放视频.我这样做了: 我创建了一个带有surfaceTexture的表面: public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int w, int h) { mSurface = new Surface(surfaceTexture); ... ... } 表面表面播放器: try { mMediaPlayer.setDataSource(mPlayUrl); mMediaPlayer.setSurface(mSurface); ... ... } 没关系,但对我来说还不够.我希望纹理视图与圆角一样,看起来像一个气泡(角度),请查看下面的图片: 我找到了一篇文章( Android 解决方案 我知道这是较晚的答复,但是如果有人仍然
每当我暂停我的活动(实际上是片段)以转到另一个应用程序时,我会尝试恢复视频播放,但它不会播放:我会得到一个空白屏幕.经过调查,我在logcat中看到以下内容 E/BufferQueueProducer: [unnamed-23827-0] queueBuffer: BufferQueue has been abandoned E/MediaPlayer: error (1, -38) E/MediaPlayer: error (1, -38) E/MediaPlayer: error (1, -38) E/MediaPlayer: error (1, -38) E/BufferQueueProducer: [unnamed-23827-0] connect(P): BufferQueue has been abandoned 这是我在简历上调用的代码 player.seekTo(mVideoSeekPosition); player.start(); fyi:我一直在
我有MediaPlayer渲染视频到TextureView.这在工作. 现在,我想在给定时间上在此TextureView上显示静止图像,然后获取MediaPlayer将视频渲染到相同的TextureView. . 这是我的代码渲染位图: Canvas canvas = mTextureView.lockCanvas(); canvas.drawBitmap(sourceBitmap, matrix, new Paint()); mTextureView.unlockCanvasAndPost(canvas); 之后,任何尝试播放视频的尝试导致ERROR_INVALID_OPERATION(-38)是从视频播放器触发的. 我尝试评论drawBitmap的电话,但错误仍然发生.看来调用lockCanvas的简单行为随后unlockCanvasAndPost导致TextureView不适合使用TextureView. 是否有某种方法可以将TextureView重
我无法获得与SurfaceTexture绑定的纹理以统一显示. 更新4:基于更新1(表面 - >外部纹理通过表面纹理 - > fbo->纹理2D)中的管道质地.我可以通过PixelCopy正确地从其表面绘制图片,并且可以确认我的FBO绘图到Texture2D Pipeline具有一些测试颜色.因此,问题是,为什么表面效果不能将其表面转换为纹理? i在Java中生成Texture,然后将其指针传递回统一: public void initGLTexture() { Log.d("Unity", "initGLTexture"); int textures[] = new int[1]; GLES20.glGenTextures(1, textures, 0); mTextureId = textures[0]; GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureId);
我正在尝试在相机预览中应用实时效果,我该怎么做? (就像 cameral2 ) " https://lh4.ggpht.com/2rvnmzocuy9nudrcpkxgx9mt0tgmops_f1fdcagpodzlopxyttf7hkqfbbtbtgbtgbtgngjeqoi = h310-rw" 如果左侧不涉及卷轴,我知道两种在相机preivew上显示实时效果的方法. 使用 glsurfaceview 和 使用 但是,我不知道如何使用实时效果项目覆盖GLES组成. 我是否应该选择glsurfaceview(for performance)或textureView(for flexble)实现scrollview ?哪一个是更好的解决方案,为什么? 是否可以在多个视图中共享一个EGL上下文/表面?,如果是的,则可以参考任何代码片段? 谷歌搜索和阅读不错的 Graphics Architecture 文章和 grafika 项目,我仍然不知道... 也许我想念
在我的Android应用中,我需要使用以下z订单呈现三个视图: 在底部,覆盖整个屏幕的A MediaCodec解码器的输出表面.我要求我必须改变MediaCodec产生的图像(例如,缩放它) 在中间,GLSurfaceView(或我定义的其他表面/视图运行的GL着色器),覆盖整个屏幕.显然,该层中的某些像素将是透明的,以便在下面看到MediaCodec输出. 在上面,任何其他视图 - 说ImageView.不确定我是否需要这些最高视图的透明度,也许完全不透明的矩形视图还可以 - 它们只是不会覆盖整个屏幕并将四处走动. 看起来这是不可能的,但也许我缺少某些东西,或者有一种方法可以在较低层次上付出更多的努力(例如,EGL上下文或类似的东西...我目前不明白) . 我之所以无法使它起作用,而担心这是不可能的: 对于底部MediaCodec输出层(1),我必须能够转换图像.因此,我给MediaCodec呈现的表面必须来自TextureView 为了能够浏览中间GLS
是否可以同时将Android摄像头预览广播为2个不同的SurfaceView控件?我看到了一些实时显示出效果的应用程序,它们如何实现?我读到有关纹理视图的信息,这是要使用的视图吗?我在哪里可以找到多个同时摄像机预览的示例? 谢谢 解决方案 我不认为可以同时独立打开2个相机预览,因为摄像机被视为共享资源.但是,可以绘制到多个表面视图,这就是您描述的应用程序. 其他解决方案 好吧,正如他们在 preview "> preview">"这个问题,我下载了在 Renderthread 中是 sprite2d atribute称为MRECT. 我只是制作另一个称为MRECT2的实例,并使用MRECT具有相同参数进行配置,除了旋转,我将其放在Double上: : mrect.setrotation(rotangle); mrect2.setRotation(rotangle*2); 这就是结果 仍然有很多代码可以理解,但是它有效,似乎是一个非常有前途的途径.
简单地说,我要做的就是在Android中显示一个实时视频帧(每个帧都是YUV420格式).我有一个回调函数,可以将单个框架作为字节数组接收.看起来像这样的东西: public void onFrameReceived(byte[] frame, int height, int width, int format) { // display this frame to surfaceview/textureview. } 可行但慢的选择是将字节数组转换为位图并在SurfaceView上绘制.将来,理想情况下,我希望能够改变此框架的亮度,对比度等,因此我希望我可以使用OpenGl-es.我有效地做什么选择? 请记住,与Camera或MediaPlayer类的实现不同,我无法使用camera.setPreviewTexture(surfaceTexture);将输出引导到SurfaceView/textureView,因为我使用c. 中使用GSTREAMER接收单个帧
是否有对表面,表面持有人,eglsurface,surfaceview,glsurfaceview,surfaceTextule和textureView的详细说明?特别是: SurfaceView和TextureView之间有什么区别? 我需要使用glsurfaceview使用OpenGL ES? 表面和eglsurface如何相互作用? SurfaceTexture做什么? 为什么我在SurfaceView上绘制的东西必须超过或下方? 什么是SurfaceFlinger? 状态和导航栏的组成如何工作? 当我们使用它时,在Android上构建游戏循环的正确方法是什么? 解决方案 现在可以在Android开源项目网站上找到这些和许多其他问题的答案: Android System-Level Graphics 该文档以低级基础架构的解释开始,然后解释如何从中构建高级功能.目的是不是为常见问题提供直接答案,而是要以一个细节来描述系统,这使得答案显而易见而
我正在使用纹理视图在我的Android应用中显示相机的预览.但是,我注意到的是,每次我的应用程序都暂停时,我都会遇到此错误: 03-18 18:23:44.315: W/BufferQueue(19582): [unnamed-19582-20] cancelBuffer: BufferQueue has been abandoned! 有人可以告诉我这里发生了什么吗?当我的应用程序暂停时,我所做的就是从onSurfaceTextureDestroyed() 中降低这样的一切 public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.release(); return true; } 解决方案 您正在做的事情本质上是 texture
iam试图为使用纹理视图呈现的视频动画,动画可以正常工作,但是当我将纹理缩放到不同的尺寸时,媒体播放器不扩展以适合纹理的大小,视频始终播放全屏在背景中,我只能在缩放纹理 时才能看到视频的一部分 我的代码在运行Android 4.0的某些Android设备上正常工作,但在具有以后版本的Android版本的设备上不起作用.这是我的动画代码,请告诉我问题在哪里.. public class MainActivity extends Activity implements TextureView.SurfaceTextureListener{ AnimationSet animset; TextureView myTexture; MediaPlayer mMediaPlayer; Surface s; int height; static final String LogFileName = "Log"; int width; protected void onCreate(Bundl
我正在使用javacv的FFmpegFrameGrabber返回 Frame 基本上包含一个基本包含一个的 Buffer[] 为视频框架保存图像像素. 由于性能是我的首要任务,因此我想使用OpenGL ES直接显示此Buffer[]而不将其转换为Bitmap. 要显示的视图仅摄入屏幕的一半,然后遵循OpenGL ES 文档: 想要将OpenGL ES图形合并到其一小部分布局中的开发人员应该查看TextureView. 所以我想TextureView是该任务的正确选择.但是,我没有发现很多资源(其中大多数是相机预览示例). 我想问我如何将Buffer[]绘制到TextureView?如果这不是最有效的方法,我愿意尝试您的选择. 更新:,因此我目前已经设置了这样的设置: 在我的VideoActivity中,我反复提取包含ByteBuffer的视频的Frame,然后将其发送到我的MyGLRenderer2以转换为OpenGles的纹理: ...
手动创建时,默认情况下将SurfaceTexture连接到GLContext?如果是这样,如何? 这是一个例子,我正在尝试创建自己的SurfaceTexture并将其设置为TextureView: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.version); TextureView textureView = (TextureView) findViewById
我正在尝试使用Android上的TextureView制作绘图/绘画应用程序.我想支持高达4096x4096像素的图表,这对于我的最低目标设备(我用于测试)似乎是合理的,该设备是Google Nexus 7 2013,它具有不错的Quad Core CPU和2GB内存. . 我的要求之一是,我的观点必须在一个视图中,该视图可以使其被缩放和外出并放置,这是我编写的所有自定义代码(想想iOS的UISCROLLVIEW). 我尝试使用on Drawd的常规视图(不是TextureView),而且性能绝对可怕 - 一秒钟不到1帧.即使我只用更改的rect打电话给Invalidate(rect),也会发生这种情况.我尝试关闭视图的硬件加速度,但我认为什么都没有渲染,因为4096x4096对于软件来说太大了. 然后,我尝试使用TextureView,并且性能要好一些 - 每秒约5-10帧(仍然很糟糕但更好).用户绘制了一个位图,然后使用背景线程将其绘制到纹理中.我正在使用Xamari
我有一个带固定宽度和高度的纹理视图,我想在其中显示一个相机预览.我需要裁剪相机预览,以使其在我的纹理视图中看起来不会伸展.如何进行裁剪?如果我需要使用OpenGL,如何将表面纹理绑至OpenGL以及如何使用OpenGL进行裁剪? public class MyActivity extends Activity implements TextureView.SurfaceTextureListener { private Camera mCamera; private TextureView mTextureView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_options); mTextureView = (T
我正在尝试使用单个线程来使用Canvas Lock/Unlock渲染UI线程的三个单独的TextureView.观察到的问题是绘制每个纹理视图的一致闪烁,闪烁由A 不同的 textureview的框架组成.因此,例如,我按顺序绘制框架A,B和C.框架C会看起来不错,但是框架A和B会偶尔使用框架C闪烁,并且框架A有时会在框架B. 的实例中闪烁. 我已经阅读了描述Android核心图形的文档,并对Android框架缓冲系统的工作方式有相当好的了解.简而言之,我的怀疑是我执行的lockcanvas/unlockcanvasandPost呼叫连续速度太快了,而Framebuffer无法完成我的请求,而只是绘制上一个(不正确的)帧. 我已经尝试了几件事来解决这个问题.试图使用编舞的人在继续致电帆布之前等待Vsync,但是正如预期的那样,我的帧速度降低了,但是问题仍然存在.我还尝试了一个替代渲染循环,没有睡眠命令,在观察到的现象中没有差异. 本质上,我没有关于如何解决这个问题的想