首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏向治洪

    Android 控件之TextureView

    例如,将TextureView设置成半透明。值得注意的是TextureView必须在硬件加速的窗口中。 myView.setAlpha(0.5f) TextureView的继承层次如下图所示: 从类图中可以看到,TextureView继承自View,它与其它的View一样在View hierachy 关于TextureView更多的介绍可以通过Textureview 官方API来了解。 实例 例如,下面是使用MediaPlayer和TextureView实现视频播放的实例。注意TextureView中的draw方法和onDraw方法都是被定义成final的,不能被子类覆盖。 下面是具体的代码: public class MainView extends TextureView implements TextureView.SurfaceTextureListener {

    2K60编辑于 2022-11-30
  • 来自专栏码上就说

    聊聊SurfaceView和TextureView

    SurfaceView实现机制 双缓冲机制 TextureView实现机制 TextureView和SurfaceView的优缺点 1.SurfaceView实现机制 SurfaceView继承自View 和SurfaceView不同,TextureView必须在硬件加速的窗口中。 它显示的内容流数据可以来自Application进程或是远端进程。 TextureView继承自View,它与其它的View一样在View hierachy中管理与绘制。 TextureView重载了draw()方法,其中主要SurfaceTexture中收到的图像数据作为纹理更新到对应的HardwareLayer中。 4.TextureView和SurfaceView的优缺点 SurfaceView TextureView 内存 低 高 耗电 低 高 绘制效率 及时 1 ~ 3帧的延迟 截图 不支持 支持 动画 不支持

    4.9K21发布于 2020-11-11
  • 来自专栏字节流动

    SurfaceView 与 TextureView 详解

    TextureView 因为上面所说的SurfaceView不在主窗口中,它没法做动画没法使用一些View的特性方法,所以在Android 4.0中引入了TextureView,它是一个结合了View和 TextureView是一个可以把内容流作为外部纹理输出在上面的View。它本身需要是一个硬件加速层。事实上TextureView本身也包含了SurfaceTexture。 当客户端使用 TextureView 呈现内容时,界面工具包会使用 GPU 将 TextureView 的内容合成到 View 层次结构中。 在7.0以下系统如果使用场景有动画效果,可以选择性使用TextureView。 由于失效(invalidation)和缓冲的特性,TextureView增加了额外1~3帧的延迟显示画面更新。 TextureView总是使用GL合成,而SurfaceView可以使用硬件overlay后端,可以占用更少的内存。 TextureView的内部缓冲队列导致比SurfaceView使用更多的内存。

    14.9K60发布于 2021-01-12
  • 来自专栏雪月清的随笔

    如何使用TextureView+OpenGL绘制相机预览

    Google官方的Camera2BasicKotlin工程到手(该工程使用TextureView显示相机预览) TextureView显示相机预览 Camera2启动相机预览需要三个步骤: 打开Camera --创建Session--启动预览 在创建Session的时候,传入的surface关联了textureView持有的SurfaceTexture: val texture = mTextureView ) 关联OpenGL 创建EGL环境,绑定输出到textureView持有的SurfaceTexture上; 创建Session的时候传递一个关联了OES纹理的surface,当预览数据更新时,将数据更新到纹理上 eglCreateWindowSurface(mEglDisplay, mEglConfig[0], textureView.surfaceTexture, null) // 6. eglSwapBuffers(mEglDisplay, mEglSurface) Demo 当TextureView引入GL环境后,我们就可以添加一些有趣的东西了,比如引入一个简单的粒子系统: ?

    3.3K20发布于 2020-06-23
  • 来自专栏程序员修炼之路

    Android经典实战之TextureView原理和高级用法

    详细介绍 Android 中的 TextureView 1. TextureView 的原理 TextureView 是一个继承自 View 的类,其主要优势在于能够直接在硬件加速层进行渲染。 与 SurfaceView 不同,TextureView 支持复杂的视图层次并且可以与其他视图时序混用。这意味着,TextureView 能真正像普通的 View 一样参与到视图的动画和变换中。 private lateinit var textureView: TextureView private var mediaPlayer: MediaPlayer? = findViewById(R.id.textureView) textureView.surfaceTextureListener = object : SurfaceTextureListener 在 TextureView 的内容上进行更多自定义绘制。

    1.8K10编辑于 2024-09-13
  • SurfaceTexture` 只有在 `TextureView` 被附加到窗口(`onAttachedToWindow()`)之后才可用

    “句柄”是一种编程模式,表示你手里拿的不是资源本体,而是控制/访问该资源的控制权(指针或引用)SurfaceTexture` 只有在 `TextureView` 被附加到窗口(`onAttachedToWindow ()`)之后才可用 更准确的理解是: 只有 TextureView 被附加到窗口后,系统才会为它创建和分配 SurfaceTexture(也就是背后的图形缓冲区)资源,这样 Camera 才能把图像数据输出到这个 逻辑顺序是这样的: 你创建并添加 TextureView 到界面上 TextureView 被附加到窗口后,系统创建 SurfaceTexture 调用回调 onSurfaceTextureAvailable Surface 把这个 Surface 传给 Camera.setPreviewSurface() Camera 开始往这个 Surface 送图像数据 图像显示在屏幕上 ✅ 所以简明结论是: 必须等 TextureView

    20410编辑于 2025-08-16
  • 来自专栏程序员修炼之路

    Android经典面试题之SurfaceView 和 TextureView有什么区别?

    作用: TextureView 是一个显示内容的控件,可以在其内容上进行复杂的视图变换,如缩放、旋转等。 TextureView 渲染的内容会在视图层次中作为纹理进行处理。 使用场景: 视频播放需要特效变换(例如旋转、缩放) 动画内容 拍照、视频录制时的取景预览 val textureView = findViewById<TextureView>(R.id.textureView ) textureView.surfaceTextureListener = object : TextureView.SurfaceTextureListener { override fun TextureView 在视图层级中作为纹理处理,性能稍逊,但提供更多视图操作灵活性。

    1.6K10编辑于 2024-07-31
  • 来自专栏阿利民

    「Android音视频编码那点破事」第二章,使用TextureView渲染Camera画面

    TextureView初始化完成时,我们调用startPreview(screenTexture: SurfaceTexture, width: Int, height: Int)方法,来通知CameraWrapper 并且Render接收TextureView的SurfaceTexture缓冲区,包括宽高,在内部初始化完成后开始渲染。    Tip:这里会有两个SurfaceTexture,一个时我们自己初始化给Camera的SurfaceTexture,一个是TextureView提供的SurfaceTexture。 SurfaceTexture:前面讲到的由TextureView提供的屏幕纹理缓冲区。 ScreenTextureWrapper:屏幕纹理缓冲区的环境。 width:TextureView的宽度。 height:TextureView的高度。

    1.5K20编辑于 2022-05-16
  • 来自专栏Android Camera开发

    从零开发一款相机APP 第七篇: Camera2相机 预览功能实现

    本课程内容由 @公众号:小驰笔记出品,欢迎关注公众号,获取更多交流信息~ 显示需要借助surface,一般采用surfaceview或者textureview; 相关重要流程: 1、自定义TextureView mSurfaceTextureListener); } 3、surfaceTexture监听中,SurfaceTextureAvailable的时候,去执行opencamera的操作 private final TextureView.SurfaceTextureListener mSurfaceTextureListener = new TextureView.SurfaceTextureListener() { @Override

    79420编辑于 2022-12-20
  • 来自专栏字节流动

    Android 图形架构

    TextureView TextureView是SurfaceTexture和View的组合。 GLES可以通过把TextureView中的SurfaceTexture传给创建EGL的调用来在TextureView上渲染。 SurfaceView or TextureView SurfaceView有自己专用的Surface,而TextureView和它所属Window上的view共用一块Suface。 使用TextureView时,UI工具通过GPU将TextureView中的内容合成到它的view hierarchy中——当TextureView内容更新时,可能会导致其它view的重绘。 而缩放TextureView只需要使用TextureView#setTransform()配置转换矩阵。

    3K32编辑于 2022-09-26
  • 来自专栏音视频直播技术专家

    音视频直播技术--视频的渲染与展示

    各种View大比较 下面我们来比较一下 SurfaceView、GLSurfaceView 和 TextureViewTextureView TextureView 同样继承于View,它在4.0(API level 14)中引入。 由于发现GLSurfaceView 不能根据屏幕的变化而变化,所以引入了 TextureView。 所以TextureView必须在硬件加速的窗口中(可以通过 Android的配置文件进行设置)。 因为TextureView不包含Surface,所以其实就是一个普通的View,可以和其它普通View一样进行移动,旋转,缩放,动画等变化。

    1.7K30发布于 2020-04-02
  • 来自专栏QQ音乐技术团队的专栏

    小窗播放视频的原理和实现(下)

    文中几种方案的对比,以及SurfaceView、GLSurfaceView和TextureView相关知识点的讲解,非常实用,值得收藏。 但TextureView需要硬件加速层,也就是必须使用GPU绘制,使得TextureView比SurfaceView和GLSurfaceView更耗性能、更耗电。 TextureView执行动画时,效果和普通View一样。 TextureView执行动画时,效果和普通View一样。 TextureView执行动画时,在执行移动、缩放、旋转和透明度动画时不会出现异常,更适用于小窗播放视频功能。

    5.1K110发布于 2018-03-01
  • 来自专栏程序员修炼之路

    Android中SurfaceView的双缓冲机制和普通View叠加问题解决办法

    解决办法 为了在应用中更好地管理 SurfaceView 和普通 View 的叠加问题,可以考虑以下解决方案: 1、 使用 TextureViewTextureView 也是用于高效图形渲染的控件, 缺点是 TextureView 的性能可能不如 SurfaceView 高,特别在高帧率的场景下。 TextureView textureView = new TextureView(context); textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener

    1.1K10编辑于 2024-09-13
  • 来自专栏QQ音乐技术团队的专栏

    小窗播放视频的原理和实现(上)

    要实现这些功能就得使用TextureView,但TextureView有个缺点就是性能低耗电高。 四、TextureView 如下源码所示,TextureView继承于View,并重载了View的draw()方法,它与其它的View一样在View hierarchy中管理与绘制。 值得注意的是TextureView必须在硬件加速的窗口中,通过HardwareLayer更新视图。它需要硬件加速层,这使得TextureView比SurfaceView更耗性能。 TextureView作为普通View在View hierarchy中管理与绘制,更适用于小窗播放视频功能。 但TextureView需要硬件加速层,使得TextureView比SurfaceView和GLSurfaceView更耗性能。

    11.6K181发布于 2018-02-01
  • 来自专栏码上就说

    播放视频时如何在视频帧上添加水印

    有同学可能会说了,我直接用TextureView渲染视频画面,然后在TextureView上盖一层ImageView可以吗? 好像显示效果上没有什么问题,但是仔细分析还是不能满足要求? 1.ImageView和TextureView有明显的层级关系,如果出现View层级的问题,不太好处理 2.TextureView渲染视频的时候,提供了getBitmap()接口来截取视频的某一帧,如果盖上一层 ImageView无法实现截图的功能 3.ImageView盖在TextureView,会拦截TextureView的事件,造成播放器交互方面的问题。 上面三个问题表示TextureView上面盖一层ImageView的方式是行不通的。 既然行不通,有没有方法可以解决这个问题? 其实除了TextureView和SurfaceView渲染视频之外,GLSurfaceView也是渲染视频的一种View,GLSurfaceView和OpenGL结合,可以实现给播放中的视频添加水印的目的

    3.9K00发布于 2020-11-11
  • 来自专栏RTSP/RTMP直播相关

    Android平台RTSP|RTMP播放器之视音频效果设置

    successful */public native int SmartPlayerSetFlipHorizontal(long handle, int is_flip);渲染模式:支持SurfaceView和TextureView = null && sSurfaceView instanceof TextureView && ((TextureView) sSurfaceView).getSurfaceTexture() ! = null)texture_view_surface_ = new Surface(((TextureView) sSurfaceView).getSurfaceTexture());}surface 支持断网自动重连、视频追赶,支持buffer状态等回调;支持视频view实时旋转(0° 90° 180° 270°);支持视频view水平反转、垂直反转;支持Surfaceview/OpenGL ES/TextureView

    67510编辑于 2024-09-05
  • 来自专栏雪月清的随笔

    Android Camera1显示预览的四种方式

    方法设置SurfaceHolder给相机,通常在使用SurfaceView作为预览控件时使用; 通过Camera#setPreviewTexture方法设置SurfaceTexture给相机,通常在使用TextureView SurfaceHolder#surfaceCreated回调中拿到准备好的SurfaceHolder设置给Camera即可 camera.setPreviewDisplay(surfaceHolder); 方式二、使用TextureView 使用TextureView作为预览UI控件时,在TextureView#onSurfaceTextureAvailable回调中拿到准备好的SurfaceTexture设置给Camera即可 camera.setPreviewTexture

    4K20发布于 2020-07-14
  • 来自专栏Flutter

    原生长列表内嵌 Flutter 卡片性能调研

    作为输出的 Surface,当 FlutterView 被 RecyclerView 回收时,TextureView 会触发 Surface Destroy,当 FlutterView 被 RecyclerView 重用并重新参与绘制时,TextureView 会触发 Surface Available(Create); 性能表现分析 测试手机使用了 Google Pixel,在现在来说算是性能比较差了,可以更好地反映实际的状况 卡片空白帧数 在 Demo 的场景中,RecyclerView 在惯性滚动时,将新的卡片从不可见区域移进可见区域,触发了 TextureView 的绘制,而 TextureView 的 Surface 如果当前帧是第 N 帧,在第 N 帧的 Draw 的过程中触发了 TextureView 的 Surface Available(Create),同时触发了 Flutter 的 ScheduleFrame 再对比多引擎同时运行多个 Flutter App 的情况: Native Heap 小幅增加,猜测主要是额外线程的堆栈; EGL mtrack 因为多引擎 Demo 使用的是 TextureViewTextureView

    1.9K20发布于 2021-04-02
  • 来自专栏海之滨云视频和流媒体技术

    Android流媒体开发之路一:Camera2采集摄像头原始数据并手动预览

    Android Camera2采集摄像头原始数据并手动预览 最近研究了一下android摄像头开发相关的技术,也看了Google提供的Camera2Basic调用示例,以及网上一部分代码,但都是在TextureView 和其他程序一样,通过ImageReader来获取到CameraCaptureSession传递出来的数据,与Google例子不同的是,我取消了把TextureView的传递,改为单独以ImageReader 调用libyuv做RGB之间的数据转换   获取到YUV数据之后,就可以在UI界面上进行绘制了,通过简单了解,可以通过OpenGLES来绘制,也可以转为Bitmap直接在TextureView上绘制。 然而后来发现,android.graphics.Bitmap并不支持直接将YUV数据存入,只能转为RGB数据格式,才能存入Bitmap,进而在TextureView上绘制。 与上面代码中类似,通过TextureView.lockCanvas(),获取到Canvas,调用drawBitmap()将图像写入,即可完成绘制。 运行截图 开启预览时的4:3画面和16:9画面 ?

    3.6K50发布于 2018-05-11
  • 来自专栏RTMP推送

    Android平台如何采集摄像头数据并实现低延迟RTMP推送

    = Build.VERSION_CODES.LOLLIPOP)public class Camera2Activity extends AppCompatActivity { private TextureView textureView; private CameraDevice cameraDevice; private CameraCaptureSession cameraCaptureSession = findViewById(R.id.texture_view); textureView.setSurfaceTextureListener(surfaceTextureListener ); } private final TextureView.SurfaceTextureListener surfaceTextureListener = new TextureView.SurfaceTextureListener textureView; private ListenableFuture<ProcessCameraProvider> cameraProviderFuture; @Override

    1.3K10编辑于 2024-11-20
领券