- 博客(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 1806
原创 wasm 视频解码渲染实现
实现一个wasm视频解码渲染的小demo,网页端集成emcc编译的ffmpeg库,实现视频解码,使用WebGL实现视频渲染。demo中包含了一个基于mongoose的微型Web服务器,用于网页的Web服务和视频流传输,基本无需额外搭建环境以及编译第三方库,可以简单地移植到嵌入式系统中用于网页视频播放视频。
2022-12-05 00:00:57 4916 3
原创 卡尔曼滤波在Webrtc中应用的理解
总结了自己对卡尔曼滤波的理解以及卡尔曼滤波在webrtc中视频播放控制的应用。通过抽离webrtc代码并模拟数据输入加深对算法流程的理解。
2022-05-22 23:48:36 1725 3
原创 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 6151 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 3707 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 8087 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 4083 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 29813 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 4529 1
原创 数字信号入门笔记1 — 离散时间信号
本节主要记录数字信号相关概念,常见信号,信号的描述方法(时域描述/频域描述),以及模型信号和数字信号转换及其中产生的问题。知识点提要:1.单位冲击信号的时域描述,作为最基本的离散时域信号,可以表示其他离散时域信号。2.模拟角频率单位为Hz,代表每秒转多少周期 模拟角频率Ω代表每秒转到少弧度(rad/s). 数字频率w 每个采样点间弧度rad3.复正弦信号由欧拉公式得到,建立了三角函数和复向量间关系,常用于代码实现信号相关算法4.DTFT(区别于DFT ) 离散信号的DTFT是连续...
2020-06-08 19:31:05 4092
原创 视频学习笔记:Android OpenGL渲染YUV420P图像
背景Android 开发中,当得到一张yuv图需要显示时,之前的做法是利用ffmpeg自带的方法将其转换为RGB565或者RGBA,然后将RGB数据拷贝到aNativeWindow的图像缓冲区,达到显示的目的。这样做比较耗CPU, 最近在阅读ijkplayer源码时,整理了一下OpenGL直接渲染YUV420P相关流程,参考网上一些代码,总结了一个最简单的小例子。例子下载地址 http://dow
2017-06-26 19:43:03 7692 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 6214 25
原创 NDK学习笔记:java类封装c++类
本文介绍了jni开发的中java类如何直接对c++类进行封装和调用,并附源码。另外修改了原文中的一些错误。
2017-06-05 22:59:28 3136 1
原创 Android usb学习笔记:Android AOA协议Android端 流程总结
上篇文章中我们了解了嵌入式设备端将Android手机设置为accessory模式的流程以及嵌入式设备端接收和发送数据的流程,本文将对应介绍Android端accessory模式被激活的过程,以及接下来如何与嵌入式设备端进行通信。本文的源码下载地址:https://git.oschina.net/vonchenchen/aoa_android.git实现
2017-04-22 13:00:15 6211 19
原创 Android usb学习笔记:Android AOA协议设备端 流程总结
Android手机与嵌入式设备通过usb直接连接的方式进行通信,其中Android的usb层使用了Android自身的AOA模式,嵌入式端借助libusb库与Android端通信。上层协议参考了usbmuxd库,并在Android端用java实现了usbmuxd的部分协议,最终使用可以抽象为双方socket端口间的通信过程。
2017-04-20 21:14:51 13611 4
原创 NDK学习笔记:jni数据类型转换
随着Android项目中c++代码部分功能复杂程度的增加,jni中需要传递的数据类型也越来越多,关于jni数据类型转换网上有不少相关文章,但是在使用时发现这些例子中存在不少谬误,遂在此重新总结相关内容,并附相关例程,以便日后参考。
2017-02-05 15:27:12 10084 1
翻译 NDK学习笔记:Android.mk
最近在搞NDK编程时发现一个比较棘手的问题,就是关于编写Android.mk文件时,如果工程比较复杂,我们自己编写的Android.mk就会比较复杂。关于这个makefile的编写,我们可以参考http://android.mk/查找Android.mk的一些编写规则,在此我将http://android.mk/中的内容做了一些简单的翻译,其中也加入了一些自己的理解,可能有不妥之处,欢迎大家及时指正。
2016-12-06 21:34:31 2535
原创 Android知识总结:图片放错mipmap文件夹导致内存泄露的问题
背景最近开始着手优化app的性能。其中有这样一个activity,只要手机一开启内存就会飙升二十多M, 之前认为可能是其中大的图片资源解压导致,但是通过查看记录内存的.hprof文件,这个activity布局中一个ImageView中的bitmap竟然引用了二十多M的内存空间, 但是这张图在布局中是一张很小的图,打开图片资源文件,发现原图也仅仅是一张800x800的图…. 奇怪的是,当把这个应用放到
2016-12-01 21:53:45 4414
原创 jni学习笔记:动态链接库与静态链接库的基本使用流程简记
背景最近做了一段时间的项目中涉及到一些ffmpeg视频编解码的应用和OpenCV算法在Android的使用,其中免不了需要使用jni在java层调用相关算法的内容,尤其当业务逻辑复杂时还需要cpp层调用java层的函数。在此也总结了一些jni使用上的方法以及一些常见的问题。本文我们将总结一些基础知识。我们知道,Android集成许多第三方库的时候,需要导入许多动态链接库也就是.so文件,而我们只要在
2016-11-19 15:26:51 8184
原创 JSONObject与java字符串拼接json的区别
背景事情的起因是这样的。最近正在调试Socket.io的Android端接口。自己找到的Socket.io的Android的官方资料只是简单的字符串传递,而后台的接口则是一次性传递多组键值对参数,考虑到js的字典可以用类似json键值对来初始化,我就把参数直接拼接成了字符串进行测试。拼接方式如下String str = "{\"key\":"+value+"}";也就是使用最普通的java拼接字符串
2016-11-09 22:03:13 5165
原创 OpenGLES入门笔记:Rajawali学习(4)物体点击事件的实现
背景前面我们分别分析了Rajawali中场景的创建与物体的绘制,这篇文章我们将梳理一下点击事件的实现。这里我们参照general中的拖动例程,看看物体如何实现点击事件的捕获与响应。
2016-08-21 00:13:52 2344
原创 OpenGLES入门笔记:Rajawali学习(3.1)球体的绘制
背景上一篇文章我们了解了Object3D类绘制3D模型的基本流程,现在我们使用一个实例来说明如何自定义一个基本的几何体模型。此处我们分析一下Rajawali中球体的实现,作为上一篇文章的补充说明。实现球型物体Sphere继承了Object3D。 下面我们看一下如何在Object3D的基础上扩展出来一个球型物体。先看一下我们如何在场景中创建并添加一个SphereSphere sphere = new
2016-08-18 23:33:50 2392
原创 OpenGLES入门笔记:Rajawali学习(3)模型绘制的基本流程
背景我们在前面讨论了Scane相关的内容,这一篇文章中我们会讨论一下场景中物体的绘制,其中主要涉及了ATransformable3D,Object3D,Material三个对象,现在让我们来看看它们是怎么把物体绘制到Opengl中的。实现IGraphNodeMember视图中的物体必须实现这个接口/** * Sets the node that this member is contained i
2016-08-17 01:13:51 3957 2
原创 OpenGLES入门笔记:Rajawali学习(2)场景绘制基本流程
背景上一篇文章中我们简单体验了一下Rajawali的基本功能,现在我们来具体看一下这些物体是如何封装,最终调用GLES 绘制的。上一篇中通过阅读代码我们发现Rajawali的绘制也是类似于Surface和Renderer的机制,Surface用于最终的呈现,Renderer用于渲染图形。实现SurfaceISurface这个接口定义了Surface中的基本功能,实现了它才算是一个基本的Surface
2016-08-15 23:38:55 2745
原创 OpenGLES入门笔记:Rajawali学习(1)基本功能初探
背景最近开始学习rajawali,rajawali是一个Android下封装了OpenGLES API的引擎,可以方便地建立自己的场景,目前还集成了CardBoard相关,可以进行VR相关的开发,同时也可以进行AR相关的开发。rajawali为我们提供了比较丰富的例程,很多东西可以参照例程快速上手。本文记录了rajawali的集成,以及制作一个简单的音乐频谱变化的小demo,其中遇到不少问题,还需要
2016-08-15 03:22:58 5431
原创 OpenGLES入门笔记 :OpenGLES光照基础总结4 光照的顶点计算与片元计算
背景随着对光照相关shader的学习,发现前面很多知识理解的并不正确。下面记录一下前段时间关于光照颜色插值的计算发现的问题。片元中计算光照先看一张效果图 这是我们使用片元着色器进行光照计算得出的效果。在这里我们对每个片元进行光照计算,也就是说每个点与光源的距离和角度我们都会计算,并为之赋一个准确值。于是就形成了上图的光照效果,这种方式可以比较精准地反应光照,但是计算量巨大,如果不对多光源进行特
2016-07-30 18:58:11 1520
原创 OpenGLES入门笔记 :OpenGLES光照基础总结3 点光源的实现
背景前两篇文章谈了光照的原理,本文记录了在了解了原理后调试代码的过程及遇到的一些问题和想法,实现主要参考了红宝书上点光源着色器的代码。需求是这样的,我们现在要实现一个点光源,让这个点光源照亮天空盒的表面。实现效果如下图。图中红色的小灯笼代表光源的位置,它可以照亮近处的天空盒,由于天空盒的是中间凸起的,所以近处天空盒的边缘是无法被照亮的。而远处天空盒的其他面也被照亮了。我们可以在天空盒空间中任意移动红
2016-07-15 19:33:53 1851 1
原创 OpenGLES入门笔记 :OpenGLES光照基础总结2 获取法向量
背景上一篇我们谈了光照的基本知识,其中漫反射和镜面反射都涉及到了光照面的法线。如果对于天空盒等简单的物体,我们手工指定了法向量,但是如果对于一个复杂的物体,我们没办法为每个面指定法向量了。下面我们就来总结如何找到每个面的法向量。原理 如图,此时我们把ABCD当做一个平面,此时向量AC和向量BD可以确定一个平面。蓝色箭头就代表ABCD平面的法线,也就是我们要求的法向量。 通过点ABCD的坐标,我们
2016-07-10 23:26:15 1969
原创 OpenGLES入门笔记 :OpenGLES光照基础总结1
背景最近开始入门OpenGLES,学习光照相关的知识。其中遇到不少问题,走了不少弯路,下面简要总结一下最近的问题以及自己的一些认识,有不正确的地方希望大家指正。光照的原理首先说明的一点是这里我们主要讨论OpenGLES2.0下的光照。学习光照之前,我们已经做过一些场景,虽然这其中并没有涉及到光的概念,但是我们依然能看到带颜色物体,以及各种图片纹理。所以可以确定的是,没有光照我们依然能看到东西,而不是
2016-07-10 00:09:35 2100 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 14895 4
原创 Android自定义控件:仿美团下拉菜单及相关代码优化
最近的项目中用到了类似美团中的下拉多选菜单,在实际开发过程中,也发现了一些问题,主要归纳如下:1.当菜单较为复杂时,如果不能设计好代码逻辑,将造成控件难于维护 2.美团菜单可以连续点击顶部tab,切换不同菜单,而我使用的popupWindow似乎在展开一个菜单时点击其他tab,菜单就会收回。本文将针对如上两个问题进行一些讨论,最终给出较为合理的解决方案。
2016-04-21 22:34:36 6215 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 14921 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 14524 3
原创 Android控件: 仿探探首页 相册侧滑层叠加载
探探首页样式 探探,百合网等神器的首页有一个相册加载个控件,通过左滑右滑加载新的照片,同时左滑丢弃这个照片,右滑则表明对这个照片感兴趣。
2016-02-19 10:18:02 6194 1
原创 Android BLE学习(二): Android与51822蓝牙模块通信流程的实现与分析
本文主要梳理了51822BLE开发板与Android手机通信的方式,简要介绍了一些实用的蓝牙协议知识以,分析了协议在开发板控制程序和APP程序中的体现。
2016-02-17 17:02:03 7697
原创 Android BLE学习(一): Android搜索BLE设备
背景总结一下最近ble的学习情况。自从入手ble 51822开发板后就开始不停加班,中途出于好奇,业余时间写了一些单片机上json解析相关的东西,妄图使用蓝牙传输json数据,不知道是否实用,既然开始写了,得写出点样子,晃晃荡荡,2016年的1月份就过去了。这里本章我们主要总结一下ble搜索相关的内容,先建立直观印象,然后剖析ble模块与Android相关代码,看看源码与现象是如何对应的。最后,当我
2016-02-04 02:35:29 9188 4
原创 单片机JSON生成框架
背景最近买了51822的蓝牙开发板,闲暇之余进行了一些调试,目前还没有深究蓝牙协议的原理。借助git上51822的现有安卓例程以及开发板自带程序,基本可以实现Android手机和开发板间的数据传递,那么,问题来了。数据用什么样的格式传递呢?如果数据量小的话可以自定义一些规则进行解析,记得做毕业设计的时候就是自定义了几个tag,单片机通过串口发送带Tag的字符串,上位机根据Tag解析数据,显
2016-01-08 02:41:54 5352 3
MediacodecDemo.zip
2020-06-29
Webrtc源码开发笔记1 —Webrtc视频编码打包流程模块图解.zip
2020-06-12
Android Native层使用opengl es渲染yuv420
2017-12-26
Android opengl渲染yuv420例子
2017-06-25
jni数据类型转换
2017-02-05
仿 nrf master control panel的开源BLE调试程序
2016-03-22
Mac下编译VLC Android的问题
2016-08-28
opengl 天空盒如何添加点光源
2016-07-13
大家如何处理Android中的libs下的x86文件
2016-04-28
安卓 带阴影的折线图控件 如何绘制阴影
2015-08-13
安卓activity启动的奇怪问题
2015-06-26
安卓获取当前Activity的引用
2015-05-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人