热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android设备中几种YUV420p转rgb视频帧方法效率比较

Android设备中几种YUV420p转rgb视频帧方法效率比较编者:李国帅qq:9611153微信lgs9611153时间:202

Android设备中几种YUV420p转rgb视频帧方法效率比较

编者:李国帅

qq:9611153 微信lgs9611153

时间:2020-03-30

背景原因:

从android的camera之中获取视频帧,或者从第三方ipc比如海康大华的sdk api获取的视频帧,往往都是yuv格式的,比如yv12,i420。

这些视频帧要想显示到android的view/surface中,需要把yuv格式转换为rgb格式,通过view的canvas绘制到界面上。

正在上传…重新上传取消

中间碰到了这么个问题:因为java语言自身的效率问题,要处理高频率,大数据的数据转换往往效率很低。普通的操作很容易造成视频回显的阻塞,影响用户使用。

 

 

YUV420p转rgb通常有几个方法:

(华为平板2g内存下)

         1、常见的就是使用YuvImage间接实现,但是这种方案效率很低,通常一帧640*480的转换需要40~50毫秒。

         此方法仅可以转NV21和YUY2,还需要从先转换为NV21.

        

2、据说使用 renderscript.ScriptIntrinsicYuvToRGB效率很高,内部原理不明,实测大概20毫秒左右。不过问题是只能从nv12转rgb,要添加从yv12转nv12的操作。

        

3、yv12和rgb之间的鸿沟并不是很深,并且可以直接使用代码实现转换。如果使用java代码直接转换,大约也就40毫秒。

        

4、当然了,如果能使用jni方法嵌入程序的c语言转换函数,效率会有所提高。记得以前总结过一篇《使用ffmpeg中的转换库进行颜色转换》,应该速度比renderscript快。

 

使用代码进行测试:

写一个程序,使用纯java代码测试,创建随机图像,对几种方法进行对比。

正在上传…重新上传取消

测试结果:

正在上传…重新上传取消

03-30 11:44:20.421 32436-32436/? D/MainActivity: YuvImage处理1帧耗时=82

03-30 11:44:20.471 32436-32436/? D/MainActivity: 直接转换处理1帧耗时=49

03-30 11:44:20.491 32436-32436/? D/MainActivity: 使用renderscript.ScriptIntrinsicYuvToRGB处理1帧耗时=20

03-30 11:44:21.511 32436-32436/? D/MainActivity: YuvImage处理1帧耗时=85

03-30 11:44:21.561 32436-32436/? D/MainActivity: 直接转换处理1帧耗时=47

03-30 11:44:21.581 32436-32436/? D/MainActivity: 使用renderscript.ScriptIntrinsicYuvToRGB处理1帧耗时=23

 

正在上传…重新上传取消

 

总结:

方法没有好坏,使用在恰当的地方就是好方法。追求都是要付出成本的,就看值不值得了。

如果设定帧率在10以下,使用yuv转换也未尝不可。

 

 

 


推荐阅读
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
author-avatar
mobiledu2502861465
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有