首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以在显示到屏幕后重新使用SurfaceView进行编码吗?

在Android开发中,SurfaceView是一个可以在屏幕上绘制图像的视图组件,通常用于实现视频播放、相机预览等需要高性能图像渲染的场景。它可以通过底层的双缓冲机制来提高绘图效率。

关于在显示到屏幕后重新使用SurfaceView进行编码的问题,答案是不可以。SurfaceView是通过底层的Surface来渲染图像,一旦图像被显示在屏幕上,就无法直接获取到Surface上的图像数据进行编码处理。如果需要对SurfaceView上的图像进行编码,可以考虑通过其他方式获取图像数据,例如使用Camera API获取相机预览数据,或者使用MediaProjection API获取屏幕截图数据。

总结起来,SurfaceView适用于实时的图像渲染和交互,但不适合直接进行图像编码处理。如果需要在显示到屏幕后对图像进行编码,建议使用其他方式获取图像数据进行处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

图片的实时渲染和离渲染

视频的渲染一般都是实时渲染,使用SurfaceView或者TextureView,图片的渲染一般都会采用ImageView,可以设置路径,也可以设置Bitmap,再加上Canvas和Paint,无敌了...问:想在一张图片上加上贴纸 答:简单,使用Cavas,将贴纸放在特定的位置,然后生成一张新的Bitmap放入ImageView上。...问:要添加多张贴纸不同的位置上 答:简单,一样的道理啊,可以举一反三,Cavas解决一切啊。每添加一张贴纸就重新生成一张Bitmap放入ImageView上。...问:可以实时移动贴纸不同的位置? 答:当然可以啊,Canvas可以支持设置位置啊。 问:每改变一次位置,就要生成新的Bitmap,这样不断生成回收,是不是过分频繁了?...需要创建新的缓存区 离渲染的整个过程,需要多次切换上下文环境,当前屏幕—>离,渲染结束后将离缓冲区内容显示当前屏幕,上下文切换回当前环境。

1.8K20

微信小游戏直播Android端的跨进程渲染推流实践

,将画面渲染SurfaceView提供的Surface上。...录启用时小游戏会切换到如下的模式进行渲染: 可以看到,MagicBrush的输出目标不再是SurfaceView,而是Renderer产生的一个SurfaceTexture。...可以看到,录方案中通过一个Renderer负责将游戏内容上屏,另一个Renderer将同样的纹理渲染编码器上的方式实现了录制游戏内容,直播其实类似,是不是只要将编码器替换为直播的推流模块就可以了呢?...,那我们干脆把小游戏进程的Surface传递主进程进行渲染上屏吧!...这个过程也让深刻体会到了glFinish使得双缓冲机制失效所带来的性能影响是巨大的,使用OpenGL进行渲染绘制时对于glFinish的使用应当非常谨慎。

1.1K10
  • 微信小游戏直播 — Android跨进程渲染推流实践

    可以看到图中左半边表示在前台的小游戏进程,其中MagicBrush为小游戏渲染引擎,它接收来自于小游戏代码的渲染指令调用,将画面渲染SurfaceView提供的Surface上。...将第一个Renderer提供的纹理渲染mp4编码器提供的输入SurfaceTexture上,最终编码编码产生mp4录文件 改造录方案?...可以看到,录方案中通过一个Renderer负责将游戏内容上屏,另一个Renderer将同样的纹理渲染编码器上的方式实现了录制游戏内容,直播其实类似,是不是只要将编码器替换为直播的推流模块就可以了呢?...树来参与绘制,而是直接经由系统的SurfaceFlinger来合成屏幕上,而SurfaceFlinger运行在系统进程上,我们绘制SurfaceView所提供的Surface上的内容必然是可以跨进程进行传输的...这个过程也让深刻体会到了glFinish使得双缓冲机制失效所带来的性能影响是巨大的,使用OpenGL进行渲染绘制时对于glFinish的使用应当非常谨慎。

    2.3K21

    Android相机开发那些坑

    最近负责开发了一个跟Android相机有关的需求,新功能允许用户使用手机摄像头,快速拍摄特定尺寸(1:1或3:4)的照片,并支持拍摄出的照片上做贴纸相关的操作。...开发过程遇到的一些坑 下面再讲讲开发自定义相机时踩过的一些坑: 1. Activity设为竖时,SurfaceView预览图像颠倒90度。...),Android系统底层根据当前手机屏幕的方向对图像传感器采集的数据进行了旋转处理,然后才送给显示系统,因此可以保证预览画面始终“正确”。...[image.jpg] 但是开发过程中发现,对于按HOME键切后台场景,程序可以正常运行。对于锁场景,则在重新申请相机资源时会发生crash,说相机资源访问失败。那么原因是什么呢?...根据上面的文档,推测是锁下系统并没有改变surfaceview的可见性,于是尝试onPause和onResume时通过手动设置surfaceview的visibile属性,结果发现可以正常触发回调函数了

    29.4K50

    实习杂记(28):SurfaceView+ListView+MediaPlayer滑动时候灰色覆盖等问题

    滑动的时候,但是视频又在播放,而且如果你有切换横竖的话,这个问题将变得尤为严重, 具体的原因应该是这样的:本来surfaceViewitem上的,item是一个view,这个播放视频的时候,是由...MediaPlayer去把视频的画面setDisplaysurfaceHolder上的, 如果播放视频的是你发生了横竖切换,导致surfaceView的大小发生了变化,MediaPlayer重新去渲染视频图片...,再回来,可能就会留有残影, 然后是如果不发生横竖切换,也会有残影留下来,是为什么,想了下原因: 是因为surfaceView他有个特点,当你从window上拿到一个区域的时候,这个区域有些限制,...等形式在当前的activity上显示出来的,没有重新重建activity的话, 你的surfaceView后面会有很多东西,这是第一个,所以建议使用surfaceView的时候最好是新的activity...里面使用 这个透明问题,设置stlye是可以解决的,

    1.2K20

    深入浅出,Andorid 端屏幕采集技术实践

    屏幕数据源(生产者)缓冲区产生数据,屏幕数据消费者从缓冲区提取数据使用。不同的消费者可以实现不同的功能,比如录屏保存和录直播(屏幕共享)。这些关键的角色Android 端又是由谁来扮演呢?...(); 3.如果需要将屏幕采集数据显示UI界面 SurfaceView 上的话,Surface可以通过以下方式生成: SurfaceView surfaceView = (SurfaceView) findViewById...当 SurfaceTexture 中有数据更新时,会触发 onFrameAvailable 回调,我们可以该回调里对数据进行特定的处理。...六、横竖切换 横竖切换的场景游戏直播中屡见不鲜。比如王者荣耀的主播切换账号时,需要先kill掉王者荣耀 APP 退到手机主界面,然后再打开王者荣耀重新登录,经历了从横再回到横的切换。...屏幕采集当然也需要根据不同的横竖模式来做动态调整。调整的前提是如何感知横竖模式的变化。 如果是监听手机物理方向上的翻转,使用 OrientationEventListener 即可。

    1.9K20

    【Android 音视频开发打怪升级:OpenGL渲染视频画面篇】四、深入了解OpenGL之EGL

    创建EGLSurface,分为两种模式: 可显示窗口,使用eglCreateWindowSurface创建。 离(不可见)窗口,使用eglCreatePbufferSurface创建。...第一种是最常用的,通常将页面上的SurfaceView持有的Surface,或SurfaceTexture传递进去进行绑定。这样OpenGL处理的图像数据就可以显示屏幕上。...第二种用于离渲染,也就是将OpenGL处理的图像数据保存在缓存中,不会显示屏幕上,但是整个渲染流程和普通模式一样,这样可以很好的处理一些用户不需要看见的图像数据。...绑定OpenGL渲染线程与绘制上下文:makeCurrent 使用eglMakeCurrent来实现绑定。 这里,使用EGLCore中封装的方法就可以初始化EGL了。...2,Android视频硬编码必须要使用EGL 如果你需要使用到Android Mediacodec的编码能力,那么EGL就是必不可少的东西,在后续的关于视频编码的文章中,你将会看到如何使用EGL来实现编码

    2.4K20

    Android自定义相机Camera实现手动对焦的方法示例

    前言 采用的是Camera来实现自定义相机的,如果你使用的是Camera2,那本文将不适用你。为了减少篇幅,本文主要讲解手动对焦的实现方式,前提是你已经能实现自定义相机的预览等基础功能。...目录 手动对焦的方法解析 实现用户点击屏幕后,设置对焦区域和测光区域 一、手动对焦的方法 手动对焦的实现主要通过两个Camera方法来进行配置: setFocusAreas 设置对焦的区域 setMeteringAreas...我们可以看到,和手机屏幕的分辨率不同,Area屏幕的映射区域是从左上角的-1000,-1000右下角的1000,1000,中心点是0,0,我们点击屏幕后获取到的坐标,最终就需要转化为映射区域的坐标,...方法对View进行监听即可 surfaceView.setOnTouchListener(new View.OnTouchListener() { @Override public...,相对于View的坐标值了 将View坐标值转化为Area映射区域的坐标值 之前说过,Area映射区域是[-1000,-1000][1000,1000],那么通过下面的坐标换算公式,我们就可以得到点击预览画面时

    1.9K10

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

    这使得SurfaceView的绘制可以单独的线程中进行,从而可以绘制复杂的内容。由于SurfaceView的内容没有显示宿主窗口中, 这样它的显示需要同步宿主窗口的变化。...二、交互时无缝播放视频 和小窗之间切换时,因为重新创建了播放器,导致需要重新加载视频,不能平滑的过渡。...所以使用这种方案的优点是可以应用内外播放视频;缺点是需要权限,交互差。 3、Android8.0 的画中画 Android8.0 的画中画功能允许用户将播放视频缩小并显示其他窗口上方。...四、结论 通过实例演示了解SurfaceView执行移动和缩放时,会有黑边;执行旋转时,画面不会跟随旋转;执行透明值动画时,显示有问题。...和小窗之间切换时,使用单例播放器实现无缝播放视频,平滑加载视频,给用户平滑的过渡体验。 以上四种方案都可以实现小窗播放视频功能,各方案或多或少都有缺点。

    4.5K110

    二维码扫描开源库ZXing定制化

    两层文件夹去掉,不然Eclipse中无法识别包路径) 4、把core目录下的所有Java文件拷入src目录下(注意!...但你可能不满足于这个界面,扫描框太大了,而且是横全屏的,还要求API 15(Android 4.0.3)。下面我们会对这些需求进行修改。...修改ZXing的竖的时候,按照的是一般APP的竖设置方法,结果发现没有源码的效果好,需要把码放到很小才能完成。...(图片源自网络) 把二维码当作图中的那朵花,自动对焦则容易使摄像头对焦背景(图中女性)中去。测试中使用三星S4的自动对焦经常对不了二维码。...这里改成了120×120,实际屏幕分辨率为320×240的设备上也可以扫到二维码。 7、自定义界面 界面写在ViewFinderView.java中。扫描框大小由CameraManager决定。

    3.5K20

    Android多媒体之Camera2的相关操作

    ,结果如下...头像都变形了,这怎么能忍 百度了一会,并没有找到好的解决方法,然后发挥自己的聪明才智 把SurfaceView宽高比缩放成3:4,并对横竖分别适配,完美解决 竖...代码实现起来也非常简单,根据长宽的大小,setScale,保证比例就行了 注意:SurfaceViewsurfaceCreated回调时才有尺寸,onCreate时宽高为0 /** * 适应屏幕...横 Ok,总算完美显示出来了,良好的开端是成功的一半,继续 二、拍张照 想拍张照也不简单啊......一旦用户获得了maxImages图像,可以通过新图像进行访问之前,必须先释放其中一个图像 所以拍完照后释放一下还有重新startPreview()一下,不然就不动了 image.close()...* 1925结果拍的两张尺寸一样 说明传参只是参考值,内部会自己进行调整,设成1*1,结果尺寸144*176 这时应该会想到上一篇中打印的的图片种类支持情况,这篇看一下camera2里怎么获取

    2.9K50

    2020年Android初级面试题一年汇总出炉,吃透它!

    xml文件中直接写入,也可以Activity中动态添加; Fragment可以使用show()/hide()或者replace()对Fragment进行切换,切换的时候不会出现明显的效果,Activity...Android5.1 即 即 API 3 23 级别下,切还是会重新调用各个生命周期,切横、竖时只会执行一次 Android9 即 即 API 8 28 级别下,切不会重新调用各个生命周期,只会执行...这里给大家分享一下的面试复习路线,有需要的朋友可以参考一下: 1、看视频进行系统学习 前几年的Crud经历,让明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统...,所以重新进行学习是很有必要的。...差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

    1.2K30

    Android 图形架构

    因此,Android图形架构的就是把各个应用创建的一个个window组合显示显示上的架构。 首先我们要理解Android系统中以下概念: Window:代表显示器上一个单独的视图区域的对象。...,SurfaceFlinger组合之后确定了显示上哪个Window需要显示显示多少、显示上哪个位置等,然后再把组合后的数据传给图形硬件抽象层(HAL)。...进行渲染时,需要复制buffer source中的buffers,并把它们合成window对应surface中,才能让它们显示屏幕上。...而使用SurfaceView的话,SurfaceFlinger直接把source buffers合成屏幕上。...你可以一个并不由Surface支持的EGLSurface上绘图,你也可以没有EGL的情况下使用Surface。EGLSurface仅仅为GLES提供一个绘图的地方。

    2K21

    【Android FFMPEG 开发】FFMPEG ANativeWindow 原生绘制 ( Java 层获取 Surface | 传递画布本地 | 创建 ANativeWindow )

    AVCodec 编解码器 , 读取音视频流中的数据 AVPacket , 解码 AVPacket 数据 AVFrame , AVFrame 图像格式转换 YUV -> RGBA , 然后才能进行下面的操作...; ① Java 层获取 Surface 对象 : Surface 画布可以 SurfaceView 的 SurfaceHolder 中获取 //绘制图像的 SurfaceView SurfaceView...: Native 层的 C++ 代码中 , 接收 Surface 画布 , 并创建 ANativeWindow 本地绘制窗口 , 原生绘制主要在 ANativeWindow 中进行 ; //CPP...获取 Surface 画布 : surfaceChanged 回调方法中 , 获取 Surface 画布 , 这样可以保证横竖切换时可以实时获取到最新画布 ; @Override...原生绘制需求 : Native 层使用 C/C++ 进行原生绘制需要将 Surface 画布传递 Native 层进行绘制 ; 2 .

    81610

    从01编写一个Xposed Module :Anti Screenshot

    说明: 如果选择No Activity 的话,studio里边没办法直接安装到测试机上进行测试,因为没有actvity。...2.编写xposed module 基本信息 src/main/res/values/strings.xml中添加如下: 强制截...这儿,一个xposed module的雏形就差不多完成了,接下来我们需要完善相关的Hook逻辑,不过我们现在可以执行一下,看一下啥效果 ?...三、分析Android禁止截相关函数 总的来说,经过的细致观察,Android提供的禁止截的方法,最终都是给“Display“这个类,增加“FLAG_SECURE”属性 下边是官方文档关于如何设定...此时,Xposed的 log 界面我们可以看到: ? Yes!本文结束,模块相关问题请提issus,告辞 ?

    1.1K20

    音视频全链路技能分析之音视频消费侧技能树

    有人会说,解析这些封装格式是播放器做的工作,一定要了解?...一个视频中连续出现的图片也不是突变的,可以根据已有的图片进行预测和推断。 (3)视觉冗余:人的视觉系统对某些细节不敏感,因此不会每一个细节都注意可以允许丢失一些数据。...这儿只是给出一个帧序列的例子,帧序列可以有很多种排列的。 ? 一帧中,分成多个片,每个片中分成多个宏块,每个宏块分成多个子块,这样将一张大的图分解成一个个小块,可以方便进行空间上的编码。...SurfaceViewSurfaceView可以一个独立的线程中进行绘制,不会影响主线程,使用双缓冲机制,播放视频时画面更流畅。...android 7.0以下系统如果使用场景有动画效果,可以选择性使用TextureView。

    1.5K30

    Android 拍摄(横竖)视频的懒人之路

    hello,大家吼,是那个爱猫的老司机,爱好是掀桌子的话唠程序猿。回想起刚开始码文章的时候,没想到内向的自己也可以撸出那么多文字,真是挖坑不止,且行且珍惜啊。有猜到今天聊的主角是谁?...1、SurfaceView显示画面 旧项目用的都是SurfaceView,这次就就它吧。...配置相机参数:预览大小,对焦,闪光灯,竖显示。 设置显示画面的surface 开始绘制 if (camera !...首先说Camera,如果测试说你的前置Camera某些手机上画面角度不对,这时候你可以偷偷把手机砸了,因为这是兼容问题。如果你没有勇气砸手机,看下面。...此处还需要注意,如果应用没有获取到录音权限,录制的时候是会走catch里面的。 停止录制相对就简单了,只要顺序正常即可,之后就可以把视频传到VideoView快速实现预览啦。

    2K30

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

    因此SurfaceView的UI可以一个独立的线程中进行绘制。由于不会占用主线程资源,因此SurfaceView可以实现复杂而高效的UI。...SurfaceView还有另外一个类型TYPE_APPLICATION_MEDIA_OVERLAY,它是视频上面显示Overlay的,它可以显示视字幕等信息。...2.5、小结SurfaceView的分析 通过了解SurfaceView的创建过程、“挖洞”原理和绘制过程,可以了解Surface对小窗播放视频的影响如下: 1)SurfaceView宿主窗口下面,...4)SurfaceView具有独立的Surface,它的UI绘制可以独立的线程中进行可以进行复杂的UI绘制。...Android N以上的SurfaceView视频进行缩放旋转时会同步变化,不会看到黑色边,官方推荐使用SurfaceView

    10.8K180

    Android面试常问基础知识点(附详细解答)

    SDK的文档 说到:SurfaceView就是在窗口上挖一个洞,它就是显示在这个洞里,其他的View是显示在窗口上,所以View可以显式 SurfaceView之上,你也可以添加一些层SurfaceView...SurfaceView它的绘制原理是绘制前先锁定画布(获取画布),然后等都绘制结束以后在对画布进行解锁 ,最后把画布内容显示屏幕上。...绘制的时候,surfaceCreated()方法中开启子线程进行绘制,而子线程使用一个while(mIsDrawing)的循环来不停的进行绘制,绘制的逻辑中通过lockCanvas()方法获取Canvas...(2)画图板 我们也可以通过使用SurfaceView来实现一个简单的绘图板,绘图的方法与View中进行绘图所使用的方法一样,也是通过Path对象记录手指滑动的路径来进行绘图。...SurfaceView绘图时使用l了双缓冲机制,而View没有。

    2.5K31

    走进SurfaceView

    新技能,可以嘚瑟几天了,直到前两天被人问到: 问“SurfaceView和Surface有什么区别啊?...它们是一个东西?”...根据Java方面的常规知识,我们知道通常画图是一个Canvas对象上面进行的,由此,可以推知一个Surface对象中应该包含有一个Canvas对象 02 — SurfaceView是什么 SurfaceView...但它也有缺点,因为这个Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行平移,缩放等变换,也不能放在其它ViewGroup中,一些View中的特性也无法使用。...而SurfaceHolder.Callback是SurfaceHolder内部的静态子接口 06 — SurfaceView的优缺点 1、优点: 可以一个独立的线程中进行界面绘制,不会影响主线程,

    1.3K20
    领券