Android RTSP/RTMP多路播放时动态切换输出View类型(SurfaceView和TextureView 动态切换)

news2024/11/26 18:42:11

  SurfaceView和TextureView的区别和优缺点等, 相关的资料很多. 从Android低延时播放器实现角度来看, 总结了下主要区别有:

  1. MediaCodec输出到SurfaceView延时一般比到TextureView更低.

  2. MediaCodec用SurfaceView比TextureView占用的资源一般更少些(CPU和内存都小一些, 不过还是有Android设备SurfaceView表现更差些).

  3. MediaCodec输出到TextureView上的画面做缩放、旋转等变换时很方便,如果调用TextureView.getBitmap()成功的话,也可以将视频画面保存为jpeg图片(抓图方便).

  4. SurfaceView和TextureView 清屏方式不一样.

  5. SufraceView从自绘切到MediaCodec输出的处理方式和TextureView不一样(直接切换MediaCodec会报错)。

  另外不使用MediaCodec直接输出到Surface上, 或用其他decoder,就需要yuv转rgb后再输出到SurfaceView或TextureView上.

 播放器的实现,上面列出来的这些需要注意,具体代码实现过程中,细节问题也不少,遇到再处理.

  监控场景下, 9宫格16宫格或者更多路同时播放,点击一路画面全屏或者放大观看,小宫格可以用SurfaceView输出(占用资源少), 点击小宫格画面放大看时可以动态切到TextureView上显示,这样实现局部画面缩放,抓图都方便。

  为方便集成调用,我的播放器对外提供一个设置和切换Surface的接口: 

/*
* Copyright (C) 1130758427@qq.com. All rights reserved. 
* 问题沟通微信:ldxevt
*/

public class SmartPlayerJniV2 {

  // .......其他接口

  // 设置或者播放时动态切换Surface接口
  public native int SetSurface(long handle, android.view.Surface surface,
							   int surface_codec_media_color_format,
                               int disable_codec_render_surface,
                               int disable_sdk_render_surface);

  // ........其他接口

}

    测试时先创建了一个TextureView, 然后在TextureView上有叠了一个小的SurfaceView, 播放时点击按钮来回切换View。

    MediaCodec+TextureView:

  点击:"切换到SURFACEVIEW"按钮,切到MediaCodec+SurfaceView:

  软解也可以动态切View,上面展示的是单路播放切换View的例子, 多路播放或其他问题请联系qq: 1130758427, 微信:ldxevt 。
   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1816622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32】输入捕获应用-测量脉宽或者频率(方法1)

图1 脉宽/频率测量示意图 1 测量频率 当捕获通道TIx 上出现上升沿时,发生第一次捕获,计数器CNT 的值会被锁存到捕获寄存器CCR中,而且还会进入捕获中断,在中断服务程序中记录一次捕获(可以用一个标志变量来记录&#…

Spring Cloud Netflix 之 Ribbon

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言前言1、负载均衡1.1、服务端负载均衡1.2、客户端负载均衡 2、Ribbon实现服务…

uni-im:云端一体、全平台、免费开源的即时通讯系统解析

一、引言 随着移动互联网的迅猛发展,即时通讯(IM)系统已成为人们日常沟通不可或缺的一部分。然而,开发一个稳定、高效、跨平台的IM系统并非易事。为了降低开发成本、提高开发效率,越来越多的开发者开始寻找成熟的开源…

LIN 入门(1)

1、概述 LIN 是什么 LIN 是 Local Interconnect Network 的缩写,是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter / Serial Communication Interface,通用异步收发器/串行通信接口)的低成本串行通信协议。可用于汽车、家电、办 公设备等…

图解Mamba——从流体力学的角度理解Mamba

1.Transformer的问题 上面是Transformer的网络结构。对于一句话的每个单词,都需要跟所有单词算注意力机制。因此注意力机制的计算复杂度为 O ( n 2 ) O(n^2) O(n2),其中 n n n为句子的长度,即单词(符号)的个数。如下图所示。 所以这也是现在…

C++中的结构体——结构体中const的使用场景

作用:用const来防止误操作 示例 运行结果

进阶篇02——索引

概述 结构 B树索引 在这里推荐一个可以将个各种数据结构可视化的网站:数据结构可视化 哈希索引 相关的一个面试题 分类 聚集索引和二级索引(非聚集索引) 思考题:索引思考题 创建索引语法 如果一个索引关联多个字段&#xff…

Android native层的线程分析(C++),以及堆栈打印调试

文章目录 Android native层的线程分析(C),多线程实现1.native线程的创建第一部分:android_thread模块第二部分:linux_thread模块 2.测试linux_thread模块3.Android native的Thread类3.1源码分析 4.native层堆栈调试方法 Android native层的线…

[13] CUDA_Opencv联合编译过程

CUDA_Opencv联合编译过程 详细编译过程可见我之前的文章&#xff1a;Win10下OpencvCUDA联合编译详细教程&#xff08;版本455、460、470,亲测可用&#xff01;&#xff01;&#xff01;&#xff09;本文给出Windows\linux下的opencvcuda的编译总结&#xff0c;摘自 <基于GP…

【SSM】医疗健康平台-项目开发准备

知识目标 了解架构&#xff0c;能够说出常用的架构及其优缺点 熟悉项目的技术栈&#xff0c;能够说出每个技术栈的用途 了解项目的功能结构&#xff0c;能够说出医疗健康项目的功能组成 掌握医疗健康项目的环境搭建&#xff0c;能够根据系统模块的划分搭建医疗健康项目中的父…

Java基础面试重点-2

21. JVM是如何处理异常&#xff08;大概流程&#xff09;&#xff1f; 如果发生异常&#xff0c;方法会创建一个异常对象&#xff08;包括&#xff1a;异常名称、异常描述以及异常发生时应用程序的状态&#xff09;&#xff0c;并转交给JVM。创建异常对象&#xff0c;并转交给…

推荐系统三十六式学习笔记:原理篇.近邻推荐09|协同过滤中的相似度计算方法有哪些?

目录 相似度的本质相似度的计算方法&#xff1a;1、欧式距离2、余弦相似度3、皮尔逊相关度4 、杰卡德&#xff08;Jaccard&#xff09;相似度 总结 相似度的本质 推荐系统中&#xff0c;推荐算法分为两个门派&#xff0c;一个是机器学习派&#xff0c;一个是相似度门派。机器学…

pytorch版本与torchvision版本不匹配问题处理

pytorch版本与torchvision版本不匹配问题处理 问题问题复现解决方法两点注意内容其一&#xff1a;pytorch版本与torchvision版本对应关系其二&#xff1a;CPU版本或GPU版本问题 问题 在新环境中&#xff0c;利用yolov8训练模型的时候报错&#xff0c;错误内容如下&#xff1a;…

探囊取物之渐变背景登录页面(基于ElementUI)

低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/preview/lxbupnc9dg5q 演练页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/practice/lxbupnc9dg5q

ansible-Role角色批量按照node_export节点,并追加信息到Prometheus文件中

文章目录 剧本功能 inventory.yaml文件定义deploy.yaml角色定义node_exporter_lock角色定义任务角色main.yamlnode_exporter_tasks.yml角色触发任务notifyextra_tasks.yml角色prometheus_node_config.j2模板文件 执行命令查看变量 剧本功能 功能1&#xff1a; 批量执行node_ex…

【电子通识】焊接常见的不良有哪些?

在焊接完成后的调试阶段&#xff0c;有时总会发生一些奇怪的异常。也许是因为在焊接过程中出现了一些莫名其妙的焊接缺陷&#xff0c; 这些焊接缺陷产生的原因各不相同。 在实际的SMT贴片加工或插件焊接中&#xff0c;我们一般会采取一些方法来避免这些焊接不良的现象。那么常见…

PyCharm2018图文安装教程、附录软件下载

软件简介 PyCharm 2018是一款IDE集成开发环境&#xff0c;主要功能包括代码调试、语法高亮、智能提示、单元测试、版本控制等&#xff0c;支持Python 3.7&#xff0c;改进search everywhere功能等&#xff0c;可以让用户快速的开发程序。 软件下载 复制链接浏览器打开 https…

HTML静态网页成品作业(HTML+CSS)—— 电影泰坦尼克号介绍网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

译译交友项目介绍

一、 项目背景 随着社会的进步&#xff0c;英语作为一种国际语言&#xff0c;很多人都在学习英语&#xff0c;然而现在很多人都会因为学习英语而烦恼&#xff0c;有时还会因为是一个人学习而感到枯燥。面对情绪的低落&#xff0c;往往会使学习更困难。因此&#xff0c;我打造了…

Protected and unprotected Meilisearch projects(/health)

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…