首页
学习
活动
专区
工具
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.9K20

Android相机开发那些坑

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

29.6K50
  • 微信小游戏直播在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.4K21

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

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

    1.3K20

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

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

    2K20

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

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

    4.6K110

    【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.6K20

    Android多媒体之Camera2的相关操作

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

    2.9K50

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

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

    3.6K20

    Android 图形架构

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

    2.3K32

    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.3K30

    从0到1编写一个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.2K20

    【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 .

    87110

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

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

    2K30

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

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

    1.6K30

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

    因此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。

    11K180

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

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

    2.7K31

    轻松成为跨屏实力派,华为分布式技术Cast+ Kit接入必看!

    但后来我们发现,手机过大时会影响实际使用体验,因此6到7寸的屏幕几乎已经到达极限。可我们对大屏的需求是不变的,无论办公还是娱乐,大屏幕有其刚需性存在。...而且,经实际使用环境极米用户测试,在视频播放、游戏、办公等场景下,投屏的延迟均小于100ms。...简单叙述其大体可以分为六个流程,首先需要进行变量声明并获取PlayerClient实例;然后在应用启动时,获取PlayerClient实例,启动服务,注册监听;三要进行投屏业务相关内容设置,包括投屏属性设置...、鉴权模式信息设置和可被周边设备发现的相关设置;四则是设置投屏显示Surface,这里需要注意的是应用层面,要求保证投屏过程中不能录屏、截屏、录音,要求SurfaceView要设置FLAG_SECURE...极米投影仪与Cast+ Kit在投影领域已经占得先机,其他的小伙伴们还在犹豫吗?以分布式技术串联起来的全场景智慧生活,正在等你。 · END ·

    2.2K10

    Android平台下使用FFmpeg进行RTMP推流(摄像头推流)

    简介 前面讲到了在Android平台下使用FFmpeg进行RTMP推流(视频文件推流),里面主要是介绍如何解析视频文件并进行推流,今天要给大家介绍如何在Android平台下获取采集的图像,并进行编码推流...Android提供了SurfaceView和GLSurfaceView。这里为了方便大家上手,我们先选择使用SurfaceView稍微简单一点,对SurfaceView大家不熟的可以查找相关资料。...设置一个按钮,点击之后我们就调用这个方法进行预览 SurfaceView的创建回调方法中surfaceCreated中进行调用,因为图像要预览到SurfaceView中,所以必须得SurfaceView...这里我们使用H264进行视频编码。...到这里只是完成的编码工作,接下来还有一些参数需要设置 PTS、DTS、duration PTS是显示时间戳,DTS解码时间戳,duration是当当前帧和下一帧的时间间隔,。

    6.1K51
    领券