自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 资源 (24)
  • 问答 (6)
  • 收藏
  • 关注

原创 协程切换原理与实践 -- 从ucontext api到x86_64汇编

实现一个对称协程切换的demo,相同流程先使用ucontext api实现,了解流程后再使用x86_64汇编实现,x86_64汇编直接拷贝了开源项目libco的代码,封装成类似ucontext api的方法调用。文章最后实现一个可以选择使用ucontext和汇编切换协程的简单demo。

2023-05-14 12:10:06 1641

原创 wasm 视频解码渲染实现

实现一个wasm视频解码渲染的小demo,网页端集成emcc编译的ffmpeg库,实现视频解码,使用WebGL实现视频渲染。demo中包含了一个基于mongoose的微型Web服务器,用于网页的Web服务和视频流传输,基本无需额外搭建环境以及编译第三方库,可以简单地移植到嵌入式系统中用于网页视频播放视频。

2022-12-05 00:00:57 4023 3

原创 卡尔曼滤波在Webrtc中应用的理解

总结了自己对卡尔曼滤波的理解以及卡尔曼滤波在webrtc中视频播放控制的应用。通过抽离webrtc代码并模拟数据输入加深对算法流程的理解。

2022-05-22 23:48:36 1449 3

原创 使用Xcode调试FFmpeg内部代码

Xcode调试FFmpeg

2022-01-17 01:42:27 4766

原创 ffmpeg中AVPacket与AVFrame中数据的传递与释放

总结了一下AVPacket与AVFrame中拷贝和释放相关操作。这里我理解在AVFrame与AVPacket传递流转的过程中并不会去每次创建和拷贝音视频数据,音视频数据被存储在AVBuffer中,而AVFrame与AVPacket在流转时进行浅拷贝,只有调用其对应unref时,会减少AVBuffer中的引用计数,最终释放内部存储音视频数据的buffer。目录1.av_freep释放并置空双重指针指向的那个指针2.av_packet_unref3.av_packet_ref4.av_pac

2021-07-22 14:56:28 5665 1

原创 rtmp H264多Slice封装学习笔记

1.背景在使用src_librtmp转推H264数据时,拉流端观看出现了花屏问题。经过排查发现客户端X264编码时如果设置了分片,转推为rtmp就会导致花屏,关闭分片相关设置视频正常。在转推H264前将数据写入本地,播放正常,播放转推后的rtmp花屏,ffplay会报错。这里推断是rtmp封装问题导致了花屏,下面首先需要对于这种一帧H264视频中包含多个Slice的情况,应当如何封装。2.与ffmpeg推流进行对比这里们尝试使用ffmpeg来推一段多slice的H264码流,ffplay拉流播放

2021-05-26 20:56:19 3253 3

原创 Android MediaCodec+OpenGL视频编解码实践笔记

Android MediaCodec+OpenGL视频编解码实践笔记本文总结了Android MediaCodec配合OpenGL进行视频编解码以及渲染的相关流程。文中提供一个Demo,主要涉及调用Android MediaCodec进行编解码,以及渲染相关流程,针对实际工程中SurfaceView推后台等情况进行优化,渲染部分主要参考了Grafik,目前主要在rk3288平台验证。1.Demo提供的测试功能H264编码以及保存视频 H264解码渲染 Opengl绘制相机视频帧 VP8解码

2020-06-29 00:55:49 7528 7

原创 Webrtc源码开发笔记1 —Webrtc视频编码打包流程模块图解

目录Webrtc源码开发笔记1 —Webrtc视频编码打包流程模块图解1. RtpTransceiver2.1 VideoChannel2.2BaseChannel2.3 WebRtcVideoChannel3.Call模块与Stream4.RTP/RTCPWebrtc源码开发笔记1 —Webrtc视频编码打包流程模块图解本章旨在梳理webrtc从transceiver到transport流程,从而宏观上了解webrtc视频采集,编码,打包发送等相关流程与相关模块的.

2020-06-12 15:58:09 3425 2

原创 数字信号入门笔记2 —线性时不变(LTI)系统

目录数字信号入门笔记2 —线性时不变(LTI)系统2.1系统与线性时不变系统2.1.1线性系统2.1.2时不变系统2.2LTI系统的时域描述2.2.1差分方程表示2.2.2单位冲击响应表示2.3 LTI系统的特征信号 复正弦信号2.4 Z变换分析LTI系统2.4.1 Z变换定义2.4.2传递函数2.4.3Z变换单位延迟与差分方程2.4.4零极图直观体现系统特性2.5系统的频率响应2.5.1 群延时2.6 向量的角度分析LTI系统2.6.1.

2020-06-08 21:03:22 25320 2

原创 数字信号入门笔记4—离散傅里叶变换

目录数字信号入门笔记4—离散傅里叶变换4.1离散傅里叶变换DFT定义4.2 从典型复正弦信号看DFT的运作方式4.3实正弦信号DFT4.4采样不是正好一个周期复正弦信号 观察其DFT4.4.1主瓣泄露4.4.2旁瓣泄露4.5从等效滤波器的角度看DFT的运作方式数字信号入门笔记4—离散傅里叶变换本节知识点提要:从向量的角度看复正弦信号的DFT,直观解释DFT挑选频率的过程 由复正弦信号DFT如何推广到正弦信号的DFT 从不是一个恰好完整周期的信号DFT看频谱泄.

2020-06-08 20:14:45 4272 1

原创 数字信号入门笔记1 — 离散时间信号

本节主要记录数字信号相关概念,常见信号,信号的描述方法(时域描述/频域描述),以及模型信号和数字信号转换及其中产生的问题。知识点提要:1.单位冲击信号的时域描述,作为最基本的离散时域信号,可以表示其他离散时域信号。2.模拟角频率单位为Hz,代表每秒转多少周期 模拟角频率Ω代表每秒转到少弧度(rad/s). 数字频率w 每个采样点间弧度rad3.复正弦信号由欧拉公式得到,建立了三角函数和复向量间关系,常用于代码实现信号相关算法4.DTFT(区别于DFT ) 离散信号的DTFT是连续...

2020-06-08 19:31:05 3816

原创 视频学习笔记:Android OpenGL渲染YUV420P图像

背景Android 开发中,当得到一张yuv图需要显示时,之前的做法是利用ffmpeg自带的方法将其转换为RGB565或者RGBA,然后将RGB数据拷贝到aNativeWindow的图像缓冲区,达到显示的目的。这样做比较耗CPU, 最近在阅读ijkplayer源码时,整理了一下OpenGL直接渲染YUV420P相关流程,参考网上一些代码,总结了一个最简单的小例子。例子下载地址 http://dow

2017-06-26 19:43:03 7470 14

原创 视频学习笔记:Android ffmpeg解码多路h264视频并显示

背景Android设备上使用ffmpeg解码多路h264视频,抽取了一个简单demo方便日后参考,在此记录一下。demo中主要涉及以下功能:1.ffmpeg解码h264视频为yuv帧 2.使用ffmpeg将yuv帧转换为可以在画布上渲染的rgb帧 3.将Android的SurfaceView类传入jni层并使用rgb帧进行渲染 4.使用java类包装c++类,多线程解码多路视频

2017-06-08 21:06:37 6114 25

原创 NDK学习笔记:java类封装c++类

本文介绍了jni开发的中java类如何直接对c++类进行封装和调用,并附源码。另外修改了原文中的一些错误。

2017-06-05 22:59:28 3053 1

原创 Android usb学习笔记:Android AOA协议Android端 流程总结

上篇文章中我们了解了嵌入式设备端将Android手机设置为accessory模式的流程以及嵌入式设备端接收和发送数据的流程,本文将对应介绍Android端accessory模式被激活的过程,以及接下来如何与嵌入式设备端进行通信。本文的源码下载地址:https://git.oschina.net/vonchenchen/aoa_android.git实现

2017-04-22 13:00:15 6007 19

原创 Android usb学习笔记:Android AOA协议设备端 流程总结

Android手机与嵌入式设备通过usb直接连接的方式进行通信,其中Android的usb层使用了Android自身的AOA模式,嵌入式端借助libusb库与Android端通信。上层协议参考了usbmuxd库,并在Android端用java实现了usbmuxd的部分协议,最终使用可以抽象为双方socket端口间的通信过程。

2017-04-20 21:14:51 13212 4

原创 NDK学习笔记:jni数据类型转换

随着Android项目中c++代码部分功能复杂程度的增加,jni中需要传递的数据类型也越来越多,关于jni数据类型转换网上有不少相关文章,但是在使用时发现这些例子中存在不少谬误,遂在此重新总结相关内容,并附相关例程,以便日后参考。

2017-02-05 15:27:12 9825 1

翻译 NDK学习笔记:Android.mk

最近在搞NDK编程时发现一个比较棘手的问题,就是关于编写Android.mk文件时,如果工程比较复杂,我们自己编写的Android.mk就会比较复杂。关于这个makefile的编写,我们可以参考http://android.mk/查找Android.mk的一些编写规则,在此我将http://android.mk/中的内容做了一些简单的翻译,其中也加入了一些自己的理解,可能有不妥之处,欢迎大家及时指正。

2016-12-06 21:34:31 2480

原创 Android知识总结:图片放错mipmap文件夹导致内存泄露的问题

背景最近开始着手优化app的性能。其中有这样一个activity,只要手机一开启内存就会飙升二十多M, 之前认为可能是其中大的图片资源解压导致,但是通过查看记录内存的.hprof文件,这个activity布局中一个ImageView中的bitmap竟然引用了二十多M的内存空间, 但是这张图在布局中是一张很小的图,打开图片资源文件,发现原图也仅仅是一张800x800的图…. 奇怪的是,当把这个应用放到

2016-12-01 21:53:45 4310

原创 jni学习笔记:动态链接库与静态链接库的基本使用流程简记

背景最近做了一段时间的项目中涉及到一些ffmpeg视频编解码的应用和OpenCV算法在Android的使用,其中免不了需要使用jni在java层调用相关算法的内容,尤其当业务逻辑复杂时还需要cpp层调用java层的函数。在此也总结了一些jni使用上的方法以及一些常见的问题。本文我们将总结一些基础知识。我们知道,Android集成许多第三方库的时候,需要导入许多动态链接库也就是.so文件,而我们只要在

2016-11-19 15:26:51 8077

原创 JSONObject与java字符串拼接json的区别

背景事情的起因是这样的。最近正在调试Socket.io的Android端接口。自己找到的Socket.io的Android的官方资料只是简单的字符串传递,而后台的接口则是一次性传递多组键值对参数,考虑到js的字典可以用类似json键值对来初始化,我就把参数直接拼接成了字符串进行测试。拼接方式如下String str = "{\"key\":"+value+"}";也就是使用最普通的java拼接字符串

2016-11-09 22:03:13 5137

原创 OpenGLES入门笔记:Rajawali学习(4)物体点击事件的实现

背景前面我们分别分析了Rajawali中场景的创建与物体的绘制,这篇文章我们将梳理一下点击事件的实现。这里我们参照general中的拖动例程,看看物体如何实现点击事件的捕获与响应。

2016-08-21 00:13:52 2248

原创 OpenGLES入门笔记:Rajawali学习(3.1)球体的绘制

背景上一篇文章我们了解了Object3D类绘制3D模型的基本流程,现在我们使用一个实例来说明如何自定义一个基本的几何体模型。此处我们分析一下Rajawali中球体的实现,作为上一篇文章的补充说明。实现球型物体Sphere继承了Object3D。 下面我们看一下如何在Object3D的基础上扩展出来一个球型物体。先看一下我们如何在场景中创建并添加一个SphereSphere sphere = new

2016-08-18 23:33:50 2307

原创 OpenGLES入门笔记:Rajawali学习(3)模型绘制的基本流程

背景我们在前面讨论了Scane相关的内容,这一篇文章中我们会讨论一下场景中物体的绘制,其中主要涉及了ATransformable3D,Object3D,Material三个对象,现在让我们来看看它们是怎么把物体绘制到Opengl中的。实现IGraphNodeMember视图中的物体必须实现这个接口/** * Sets the node that this member is contained i

2016-08-17 01:13:51 3869 2

原创 OpenGLES入门笔记:Rajawali学习(2)场景绘制基本流程

背景上一篇文章中我们简单体验了一下Rajawali的基本功能,现在我们来具体看一下这些物体是如何封装,最终调用GLES 绘制的。上一篇中通过阅读代码我们发现Rajawali的绘制也是类似于Surface和Renderer的机制,Surface用于最终的呈现,Renderer用于渲染图形。实现SurfaceISurface这个接口定义了Surface中的基本功能,实现了它才算是一个基本的Surface

2016-08-15 23:38:55 2679

原创 OpenGLES入门笔记:Rajawali学习(1)基本功能初探

背景最近开始学习rajawali,rajawali是一个Android下封装了OpenGLES API的引擎,可以方便地建立自己的场景,目前还集成了CardBoard相关,可以进行VR相关的开发,同时也可以进行AR相关的开发。rajawali为我们提供了比较丰富的例程,很多东西可以参照例程快速上手。本文记录了rajawali的集成,以及制作一个简单的音乐频谱变化的小demo,其中遇到不少问题,还需要

2016-08-15 03:22:58 5262

原创 OpenGLES入门笔记 :OpenGLES光照基础总结4 光照的顶点计算与片元计算

背景随着对光照相关shader的学习,发现前面很多知识理解的并不正确。下面记录一下前段时间关于光照颜色插值的计算发现的问题。片元中计算光照先看一张效果图 这是我们使用片元着色器进行光照计算得出的效果。在这里我们对每个片元进行光照计算,也就是说每个点与光源的距离和角度我们都会计算,并为之赋一个准确值。于是就形成了上图的光照效果,这种方式可以比较精准地反应光照,但是计算量巨大,如果不对多光源进行特

2016-07-30 18:58:11 1483

原创 OpenGLES入门笔记 :OpenGLES光照基础总结3 点光源的实现

背景前两篇文章谈了光照的原理,本文记录了在了解了原理后调试代码的过程及遇到的一些问题和想法,实现主要参考了红宝书上点光源着色器的代码。需求是这样的,我们现在要实现一个点光源,让这个点光源照亮天空盒的表面。实现效果如下图。图中红色的小灯笼代表光源的位置,它可以照亮近处的天空盒,由于天空盒的是中间凸起的,所以近处天空盒的边缘是无法被照亮的。而远处天空盒的其他面也被照亮了。我们可以在天空盒空间中任意移动红

2016-07-15 19:33:53 1804 1

原创 OpenGLES入门笔记 :OpenGLES光照基础总结2 获取法向量

背景上一篇我们谈了光照的基本知识,其中漫反射和镜面反射都涉及到了光照面的法线。如果对于天空盒等简单的物体,我们手工指定了法向量,但是如果对于一个复杂的物体,我们没办法为每个面指定法向量了。下面我们就来总结如何找到每个面的法向量。原理 如图,此时我们把ABCD当做一个平面,此时向量AC和向量BD可以确定一个平面。蓝色箭头就代表ABCD平面的法线,也就是我们要求的法向量。 通过点ABCD的坐标,我们

2016-07-10 23:26:15 1894

原创 OpenGLES入门笔记 :OpenGLES光照基础总结1

背景最近开始入门OpenGLES,学习光照相关的知识。其中遇到不少问题,走了不少弯路,下面简要总结一下最近的问题以及自己的一些认识,有不正确的地方希望大家指正。光照的原理首先说明的一点是这里我们主要讨论OpenGLES2.0下的光照。学习光照之前,我们已经做过一些场景,虽然这其中并没有涉及到光的概念,但是我们依然能看到带颜色物体,以及各种图片纹理。所以可以确定的是,没有光照我们依然能看到东西,而不是

2016-07-10 00:09:35 2027 1

原创 Fiddler Https出现 no root certificate was found的解决方法

fiddler调试Android应用中的https协议的方法网上已经有很多介绍,今天出现了一个问题,浏览器打开页面时无法生成认证,提示no root certificate was found信息。使用http://download.csdn.net/detail/lidec/9509370工具,可以解决不能生成认证的问题。

2016-05-04 21:52:38 14821 4

原创 Android自定义控件:时间滚轮控件的绘制

写了一个Android时间滚轮控件,以备不时之需

2016-04-23 23:20:13 7012 4

原创 Android自定义控件:仿美团下拉菜单及相关代码优化

最近的项目中用到了类似美团中的下拉多选菜单,在实际开发过程中,也发现了一些问题,主要归纳如下:1.当菜单较为复杂时,如果不能设计好代码逻辑,将造成控件难于维护 2.美团菜单可以连续点击顶部tab,切换不同菜单,而我使用的popupWindow似乎在展开一个菜单时点击其他tab,菜单就会收回。本文将针对如上两个问题进行一些讨论,最终给出较为合理的解决方案。

2016-04-21 22:34:36 6132 1

原创 Android知识总结:ListView 出现IndexOutOfBoundsException异常

背景今天在整理友盟统计bug时,发现有几个bug集中在首页ListView的Adapter上,具体翻来,大概是说ListView中数据出现越界。具体错误日志大概如下:java.lang.IndexOutOfBoundsException: Invalid index 4, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsExcep

2016-03-31 21:55:39 14816 2

原创 Android BLE学习(三):编写自己的 BLE蓝牙读写工具(功能仿照nrf master control panel)

背景由于nordic官方的nrf master control panel只提供了apk,很多同学学习起来都得自己摸索蓝牙的读写,项目中整理了BLE模块的基本读写方法以及一些常用的UUID,并且抽取了一些蓝牙操作的流程,方便Android app代码开发,希望能帮到正在学习BLE蓝牙的同学们。

2016-03-22 00:28:28 14403 3

原创 Android控件: 仿探探首页 相册侧滑层叠加载

探探首页样式 探探,百合网等神器的首页有一个相册加载个控件,通过左滑右滑加载新的照片,同时左滑丢弃这个照片,右滑则表明对这个照片感兴趣。

2016-02-19 10:18:02 6139 1

原创 Android BLE学习(二): Android与51822蓝牙模块通信流程的实现与分析

本文主要梳理了51822BLE开发板与Android手机通信的方式,简要介绍了一些实用的蓝牙协议知识以,分析了协议在开发板控制程序和APP程序中的体现。

2016-02-17 17:02:03 7627

原创 Android BLE学习(一): Android搜索BLE设备

背景总结一下最近ble的学习情况。自从入手ble 51822开发板后就开始不停加班,中途出于好奇,业余时间写了一些单片机上json解析相关的东西,妄图使用蓝牙传输json数据,不知道是否实用,既然开始写了,得写出点样子,晃晃荡荡,2016年的1月份就过去了。这里本章我们主要总结一下ble搜索相关的内容,先建立直观印象,然后剖析ble模块与Android相关代码,看看源码与现象是如何对应的。最后,当我

2016-02-04 02:35:29 9070 4

原创 单片机Json框架的实现

单片机Json框架,可以在单片机上实现简单json的生成和解析。

2016-01-28 23:42:55 9921 2

原创 单片机JSON生成框架

背景最近买了51822的蓝牙开发板,闲暇之余进行了一些调试,目前还没有深究蓝牙协议的原理。借助git上51822的现有安卓例程以及开发板自带程序,基本可以实现Android手机和开发板间的数据传递,那么,问题来了。数据用什么样的格式传递呢?如果数据量小的话可以自定义一些规则进行解析,记得做毕业设计的时候就是自定义了几个tag,单片机通过串口发送带Tag的字符串,上位机根据Tag解析数据,显

2016-01-08 02:41:54 5265 3

c语言协程实现demo 分别使用x86-64汇报和ucontext实现

c语言协程实现demo,分别使用x86_64汇报和ucontext实现。适合了解协程切换原理入门学习。

2023-05-14

MediacodecDemo.zip

Android MediaCodec+OpenGL视频编解码 H264编码以及保存视频 H264解码渲染 Opengl绘制相机视频帧 VP8解码渲染(工程根目录下out.vp8是一段使用libvpx中demo编码的vp8视频,ivf封装,可以使用IVFDataReader读取) H264码率控制模式设置 可以测试当前编码器设置vbr,cbr是否有效。 H264码率设置(可以动态设置) H264帧率设置(可以动态设置) H264 IDR间隔设置 H264插入关键帧 MediaCodec解码后通过Opengl渲染视频 应用推后台测试,这里主要是需要监听Surface状态,通过一个消息队列控制是否需要重新初始化渲染,编解码使用的surface是通过纹理创建的,所以推后台不会影响编码和解码,只是停止渲染 相机分辨率选择

2020-06-29

Webrtc源码开发笔记1 —Webrtc视频编码打包流程模块图解.zip

Webrtc源码开发笔记1 —Webrtc视频编码打包流程模块图解 梳理webrtc从transceiver到transport流程,从而宏观上了解webrtc视频采集,编码,打包发送等相关流程与相关模块的对应关系,为开发和快速定位问题提供参考。

2020-06-12

Android Native层使用opengl es渲染yuv420

Android Native层使用opengl es渲染yuv420,通过egl绑定android的surface,直接在native层进行渲染 具体使用见http://blog.csdn.net/lidec/article/details/73732369#comments

2017-12-26

Android opengl渲染yuv420例子

Android下使用OpenGL渲染yuv420p图像并显示。例子中提供了两种类型,一种使用GLSurfaceView在onDrawframe中调用native方法绘制,另外一种使用EGL,直接在native层完成渲染和显示功能。

2017-06-25

jni java类与c++类映射的例子

jni java类与c++类映射的例子

2017-06-05

jni数据类型转换

jni数据类型转换例程 1. java向native传递常用基本数据类型 和字符串类型 2. java向native传递数组类型 3. java向native传递自定义java对象 4. java向native传递任意java对象(以向native传递ArrayList为例) 5. native向java传递数组类型 6. native向java传递字符串类型 7. native向java传递java对象

2017-02-05

Rajawali入门demo

Rajawali入门demo,实现拖拽,并根据音乐频谱实现音柱的跳动

2016-08-15

fiddler生成https认证

fiddler 生成https认证时出现no root certificate was found时运行此工具后再次设置,则可以生成认证

2016-05-03

Android仿美团菜单(点击可连续切换)

Android仿美团菜单(点击可连续切换)

2016-04-21

仿 nrf master control panel的开源BLE调试程序

仿 nrf master control panel的开源BLE调试程序,项目地址见https://git.oschina.net/vonchenchen/BLE_Assitant.git

2016-03-22

Android 沉浸式状态栏与状态栏变色

Android 沉浸式状态栏与状态栏变色demo

2016-03-17

Android与BLE 51822通信APP源码

Android与BLE 51822通信APP源码,可以和Nordic官方的串口例程配合使用

2016-02-17

单片机json生成工具

单片机上可以使用的json生成工具,欢迎大家下载交流,解压如果不成功则使用快压解压

2016-01-08

七牛Android SDK例程

七牛Android SDK例程,快速集成七牛Android SDK

2015-12-17

ImageLoader本地图片管理

ImageLoader本地图片管理,实现网络图片文件的获取与重命名和生成位图的存储

2015-12-11

安卓拍照裁剪例程

整理开源中国App的安卓裁剪图片例程,裁剪后基本不会出现闪退等。

2015-12-10

零死角玩转STM32

野火STM32的教程 挺详细的,可以研究一下,看一下

2014-01-17

STM32下fft源码 c语言

STM32下的FFt,C语言实现,可以完成快速傅里叶变换。

2014-01-17

VC_MFC串口通信编程详解

VC_MFC串口通信编程详解 初学可以参考一下

2012-06-02

AVR单片机C语言编程及应用实

AVR单片机C语言编程及应用实 avr 学习可以参考哦

2012-06-02

嵌入式C编程与Atmel AVR

嵌入式C编程与Atmel AVR 做avr的可以参考一下

2012-06-02

protuse 仿真实例 很强大

protuse 仿真实例 很强大 里面有数百个仿真实例 可以学习或者参考 带源代码

2012-05-20

自平衡小车整套方案

飞思卡尔 今年光电 自平衡车解决方案 可以参考一下

2012-01-18

NRF24L01功能使用文档

NRF24L01功能使用文档 包括很多函数的使用说明和代码

2012-01-18

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除