皮皮网

【app源码宝塔搭建】【修改linux源码】【php蜘蛛源码】libyuv源码

2024-11-23 08:56:14 来源:搜索聚合源码

1.UVC Camera使用简单记录
2.ijkplayer编译流程详解

libyuv源码

UVC Camera使用简单记录

       ç¨‹åºæ˜¯æ ¹æ® UVCCamera 去修改的。

        使用过程中遇到的几点关键问题:

        1.YUV 格式:NV等格式。

        2.YUV转RGB效率问题。

        3.Bitmap内存泄漏问题。

        4.Handler内存泄漏的问题

        首先onFrame(这是camera取图的callBack函数,byte[] data就是camera的数据)中不能做耗时操作(例如将data转bitmap等操作),不然会阻塞(之前把这个操作放到这里然后直接将bitmap传出)导致卡顿。

        在传输byte[]数据之后,需要将byte[]转bitmap。

        在byte[] 转bitmap的过程中,由于创建了过多的Bitmap,会导致内存泄漏,程序崩溃。

        因此1.将Bitmap设置为静态变量,避免重复创建的问题。2.修改byte[] 转bitmap的函数,原来函数是返回Bitmap,现在是将Bitmap作为参数传入函数中,直接将Bitmap数据传递出去。减少了一个返回的步骤。

        之前是这样的:

        现在是这样的:

        后面就是通过handleImage将Bitmap显示在ImageView上。

        NV转bitmap的问题。

        我的程序基本是根据 UVCCamera 去修改的,UVCCamera中没有取每一帧,但是留有接口,我这里设定每一帧的数据为NV格式。

        并且在onFrame中取出的data格式是NV(NV是YUV中的一个,YUV有很多格式),因此在转成bitmap的时候,需要根据公式去转化。用系统自带的RenderScript去转换,发现图片虽然清晰但是颜色不对。

        查找yuv转bitmap函数,找到的是这个。依旧是转出来的图片,非常明显,成像很清晰,但是就是颜色不对。

        因此对函数进行了修改。修改后如下所示。

        由于对YUV与RGB这个概念模糊不清,而搜索得到的YUV转bitmap函数是虽然的确是NV转bitmap,但转换后有色差。后修改rgba[]的赋值顺序后,颜色才正常。其实就是在由YUV编码转RGB编码的过程中,数据传递出现问题才导致色彩异常,这种情况就需要一步步分析YUV到RGB的数据转换中哪里出现了问题。之前是存储为ABGR,后面才是存储为ARGB。

        具体分析可以看这篇:

        RGB和YUV简单学习记录

        但是上面这种方式实际使用中发现效率过低。因此需要使用so的方式去转换。

        具体参考链接:

        libyuv—libyuv测试使用ARGBToI和ConvertToARGB接口

       _example_libyuv_Test_convertToArgb函数中的FOURCC_IYUV改为FOURCC_NV。

        Handle内存泄漏的问题。

        之前因为想偷懒所以没有处理Android studio关于Handle内存泄漏的提示。然后让程序跑了一天果然崩了。

        之前是如下所示,这种写法Android Studio会提示你这是有风险的。

        现在改成如下所示

        其实还可通过在activity的destroy中调用 handler.removeCallbacksAndMessages(null) ,来达到避免内存泄漏的目的,源码android 系统源码中也基本是使用这个方法。

        后记:这篇文章始于年,当时是用于双目USB摄像头上,最近在整理东西所以完善了一下。

        参考链接:

        Android yuv转换成bitmap

        图文详解YUV数据格式

        Android中的YUV格式解析

        Nv转Bitmap(高效率转化)

        Android 之 Bitmap

        Android解惑之Handler为什么需要是static的

ijkplayer编译流程详解

       ijkplayer是一款基于FFmpeg的播放器SDK开源架构,由哔哩哔哩公司开发,源码适合音视频开发人员深入研究与使用。源码本文将详细介绍ijkplayer的源码app源码宝塔搭建编译流程。

       本文主要关注于在安卓平台上的源码编译,以ijkplayer-android为例,源码环境设定在Ubuntu系统上。源码

       一、源码编译环境与依赖

系统:Ubuntu ..6

jdk:Java Development Kit (JDK) 1.8.0_

ndk:Android NDK re(Linux x_版)

sdk:Android SDK r.4.1(Linux版)

       二、源码编译环境搭建

软件安装:确保Ubuntu系统已安装必要的源码开发工具。

openjdk安装:下载并安装JDK,源码修改linux源码以支持Java环境。源码

下载安装NDK和SDK:访问Android NDK与SDK官网,源码下载Linux版本,源码解压至指定目录。源码

初始化SDK:运行Android SDK Manager,php蜘蛛源码选择下载Android SDK Tools、Platform-tools、Build-tools以及最新版的Platform。

配置环境变量:在/etc/profile中添加相关环境变量。

       三、黄金网站源码ijkplayer源码下载

       访问ijkplayer的GitHub仓库,下载ijkplayer-android源代码。

       四、编译ijkplayer

初始化:运行初始化脚本,提取ffmpeg库、悟空遥控 源码libyuv、soundtouch等相关组件。

编译openssl:执行编译脚本,选择全平台编译或指定CPU平台。

编译ffmpeg:在配置文件中保持默认设置,执行编译脚本。

编译ijkplayer:执行最后的编译脚本,生成android工程与平台相关库。

       五、编译完成与导入AS工程

       使用Android Studio打开生成的android工程。

       运行工程至手机上,检查播放功能,确保编译无误。

       至此,ijkplayer的编译流程已完成。开发者可以在此基础上进行二次开发,深入探索ijkplayer的特性和应用。