- 博客(55)
- 资源 (11)
- 收藏
- 关注
原创 LVGL仪表盘逆时针
LVGL 8.3 自带的lv_meter控件,目前只支持顺时针显示,但是,项目上刚好用到了逆时针。这个方法在模拟器上可以,但是放到板子上,刻度显示不出来,只显示一个完整的弧,这不是我要的效果,具体为何如此,深入研究了一番,没找到原因。唯一的差别在模拟器使用的SDL,板子使用的FB。鉴于arc + lv_meter 组合的方案没有通过,转而换个思路。由于arc是支持逆时针的,那就先研究arc的实现方式,然后在lv_meter代码中修改。按照这个思路,又研究了一番源码,找到了方法。
2024-10-10 09:00:38
437
原创 zlm源码研究 - webrtc播放
WebRTC的好处不用在此描述了,zlm作为流媒体服务器对其支持的已经非常好了。接下来主要研究web端拉流的情况。
2023-03-06 17:54:43
1384
1
原创 PS流封装
概述背景由于工作需要,研究国标28181有半年多啦,里面涉及的媒体封装为不太常用的PS。通过研究协议文档及网上相关优秀的文章,结合自己的理解,整理记录如下。如理解有偏差,请指正。封装定义缩写全称描述PSProgram Stream节目流ESElementary Stream原始流:如H264 / G711PESPacketized Elementary Stream分组的原始流PES packetPES packetPES包。用于携带基本流数
2022-05-17 17:09:12
1533
原创 C++基础知识 - map
概述map是典型的关联容器关联容器的特点是,按照关键字保存和访问。底层结构是用红黑树实现。map还是有序容器默认情况下,标准库使用关键字类型的<运算符来比较两个关键字。所以,关键字的类型需要定义“正常行为”的<运算符。所有元素都会根据元素的关键字值自动排序。map中所有元素都是pairpair中的第一个元素为key(关键字),起到索引的作用,第二个元素为vaule(值)。不重复map中不允许容器中有重复关键字元素。创建类别声明empt
2021-11-27 18:17:51
693
原创 C++基础知识 - vector
概述vector,直译为向量,我们一般称为动态数组,一般不去翻译,直接使用vector称呼。它是STL诸多数据结构中使用最广泛的几个数据结构之一。C++编程规范中指出,如果你不知道使用哪个容器合适,就使用vector吧。无论从使用的方便程度和效率上,都可圈可点。下面详细学习该数据结构,以C++11为准。创建构造函数:类别声明default (1)explicit vector (const allocator_type& alloc = allocator_type()
2021-11-27 14:36:20
889
原创 交叉编译tcpdump
下载官网https://www.tcpdump.org/需要两个包libpcap-1.10.1.tar.gztcpdump-4.99.1.tar.gz编译pcap库tcpdump依赖pcap库./configure CC=arm-hisiv500-linux-gcc --prefix=/root/test/tcpdump/install --host=arm-linux --with-pcap=linux报错configure: error: Neither flex nor le
2021-11-03 13:40:22
407
原创 RTMP协议分析
概述RTMP全称:Real Time Messaging Protocol。整个协议有两个重要的概念,消息和数据块。消息(Message)RTMP是基于消息的协议,不论命令还是数据,均是通过封装成消息展现的。数据块 (Chunk)消息通过网络传输时,需要拆分成若干数据块。这样可以实现多路复用,保证优先级,但是,也增加了实现难度。消息和数据块的关系:消息消息 = 消息头 + 有效负载。消息头的格式如下: 0 1
2021-10-22 16:30:31
305
原创 Git 常用操作
背景使用Git挺长时间了,也只是基于常用的简单命令,现按照自己的理解整理如下,方便查阅。如有问题,请指正。初始化创建本地仓库git init # 在当前目录下创建.git隐藏目录及子目录和文件分支查看分支git branch # 该命令会列出本地所有分支,前面带*的为当前分支git branch -r # 查看远程分支列表git branch -a # 查看所有分支列表,包括本地和远程git branhc -vv # 查看本地分支对应的远程分支创建分支git branch
2021-08-21 17:56:11
165
原创 Livego环境搭建
Go环境搭建下载网站https://golang.google.cn/dl/安装tar xvf go1.16.6.linux-amd64.tar.gz -C /usr/local配置环境变量# GOROOT是系统上安装Go软件包的位置export GOROOT=/usr/local/go# GOPATH是工作目录的位置,可配置多个目录export GOPATH=$HOME/go# 把$PATH放到最后,可以屏蔽之前安装的版本export PATH=$GOROOT/bin:$GOPA
2021-07-24 17:05:35
915
2
原创 LVGL源码研究 - 初探
背景在上一篇中成功运行了LVGL自带的Demo,这次从Demo的程序入口进行初步分析。入口主函数int main(int argc, char **argv) // lvgl初始化 lv_init(); // 硬件初始化:包括显示设备、输入设备 hal_init(); // 选择一个Demo运行 lv_demo_widgets(); // 周期性运行lv_timer_handler接口,该接口内部主要处理:绘制、获取输入信息等 while (1) lv_ti
2021-07-06 15:09:00
9010
原创 LVGL模拟器
背景LVGL是偶然间发现的轻量级的,用C语言面向对象思想编写的完全开源的GUI。可以在单片机、Linux上通吃,感觉还不错,准备研究一下。首先,就是感受一下效果。目前,还没有类似于Qt Creator之类的IDE,不过有基于Eclipse、VS等做的模拟器。网上很多都是基于这两个IDE做的例子,从开始学习编程就是在Linux,不太习惯windows,还好有VScode。LVGL也有基于VSocde的模拟器。说是模拟器,其本质就是通过VScode来编译并运行程序而已。底层使用的SDL2,来模拟显示设备。
2021-07-06 14:13:06
3805
1
原创 sqlite3 研究一
背景由于项目中使用sqlite,而且使用的比较频繁,虽然有别人的项目中的例子作为参考,但是,自己不熟悉毕竟心理没有底,趁这个机会,好好学习一下。虽然这个数据库是很小的,但是要想用好它,也必须好好研究一番,网上的例子都是些小儿科。在此,以官网的doc为例,增删改查挨个测试一遍,以经典的学生信息为例吧API创建数据库打开一个数据库,没有的话,就创建。使用的API为:int sqlite3_open( const char *filename, /* Database filename (UTF
2021-06-25 16:59:45
188
1
原创 NTP同步时间
背景服务器运行一段时间后,系统时间变慢。需要同步网络时间,使用的服务就是ntp。同步查看当前时间# dateThu Jan 9 13:51:58 CST 2020安装工具,默认是安装了的yum install -y ntpdate同步ntpdate -u ntp.api.bz-u: 参数说明:指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。ntp
2021-06-25 16:10:44
352
原创 crontab基础用法
简介crontab是Linux的shell命令,非常的实用,简单的来说是用来定时,什么时间执行什么命令之类的。服务Linux默认是装有crontab的,通过下面的方式进行启动即可。命令crobtab -l 在标准输出上显示当前的crontabcrontab -e 编辑当前的crontab文件,编辑后将自动安装目前用的比较多就是这两条命令。格式域中除了可以写入数字,还可以写入特殊符号,包含: “ * / - , ”:* 代表所有的取值范围内的数字/ 代表每的意思- 代表
2021-06-25 16:05:30
172
原创 搭建Samba
Centos6 上搭建Samba服务器#!/bin/shsed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/configsetenforce 0yum install samba -y service smb start echo "admin " | useradd -s /sbin/nologin admin echo "admin " | smbpasswd -a adminchown admin.adm
2021-06-25 15:57:52
124
原创 粗略分析ffplay源码
背景研究FFmpeg源码有段时间了,云里雾里。先修整一下,分析一下ffplay源码。这次分析没有深入细节,注重的是框架结构。使用ffplay -i rtmp://172.16.11.97:1935/myapp/123源码分析main入口// 通过解析输入参数,获取文件名称,文件格式是NULLVideoState *stream_open(const char *filename, AVInputFormat *iformat) is = av_mallocz(sizeof(VideoSta
2021-05-24 15:58:15
180
原创 搭建Nginx-Rtmp 流媒体服务器
背景如果学习研究或者对流媒体服务器要求不高的情况下,可以直接拿NRM作为服务器,它是基于Nginx这个经典的开源软件作为平台,以模块的形式,实现的RTMP的流媒体服务器。接下来,搭建此服务器,通过OBS推流,VLC拉流。当然,如果在工程中使用,完全可以自己实现推流和拉流的功能。安装并运行NRM下载Nginxhttp://nginx.org/en/download.html下载NRMhttps://github.com/arut/nginx-rtmp-module安装依赖包apt-get
2020-07-31 17:46:39
371
原创 Linux下Qt creator搭建FFmpeg环境运行FFplay
背景为了研究ffplay的源码细节,打算使用Qt Creator这个IDE中运行并调试打印ffplay,深入研究ffplay的播放细节。解决的思路是:编译出ffplay编译依赖包(FFmpeg,SDL2),新建工程,在工程引入对应的头文件及库,编译运行ffplay。安装SDLffplay底层使用的SDL进行渲染显示的,所以需要首先安装SDL。官网http://www.libsdl.org/编译# cd SDL2-2.0.12# ./configure# make ; make inst
2020-07-30 17:57:59
1984
原创 Linux下操作串口
背景嵌入式Linux开发,绕不开串口操作。代码#include <stdio.h>#include <string.h>#include <stdlib.h>#include <termios.h>#include <sys/time.h>#include <sys/types.h>#include <...
2020-01-18 20:10:56
305
原创 Linux下操作GPIO
背景嵌入式Linux下需要经常操作GPIO管脚,其中一种方式是使用/sys/文件系统下内核暴露出来的gpio文件。代码#include <stdio.h>#include <string.h>#include <stdlib.h>#include <termios.h>#include <sys/time.h>#inclu...
2020-01-18 20:07:05
315
原创 Bananapi R2 定制系统
背景由于项目需要使用了Banana Pi R2这块板子。参考的资料主要是官方的wiki、GitHub以及论坛。官网:http://banana-pi.org/Wiki:http://wiki.banana-pi.org/Main_Page论坛:http://forum.banana-pi.org/镜像:https://dev.banana-pi.org.cn/Image/BPI-R2/...
2020-01-18 19:58:29
1789
原创 stm32f103 w5500 tcp server
背景项目中需要使用网络,开始使用的stm32f4+lwip的方案,但是硬件成本有些高,更主要的是lwip不好用,老是断,可能是自己没有研究透它吧。经过长时间的调研论证,最终选择了w5500这款芯片。它把TCP/IP网络协议栈固化在了硬件芯片中,为用户留出应用层接口,简单稳定。移植过程首先,从https://w5500.com/上下载芯片手册和参考代码了解芯片的原理及基本用法,内容不是很复杂。...
2019-07-13 11:45:54
4724
4
原创 STM8L驱动I2C类型的12864
原理之前没有操作过12864这种类型的屏,但是,操作过其他类型的,原理都是相通的。12864是拥有128x64像素点这类屏幕的称号吧。屏幕有64行,128列;每个汉字是16x16,所以一个这样的屏,最多可以显示4x8的汉字或者8x16的字符。我使用的是不带字库的I2C接口的屏幕,主芯片是ST7656。这样的屏,只能写,不能读。先配置屏幕,然后通过字模制作软件制作出待显示内容的像素数字,最后,通...
2018-11-25 11:33:43
909
原创 STM8L串口中断进不去
配置串口void UART1_Config(void){ /*Enable USART clock */ CLK_PeripheralClockConfig(CLK_Peripheral_USART, ENABLE); USART_DeInit(); USART_Init((uint32_t)9600, USART_WordLength_8D, USART_StopBi...
2018-11-25 10:51:12
2532
原创 STM8L10x环境搭建
准备STM8的编译环境有两种,一个是IAR,一个是ST官方提供的STVD+COSMIC.由于IAR需要破解,我选择了使用官方提供的环境STVD。STVD:IDE,可以从ST官网下载COSMIC: 编译器,可以从它的官网下载。http://www.cosmic-software.com/download.phpstm8_stdperiph_lib:标准库,这个也可以从ST官网下载,不同型...
2018-11-25 10:32:15
1141
1
原创 Raspberry官方屏旋转90°
背景买了树莓派3B主板和官方7寸触摸屏,希望显示自己编写的Qt程序。烧写Raspbian系统,设置好基本配置,发现屏幕不能90°或270°旋转,即不能竖屏显示,只能是180°。网上说设置/boot/config.txt配置文件中的lcd_rotate=1就可以实现90°,不知道他们有没有真正实现过,我试验了,行不通的。display_rotate=1可以实现90°旋转,但是触摸没有旋转,不能正...
2018-04-05 21:17:12
2484
1
原创 README.falcon
U-Boot Falcon ModeIntroductionThis document provides an overview of how to add support for Falcon Mode to a board.Falcon Mode is introduced to speed up the booting process, allowing to boot a Linux ker
2017-09-10 08:33:21
909
原创 falcon模式
简介在该模式下,SPL可以直接加载内核,开机时间较少不少。目前该模式支持的芯片不多,但是TI的AM335x是其中之一,网上资料也不不多。u-boot-2016.09中有两处有关资料。doc/README.falcon board/ti/am335x/README开启如果启动源为Nand,则默认开启该模式。该模式下需设置的环境变量和参数在README.falcon在有详细描述。设备树在使用传统的
2017-09-10 08:16:09
2221
原创 移植Qt
buildroot中配置Target packages ---> Graphic libraries and applications (graphic/text) ---> [*] Qt ---> [*] Approve free license Graphics drivers --->
2017-09-09 21:01:37
580
原创 buildroot
背景buildroot的基本功能是可以通过简单的配置即可创建出根文件系统。另外,还可以创建交叉编译器, 编译u-boot以及内核。关于buildroot的基础知识不再赘述,网上很多资料,不过,参考官网上的资料就足够了。交叉编译器创建首次使用时,需要buildroot创建交叉编译器。make beaglebone_defconfigmake menuconfigToolchain --->
2017-09-09 20:53:27
8241
原创 LCD的配置
lcd的驱动也不需要自己写,而是在设备树中配置好即可。设备树 panel { compatible = "ti,tilcdc,panel"; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&lcd_pins_s0>; panel-info {
2017-09-09 20:37:31
2405
1
原创 矩阵键盘
背景移植矩阵键盘。矩阵键盘的原理不赘述。设备树evm的板子上有一个2x3的矩阵键盘,设备树中也有体现。参考这个实现自己的矩阵键盘设备树如下: matrix_keypad: matrix_keypad@0 { compatible = "gpio-matrix-keypad"; debounce-delay-ms = <5>; col-scan-d
2017-09-09 20:33:52
1932
2
原创 usb的设置
背景设置usb0为host模式,支持u盘的热插拔。设置usb1为otg模式,支持设备作为u盘连接到电脑。 我对usb没有研究,但是linux内核对usb的支持非常强大,不需要修改代码,只需配置就可以实现。设备树首先,查看并设置usb的设备树 其中具体设置在am33xx.dtsi中usb: usb@47400000 { compatible = "ti,am33xx-usb
2017-09-09 20:23:46
3417
原创 内核移植
配置make omap2plus_defconfigvi MakefileARCH=armCROSS_COMPILE = arm-linux-make menuconfig裁剪不需要的功能make uImage LOADADDR=0x80008000在arch/arm/boot目录下生成uImage 接下来就是烧写uImage,验证功能是否正常。驱动如网卡和Nand不需要修改任何代码就可以
2017-09-09 20:15:20
388
原创 设备树
简介最新的内核配置基本上都是通过设备树了。这是个什么东西?简单说,就是描述硬件信息的配置文件。 该配置文件采用类似Jason的语法,来表述各个类型的硬件参数信息,如cpu、memory、nand、lcd等, 简单介绍下,具体可以参考官网上的spec。 每个硬件类型可以通过node来描述,node里面可以包括property和child node,以此类推。/ { model = "TI
2017-09-09 20:10:27
630
原创 u-boot移植
u-boot的基础知识前面已经分析完,接下来针对我们自己的板子进行详细的移植。修改代码eeprom由于板子中没有eeprom,所以下面这个函数需要修改。 board/ti/am335x/board.cstatic inline int __maybe_unused read_eeprom(void){ //return ti_i2c_eeprom_am_get(-1, CONFIG_SY
2017-09-09 20:02:58
690
原创 u-boot代码分析
简介项目中使用的u-boot版本是u-boot-2016.09,在该版本中引入了Kconfig,可以通过menuconfig进行配置。但是,遗憾的是,menuconfig还不够成熟,很多配置还是需要在.h配置文件中进行配置。u-boot文档中也说明了该情况,现在是把之前的配置方式往menuconfig上搬移的过程,但是需要一定的时间,希望早日完成。顶层的Makefile就不去分析了,网上相关资料很多
2017-09-09 19:46:45
612
RTSP.rar RTSP协议文档,包括中文版和英文版,1.0版本的。
2020-07-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人