NDK
ndk开发
鱼包子Ray
万丈高楼平地起
展开
-
NDK52_OpenGL实现极快、极慢模式视频录制
MediaCodec MediaCodec是Android 4.1.2(API 16)提供的一套编解码API。它的使用非常简单,它存在一个输入缓冲区与一个输出缓冲区,在编码时我们将数据塞入输入缓冲区,然后从输出缓冲区取出编码完成后的数据就可以了。除了直接操作输入缓冲区之外,还有另一种方式来告知MediaCodec需要编码的数据,那就是:public native final Surface createInputSurface();使用此接口创建一个Surface,然后我们在这个Surface原创 2020-12-11 18:26:38 · 416 阅读 · 0 评论 -
NDK51_OpenGL:FBO
NDK开发汇总文章目录一 FBO二 FBO简单使用1 创建View和Renderer2 配置着色器基本绘制处理3 创建FilterAbstractFilterCameraFilterScreenFilter4 工具类三 Demo一 FBO 帧缓冲对象:FBO(Frame Buffer Object)。默认情况下,我们在GLSurfaceView中绘制的结果是显示到屏幕上,然而实际中有很多情况并不需要渲染到屏幕上,这个时候使用FBO就可以很方便的实现这类需求。FBO可以让我们的渲染不渲染到屏幕上,而是原创 2020-12-09 19:43:56 · 386 阅读 · 0 评论 -
NDK50_OpenGL
NDK开发汇总什么是OpenGL?Open Graphics Library图形领域的工业标准,是一套跨编程语言、跨平台的、专业的图形编程(软件)接口。它用于二维、三维图像,是一个功能强大,调用方便的底层图形库。与硬件无关。可以在不同的平台如Windows、Linux、Mac、Android、IOS之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。OpenGL ES 1.0 和 1.1 :Android 1.0和更高的版本支持这个API规范。OpenG原创 2020-12-07 17:14:52 · 293 阅读 · 0 评论 -
NDK49_OpenCV(三):车牌字符分割与ann分类识别
NDK开发汇总文章目录神经网络神经网络 1981 年的诺贝尔医学奖获得者: David Hubel(出生于加拿大的美国神经生物学家) 和Torsten Wiesel,以及 Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”:可视皮层是分级的。 1958 年,DavidHubel 和Torsten Wiesel 在美国约翰·霍普金斯大学,研究瞳孔区域与大脑皮层神经元的对应关系。他们在猫的后脑头骨上,开了一个3 毫米的小洞,向洞里插入电极,测量神经元的活跃程度。 然后,他原创 2020-12-03 15:36:52 · 299 阅读 · 0 评论 -
NDK48_OpenCV(二):车牌svm确定与hsv定位
NDK开发汇总文章目录HOG特征SVMHSV颜色模型色调H饱和度S明度VHOG特征局部归一化的梯度方向直方图,是一种对图像局部重叠区域的密集型描述符, 它通过计算局部区域的梯度方向直方图来构成特征。参数1(检测窗口)的宽- 参数2(块大小)的宽 结果与参数3(块滑动增量)的余数要为0 高也一样参数4是胞元大小,参数5是梯度方向HOGDescriptor hog(Size(128, 64), Size(16, 16), Size(8, 8), Size(8, 8), 3);检测窗口被分为原创 2020-12-03 15:35:40 · 393 阅读 · 0 评论 -
NDK47_OpenCV(一):车牌定位
NDK开发汇总参考开源工程链接https://www.cnblogs.com/subconscious/p/4022454.htmlhttps://github.com/liuruoze/EasyPR文章目录一 OpenCv识别车牌流程主要代码二 车牌svm确定与hsv定位HOG特征SVMHSV颜色模型色调H饱和度S明度V一 OpenCv识别车牌流程主要代码CarRecgnize#include "CarPlateRecgnize.h"int main(){ CarPlateR原创 2020-12-03 15:34:31 · 298 阅读 · 0 评论 -
NDK46_OpenCv训练正样本
NDK开发汇总原创 2020-11-17 19:08:12 · 384 阅读 · 0 评论 -
NDK45_Android集成OpenCv
NDK开发汇总文章目录一 AS集成OpenCv库二 java层获取摄像头数据三 OpenCv进行数据处理一 AS集成OpenCv库二 java层获取摄像头数据三 OpenCv进行数据处理处理、设置灰度、旋转、识别、画矩形、UI显示...原创 2020-11-16 21:58:39 · 252 阅读 · 0 评论 -
NDK44_Camke集成OpenCv
NDK开发汇总原创 2020-11-16 21:50:36 · 240 阅读 · 0 评论 -
NDK43_OpenCV
文章目录一 简介二 人脸定位三 LBP基本LBP圆形LBP旋转不变LBP等价LBP五 检测原理OpenCV下载地址一 简介 OpenCV是一个基于BSD许可开源发行的跨平台计算机视觉库。拥有C++,Python和Java接口,并且支持Windows, Linux, Mac OS, iOS 和 Android系统。实现了图像处理和计算机视觉方面的很多通用算法。模块功能Core核心基础模块,定义了被所有其他模块和基本数据结构(包括重要的多维数组Mat)使用的基本函数、底层数据结构原创 2020-11-10 19:48:11 · 225 阅读 · 0 评论 -
NDK42_No CMAKE_CXX_COMPILER could be found
VisualStudio 新建Cmake项目报错No CMAKE_CXX_COMPILER could be found严重性 代码 说明 项目 文件 行 禁止显示状态错误 CMake Error at c:\users\pf0zybaj\source\repos\CMakeProject1\CMakeLists.txt:7 (project):No CMAKE_CXX_COMPILER could be foundTell CMake where to find the compiler b原创 2020-11-10 19:22:37 · 416 阅读 · 0 评论 -
NDK41_NDK层实现gif图片播放
NDK开发汇总文章目录一 gif编码原理二 Android常见的gif播放方式三 利用系统源码实现gif播放1 实现步骤2 主要代码3 Demo一 gif编码原理gif编码原理图形控制扩展块(Graphic Control Extension)固定值:0xF9作用:用来跟踪下一帧的信息和渲染形式注释扩展块固定值0xFE作用 :可以用来记录图形、版权、描述等任何的非图形和控制的纯文本数据图形文本扩展块固定值0x01作用:控制绘制的参数,比如左边界偏移量应用程序扩展固定原创 2020-11-06 09:32:11 · 690 阅读 · 0 评论 -
性能优化30_CPU Profiler检查 CPU 活动
Android性能优化汇总文章目录一 CPU Profiler作用记录和显示的信息二 CPU Profiler 概览记录跟踪数据1 从 CPU Profiler 顶部的下拉菜单中选择记录配置,点击 Record2 与应用交互,完成时点击 Stop一 CPU Profiler作用优化应用的 CPU 使用率能带来诸多好处,如提供更快、更顺畅的用户体验,以及延长设备电池续航时间。记录和显示的信息系统跟踪数据方法和函数跟踪数据对于应用进程中的每个线程,您可以了解一段时间内执行了哪些方法 (Jav原创 2020-11-05 17:24:22 · 481 阅读 · 1 评论 -
NDK40_Tinker热修复
NDK开发汇总文章目录一 原理二 实现三 Demo一 原理二 实现三 Demo原创 2020-11-04 18:49:18 · 186 阅读 · 0 评论 -
NDK39_AndroidFix热修复
一 JAVA层逻辑ART(Android Runtime)是Android 4.4发布的,用来替换Dalvik虚拟,Android 4.4默认采用的还是DVM,系统会提供一个选项来开启ART。在Android 5.0时,默认采用ART,DVM从此退出历史舞台。public class DexManager { private Context context; private static final DexManager ourInstance = new DexManager(原创 2020-11-02 17:30:22 · 211 阅读 · 0 评论 -
NDK38_RTMP:音频编码与推流
NDK开发汇总文章目录一 集成faac1 下载编译faac生成静态库和.h头文件2 项目添加libfaac.a和.h头文件,CmakeList:二 获取音频AudioChannelLivePusher三 音频解码与推送native-libAudioChannel四 Demo一 集成faac1 下载编译faac生成静态库和.h头文件2 项目添加libfaac.a和.h头文件,CmakeList:cmake_minimum_required(VERSION 3.4.1)# 引入指定目录下的CMak原创 2020-10-21 12:58:56 · 253 阅读 · 0 评论 -
NDK36_RTMP:AAC
NDK开发汇总文章目录AACAAC的音频文件格式: ADIF & ADTSAAChttps://zh.wikipedia.org/wiki/%E9%80%B2%E9%9A%8E%E9%9F%B3%E8%A8%8A%E7%B7%A8%E7%A2%BC高级音频编码(Advanced Audio Coding),出现于1997年,基于MPEG-2的音频编码技术,目的是取代MP3格式。2000年,MPEG-4标准出现后,AAC重新集成了其特性,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC原创 2020-10-21 12:43:38 · 210 阅读 · 0 评论 -
NDK35_RTMP:NV21转换I420
NDK开发汇总 Android Camera对象通过setPreviewCallback 函数,在onPreviewFrame(byte[] data,Camera camera)中回调采集的数据就是NV21格式。而x264编码的输入数据却为I420格式。因此,当我们采集到摄像头数据之后需要将NV21转为I420。NV21和I420都是属于YUV420格式。而NV21是一种two-plane模式,即Y和UV分为两个Plane(平面),但是UV(CbCr)交错存储,2个平面,而不是分为三个。这种原创 2020-10-17 15:04:41 · 420 阅读 · 0 评论 -
NDK36_RTMP:视频编码器与推送视频数据
NDK开发汇总文章目录一 初始化二 设置数据三 推送视频数据四 Demo一 初始化native-libvoid releasePackets(RTMPPacket *&packet) { if (packet) { RTMPPacket_Free(packet); delete packet; packet = 0; }}void callback(RTMPPacket *packet) { if (packet)原创 2020-10-16 19:00:23 · 188 阅读 · 0 评论 -
NDK34_RTMP:摄像头调用预览
NDK开发汇总文章目录1 VideoChannel2 AudioChannel3 CameraHelper实现摄像头调用4 LivePusher 与C/C++交互5 Activity中使用6 Demo1 VideoChannelpublic class VideoChannel implements Camera.PreviewCallback, CameraHelper.OnChangedSizeListener { private LivePusher mLivePusher;原创 2020-10-16 18:49:34 · 261 阅读 · 0 评论 -
NDK31_Nginx流媒体服务器搭建
NDK开发汇总文章目录1. 下载nginx,并解压2. 下载rtmp并解压3. 进入nginx目录4. 执行:5. 在这个过程中可能因为环境不同而出现不同错误,比如缺少pcre、openssl等,这时候就需要安装这些库。6. 安装:7. 进入bin/conf 目录下(nginx-1.15.3/bin)8. vim nginx.conf 修改为:9. 端口占用检查: lsof -i:808010. 阿里云服务器配置安全策略,开放端口11. 配置完成后,就可以启动nginx了环境:Linux阿里云服务器原创 2020-10-15 18:12:45 · 198 阅读 · 0 评论 -
NDK33_最全排查UnsatisfiedLinkError: No implementation found
NDK开发汇总报错:No implementation found for java.lang.String问题排查build.gradle配置 abiFilters ‘armeabi-v7a’android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags ""原创 2020-10-12 09:07:13 · 259 阅读 · 1 评论 -
NDK32_RTMPDump与x264的交叉编译
NDK开发汇总文章目录RTMPDump交叉编译RTMP视频数据FLV tags 结构视频数据AVC 序列头其他x264交叉编译NALUIDRH.264数据文章目录RTMPDump交叉编译RTMP视频数据FLV tags 结构视频数据AVC 序列头其他x264交叉编译NALUIDRH.264数据 与HTTP(超文本传输协议)同样是一个基于TCP的Real Time Messaging Protocol(实时消息传输协议)。由Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传原创 2020-10-03 20:35:57 · 323 阅读 · 0 评论 -
NDK31_FFmpeg暂停、继续播放与停止
NDK开发汇总文章目录一 暂停1 原理2 代码实现二 继续播放1 原理2 代码实现三 停止1 手动停止2 自动停止三 防止重复启动一 暂停1 原理AudioChannel和VideoChannel解码时遇到暂停标记进行等待AudioChannel和VideoChannel存放packet的队列会被FFmpeg存满,FFmpeg就会一直等待存放frame的队列播放完了之后,就会一直在队列pop时等待流解析、音视频解码、音视频渲染就一直在等待,从而实现了暂停功能2 代码实现设置标记v原创 2020-10-02 13:22:56 · 1606 阅读 · 0 评论 -
NDK30_FFmpeg显示播放进度与快进
NDK开发汇总文章目录一 原理二 播放进度显示1 java层回调2 native层去回调java3 监听播放进度三 快进功能1 native-lib启动2 FFmpeg实现3 读取视频数据包时设置锁四 Demo直播没有进度显示和快进,只有确定长度的视频如本地文件可以有进度和快进功能上一篇文章介绍了内存释放:NDK29_FFmpeg内存释放本文接着之前的功能继续实现本地文件的播放进度显示与快进功能一 原理AVFormatContext->duration能够获取视频时长AVFram原创 2020-09-28 16:39:29 · 257 阅读 · 0 评论 -
NDK29_FFmpeg内存释放
NDK开发汇总一 释放1 native层内存泄漏在上一篇文章中,实现了音视频播放与同步NDK27_FFmpeg音视频同步当退出播放后,native的内存没有降低,内存产生了泄漏,C++中需要对内存进行主动回收2二 停止三 快进...原创 2020-09-21 20:29:57 · 734 阅读 · 0 评论 -
NDK27_FFmpeg音视频同步
NDK开发汇总文章目录一 音视频同步方式二 重点API三 代码AudioChannelVideoChannelSafeQueue(设置同步操作)前两章分别实现了视频和音频的解码与播放NDK25_FFmpeg视频解码与原生绘制NDK27_FFmpeg音频解码与OpenSL播放发现出现了不同步的请求,需要对音视频进行同步一 音视频同步方式将视频根据音频同步(以音频为主)以视频为主以一个外部事件进度为主本文以音频为主,因为其实现方式比较简单二 重点APIAudioChannel 的f原创 2020-09-19 20:02:03 · 183 阅读 · 0 评论 -
NDK27_FFmpeg音频解码与OpenSL播放
NDK开发汇总文章目录一 原理二 步骤三 代码实现1 引入OpenSLES库2 FFmpeg:Decode 与启动2 AudioChannel 开启线程循环解析与播放前两篇文章分别解码了直播文件,和对解析文件的视频进行解码与播放NDK24_FFmpeg集成及初始化NDK25_FFmpeg视频解码与原生绘制本片文章将继续对音频文件进行解码一 原理音频与视频的解编码方式一致音频的播放使用OpenSLNDK26_OpenSL二 步骤DNFFmpeg->_prepare方法设置音原创 2020-09-18 18:17:42 · 254 阅读 · 0 评论 -
NDK26_OpenSL
NDK开发汇总文章目录1 创建引擎与接口2 设置混音器3 创建播放器4 设置播放回调5 设置播放状态6 启动回调函数OpenSL ES是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速API。该库允许使用C或C++来实现高性能,低延迟的音频操作。Android的OpenSL ES库同样位于NDK的platforms文件夹内。关于OpenSL ES的使用可以进入bdk-sample查看native-audio工程:OpenSL ES的开发流程主要有如下7个步骤:创建接口对象设置混音器原创 2020-09-16 22:21:14 · 150 阅读 · 0 评论 -
NDK25_FFmpeg视频解码与原生绘制
NDK开发汇总文章目录一 视频相关基础ViewSurfaceViewTextureViewSurface与SurfaceTexture码率帧率ANativeWindow二 视频解码调用顺序1 设置Surface2 创建音视频基类BaseChannel3 VideoChannel 实现视频播放逻辑4 启动解码5 原生绘制定义绘制方法设置回调一 视频相关基础ViewSurfaceViewActivity的View hierachy的树形结构,最顶层的DecorView,也就是根结点视图,在Surfa原创 2020-09-14 09:02:03 · 417 阅读 · 0 评论 -
NDK22_音视频基础知识
1 Demo一个正常的自定义View:MyViewpublic class MyView extends View { public MyView(Context context) { super(context); init(); } public MyView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); ini原创 2020-09-10 13:46:44 · 261 阅读 · 0 评论 -
NDK24_FFmpeg集成及初始化
NDK开发汇总编译FFmpeg1 下载FFmpeg文件,并解压wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2tar -jxvf ffmpeg-snapshot.tar.bz22 编写编译脚本3 编译原创 2020-09-10 13:35:15 · 378 阅读 · 0 评论 -
NDK23_FFmpeg编译
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,需要编译出so库文件,拿到Android Q项目中使用一 环境准备Linux:ubuntu16.04.7NDK:android-ndk-r17cFFmpeg:ffmpeg-4.0.3.tar.bz2下载FFmpeg:wget http://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2解压tar -xvf ffmpeg-4.0.2.tar.bz2解压tar包失败.原创 2020-09-07 10:47:05 · 714 阅读 · 0 评论 -
NDK16_现有项目集成CMake
NDK开发汇总已经存在的项目,怎样才能改成Cmake的形式集成NDK呢?一 修改Build.gradleandroid { compileSdkVersion 29 defaultConfig { ... // 指导我们的 源文件 编译 externalNativeBuild{// ndkBuild{//// // armeabi-v7a// abi原创 2020-07-30 08:52:43 · 252 阅读 · 0 评论 -
NDK16_Android.mk集成动态库和静态库
NDK开发汇总一 生成一个简单库文件so、aNDK16_Linux中使用NDK编译安卓可用的.cNDK16_NDK编译生成so并CMAKE集成配置环境变量export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gccexport AAA="--sysroot=/home/bao/android-ndk-r17c/platforms原创 2020-07-27 18:31:51 · 512 阅读 · 0 评论 -
NDK16_NDK编译生成so并CMake集成
NDK开发汇总一 Linux环境生成so文件1 新建源文件vim main.c内容int test(){ return 11;}~ 2 编译参考: NDK16_Linux中使用NDK编译安卓可用的.c配置gcc临时环境变量export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc配置头文件临时环境变原创 2020-07-26 21:31:47 · 1126 阅读 · 0 评论 -
NDK14_C++基础:部分C++11、14特性
NDK开发汇总文章目录nullptr类型推导基于范围的 for 循环Lambdanullptrnullptr 出现的目的是为了替代 NULL。 C++11之前直接将NULL定义为 0。void test(int* i){ }void test(int i){ }//现在调用哪一个test? test(int)test(NULL);//调用test(int* i)test(nullptr); 类型推导C++11 重新定义了auto 和 decltype 这两个原创 2020-06-16 14:35:39 · 233 阅读 · 0 评论 -
NDK14_C++基础:C++线程
NDK开发汇总文章目录C++11线程POSIX线程线程属性分离线程调度策略与优先级线程同步条件变量线程,有时被称为轻量进程,是程序执行的最小单元。C++11线程#include <thread>void task(int i) { cout << "task:" << i << endl;}thread t1(task,100);//等待线程结束再继续执行t1.join();POSIX线程POSIX 可移植操作系统接口,标准原创 2020-06-16 14:30:57 · 286 阅读 · 0 评论 -
NDK14_C++基础:智能指针
NDK开发汇总C++线程与智能指针文章目录C++线程与智能指针线程C++11线程POSIX线程线程属性分离线程调度策略与优先级线程同步条件变量智能指针shared_ptrweak_ptrunique_ptr自定义智能指针部分C++11、14特性nullptr类型推导基于范围的 for 循环Lambda作业(后面FFmpeg直播播放器课程的队列工具类)线程线程,有时被称为轻量进程,是程序执行的最小单元。C++11线程#include <thread>void task(int原创 2020-06-16 14:11:50 · 272 阅读 · 0 评论 -
NDK16_Linux中使用NDK编译安卓可用的.c
一 ubuntu中编译c文件vim main.c编辑int main(){printf(“111\n”);return 0;}gcc main.c 将生成a.out文件vi mian.c 添加头文件#include <stdio.h>gcc -o main main.c生成一个可执行文件main执行./main打印结果:11111这个main文件在Android手机中不能执行,这是因为两个设备不同,对应的指令集不同想要在ubuntu中编译出在Android手机中可以原创 2020-06-16 14:05:18 · 511 阅读 · 0 评论