- 博客(41)
- 收藏
- 关注
原创 FLV流分析
与上一篇一样的,FLV流也是用于音视频合成,且用于音视频传输。相比于TS流,FLV的封装更为简单,其分为文件头(File Header)、文件体(File Body)
2024-08-01 10:36:00
771
原创 TS流分析
1.传输PAT表时,即TS header中PID为0时,通常先要传输一个PAT表,告诉大家后面有是节目,然后在进行传输,因此PAT表是定期传输,但注意实际上在传输PAT表时候是不存在Adaptation field这个内容的,因此,传输PAT时候结构为TS header +PAT信息+0xff补齐。TS header是包头,其中比较重要的是PID,当后面传输PAT时候这个PID就是0,当后面传输的是具体的PES时候就是具体的PES对应的PID,该PID与PMT中PID信息是一致的。
2024-07-31 20:07:26
329
原创 AAC原理及其使用(基于rv1126)
AAC是什么?在视频编码时 可以使用H264对视频进行编码AAC就是在音频编码使用的压缩技术如果直接把音频裸流进行传输,也会占用很大的资源,因此我们需要使用压缩技术对音频数据进行压缩后在进行压缩这很类似于我们在电脑中习惯性的把文件夹压缩为压缩包在进行传输数据AAC又分为了ADIF与ADTS,其中ADIF包含一个头与很多数据,这样的类型很适合与存储,而ADTS对每一帧进行编码,因此ADTS适合用于网络传输。
2024-07-31 17:50:00
875
原创 H264、Annexb 格式、NALU------解析笔记
基本编码后的数据位SODB数据,为了数据对齐,在SODB后加入一个1与多个0完成数据对齐的数据叫做RBSP数据,最后为了去除开始加入防止与起始码重复的0x03,将多余的0x03取出后为最终的数据EBSP。SPS指的是序列参数集,它保存了一组编码视频序列的全局参数。H.264的目的是通过先进的编码技术,提供高质量的视频压缩,比以前的标准(如MPEG-2)在相同的画质下占用更少的带宽和存储空间。“00 00 00”修改为“00 00 03 00” “00 00 01”修改为“00 00 03 01”
2024-07-29 18:44:34
312
原创 rv1126物体检测 rkmedia、opencv……
整体码流流向:因此代码也分为这几部分:VI:采集视频 配置视频采集信息模型推理线程:获取VI码流、载入模型、进行模型推理、保存推理结果画框线程:获取VI码流、获取推理结果、显示推理结果、输出码流到VENCVENC:编码RTSP:获取VENC编码码流、传输。
2024-07-25 10:17:15
612
原创 rv1126利用rkmedia、opencv、rockx……完成人脸识别
视频采集、处理使用rkmedia:vi模块进行视频输入、rga模块进行视频处理人脸识别:先获取rga输出码流,再调用rkmedia的模型对人脸进行推理(线程1)打框框:opencv(线程2),且在打完框后把视频输入至venc(编码)rtsp推流:获得venc编码数据后进行rtsp推流。
2024-07-22 20:37:12
538
原创 win、ubuntu、开发板配置静态ip
在进行嵌入式开发时我们希望win端、ubuntu端、开发板端处于同一网段,例如我设置的:开发板:192.168.1.22硬件连接:首先win端连接wifi,开发板与win使用网线连接。
2024-07-19 10:28:13
493
原创 RKmedia进行vi-vo模块
首先包含了必要的头文件,以及rkmedia底层的库static bool quit 是定义了布尔类型的变量来表示这个程序的运行状态 false表示没停止 true表示停止fprintf: 这一行将接收到的信号编号打印到标准错误流(stderr: 这行代码将全局变量quit设置为true。即表示停止程序。这里的optstr 和 long_options 分别是短选项字符串、长选项结构数组。(用于后面解析命令,在main函数的getopt_long用到)这里短选项字符串定义了?
2024-06-25 14:42:52
632
原创 qt把虚拟键盘部署到arm开发板上(imx6ull)(键盘显示不全)
home/book/qtstudy/qt-everywhere-src-5.15.2/arm-qt/bin/qmake,其中就是在qt-everywhere-src-5.15.2文件夹下,arm-qt是我编译qt源码指定的文件夹,每个人的不同需要根据具体情况看。arm-qt/plugins/platforminputcontexts(arm-qt就是我们之前安装qt的时候生成的文件夹。然后把这个库文件复制到我们开发板的安装qt的目录下。最后在qt的main函数时候使能该键盘的环境变量。
2024-05-28 16:05:21
1049
1
原创 qt与mysql数据库交互(利用navicat可视化)
MySQL的安装我看了这篇帖子,讲的很详细很好安装后可以去搜索框搜-服务-然后找到MySQL,如果没有启动的话启动一下navicat的安装直接正常下载安装即可,如果只用一次可以登录体验两周,如果想一直使用可以去搜一下如何破解。如果启动了MySQL此时navicat应该是可以双击变绿下面可以再列表中新建需要的表加入数据,其中设计表是设计整体有多少变量设计后保存再打开表即可填充数据。
2024-05-20 16:59:58
498
原创 qt操作硬件(以imx6ull为例)
下面用imx6ull的qt'点灯说明,这里要使用c++,c混合编程一、完成ui界面位置 构造一个这样的简单界面即可,主要是实现open和close的槽函数即可。我这里分别把两个按钮改名为为openbt closebt了二、实现逻辑功能2.1完成led类创建 在主文件夹led中addnew,选择c++的类,记得把base class改成qobject,取个类的名字,其余保持默认即可。完成创建后你会得
2024-05-10 10:33:29
634
原创 qt-imx6ull调试记录(触摸屏无反应)
今天调试代码不小心调到了不该调的东西,触摸屏无反应了(可显示),而且我发现/dev/input/event1也不见了,即压根没识别到触摸屏,但是还能显示qt界面也是很神奇,调了半天环境变量、……都没有用,最后甚至tslib测试程序都跑不了了,我严重怀疑是tslib库、环境变量哪里设置错了。再配置环境变量后就可以使用触摸屏了!
2024-05-09 20:05:32
515
原创 qt移植到imx6ull运行(qt部署到imx6ull)
这个事情对于小白来说确实不是很友好,会经常出现错误,我弄了两天终于弄好了我主要参考了这两个教程。
2024-05-08 15:23:09
1026
1
原创 QT如何显示一张图片
首先在ui设计界面中选入label组件label是我们载入图片的容器在总体工程的文件夹点击右键选择add new选择添加qt 资源文件设置名称后完成,会生成一个qrc文件,在resources文件夹下选择 open in editor 在资源管理器中打开选择add prefix 再选择add files选择需要加入的图片,保存右键ui中的label,编辑样式表,添加资源,选择border-image,在里面可以找到我们加入的图片。
2024-04-29 15:50:49
593
原创 QT如何实现换页
如何我们可以设计新的ui,在之前的ui(widget)的头文件中包含新的ui(form)的头文件,并在public中定义新的类即Form *f。首先我们需要新建一个ui,选择左上角文件->新建文件->选择QT中的QT设计师界面类。即关闭老的界面,打开新界面,这样即可实现界面的转换。在老ui的widget.cpp中初始化form类。在页面1我们如何实现点击按钮进入下一个界面?一路默认,当然也可以修改文件名。
2024-04-29 15:00:19
333
原创 QT之udp通信
udp通信被认为是不可靠的通信因为其不关心数据有没有成功发送,它只需要知道对方的ip地址以及端口号即可发送数据,在udp协议中没用服务器和客户端的概念。
2024-04-29 10:38:22
902
原创 QT实现tcp通信
接受框:Group Box+Plain Text Edit 设置为readonly端口号:Line Edit发送窗口:Line Edit其余按钮:Push Button。
2024-04-26 16:39:46
495
1
原创 QT实现串口助手
选择Qt Widgets Application,输入名称选择路径(不要出现中文),define build system选择默认的qmake下一步中的bass class选择QWidget,其余配置均按照默认即可,完成项目创建下面对forms文件夹下面的widget.ui文件进行编辑。
2024-04-25 21:05:07
1630
原创 spi总线驱动模型-linux
spi分为了电源线、地线、MOSI、MISO、SCLK、CS、DC线MOSI:m即master主设备的意思s即slave从设备的意思,因此mosi就是主设备输出数据从设备接收数据MISO:相反的,主设备接收数据,从设备发送数据SCLK:时钟线,不同的spi设备的频率是不同的,我们可以在设备树中指定频率CS:片选引脚,比如一个spi1节点下有A、B两个spi设备,那我用哪个我就需要先使用片引脚进行选择。
2024-04-23 20:56:37
515
原创 I2C总线驱动模型-linux
i2c_driver中的driver中的of_match_table中的compatible进行匹配设备节点时候,我们也需要构建并初始化一个id_table(可以胡乱填充),这点在韦东山老师的直播课程中有调试过,这是内核的bug,如果没有id_table即使compatible匹配也无法进入probe函数。(这里第四个内容是一个地址,因为我们不可能只写一个字节啊,因此一个变量肯定是不可以表示的,我们需要一个地址指向我们的字节,再配合长度完成写),需要注意的是数据是一个unsigned char类型。
2024-04-18 19:48:02
853
原创 C语言的小问题
在驱动程序种实现ioctl中使用arg来接受这个地址,那么unsigned int *usr_buf = (unsigned int *)arg就是定义了一个指针usr_buf指向了arg内容的那个位置。那么在函数传输的时候是不是可以用long类型来接指针的地址呢?应用程序ioctl里的buf是一个字符串的首地址。在32位机器上指针的大小都是4个字节即32位。long类型也是4字节。
2024-04-18 19:12:27
169
原创 Input子系统学习笔记
在没引入输入子系统是时候我们需要自己注册字符驱动程序、注册class、注册设备、实现file_operation结构体,但我们引入之后我们只需要分配、配置、注册输入子系统即可,再配合中断服务函数进行数据解析、数据上报。
2024-04-11 15:23:26
517
原创 c语言一些问题
开始输入的是a的地址,如果使用方法一是把a指向的位置变为1,方法二则是让a的地址等于b的地址,但在主程序中并不知道这个地址?还是什么情况反正我不太理解为什么第二个方式不对。在之后我又测试了test中b的地址和主函数中输出的a的地址并不一样。
2024-04-09 19:24:20
162
原创 ZYNQ-PS-LEDINTERRUPT
先宏定义了gpio id,中断控制器id,gpio中断id ,key ,led的引脚,并声明了中断系统函数和中断服务函数这两个函数,其次我们定义了gpio和intc这两个结构体。2.注册中断处理函数(输入了:中断类型IRQ,中断控制器,以及最开始定义的中断控制器结构体)此时输入的第三个变量和下面的第一个变量相同,应该是将两个函数关联起来的量。3.关联中断和中断源(输入:中断控制器结构体,中断源ID(此时是gpio),中断服务函数,传入中断服务函数的变量(即谁进行中断,此时是gpio))
2023-11-23 10:57:31
100
原创 ZYNQ-PS-LED
ZYNQ 使用ps端之前也需要现在vivado中配置所需要的底层硬件,例如本次需要使用vivado配置ddr,串口(检查是否报错),gpio,其中mio是多功能复用io,他是ps端所使用的io。
2023-11-21 16:00:56
99
原创 ZYNQ-FPGA-AD\DA(高速)
ADC是analog to digital converter也就是代表模拟转数字DAC是digital to analog converter是数字转模拟性能指标:通常我们关注转换速率以及分辨率两个指标转换速率:每秒可以采集多少个点分辨率:分辨率是由数据位宽决定,位宽越大越精准(例如0.21比0.2更精准)其中本次ad da实验采用串并比较型是较快的速度。
2023-11-12 18:33:55
1782
原创 ZYNQ-FPGA-RTC (实时显示时钟)
通过PCF8563模块完成实时时钟的数据产生。PCF8563具有报警功能、定时器功能、时钟输出功能以及中断输出功能。内存地址00H、01H用作控制寄存器和状态寄存器(CONTROL_STATUS);内存地址02H~08H 用作TIME 计时器(秒~年计时器);地址09H~0CH 用于报警(ALARM)寄存器(定义报警条件);地址0DH 控制CLKOUT 管脚的输出频率;地址0EH 和0FH 分别用于定时器控制寄存器和定时器寄存器。如何使用该模块实现时钟显示?
2023-11-08 09:53:50
844
原创 ZYNQ-FPGA-IIC协议及eeprom读写
IIC协议是传输中常见的协议,其包括了SCL 和SDA 两个引脚,它是一种半双工协议即可以收可以发但是不能同时进行。传输速度不高但较为简单。如上图,SCL与SDA 都连接着上拉电阻,因此当SCL、SDA空闲时候被上拉为高电平1,因此我们通常用0来表示有效。在SDA线上挂着许多元器件,这些元器件有自己的器件地址,因此主机可以通过器件地址找到设备。IIC协议的状态:1.空闲,SCL与SDA被上拉为高电平2.开始,当SCL为高电平时候,SDA 出现第一个下降沿表示起始信号。
2023-11-05 19:44:14
848
原创 ZYNQ-FPGA-LCD图片以及汉字显示
与LCD色块相比仅需调整LCD_display模块即可,因为lcd的显示内容取决于显示模块,与驱动、锁相环、顶层模块无关。显示字符:显示字符的过程其实与色块类似,就是点亮相应的像素点即可,但不可能人为的进行取模,因此需要软件取模。显示图片:显示图片比字符难一点,因为显示图片不仅需要确定显示的像素点,而且多了一个维度就是RGB888,需要先确定相应的像素点,再将色彩数据输入。
2023-10-25 14:32:03
645
原创 ZYNQ-FPGA-LCD显示色块
不同款屏幕需要根据其引脚编号进行设置驱动模块的实验。这里提供一些AX7020如果用4.3寸lcd ax430的引脚图:其实我这里没有用到lcd_bl和lcd_rst信号。
2023-10-23 19:58:10
184
1
原创 ZYNQ-FPGA-UART
1.异步信号电平检测打两拍,边沿检测打三拍2.接受和发送停止位采集方法3.波特率的理解4.uart发送数据打包结构:起始位0 数据8位 校验位(可有可无) 停止位1问题:1.仿真模块编码时候将输出定义为reg将无法运行仿真,改为wire就好了这是为啥?
2023-10-19 08:56:07
247
原创 FPGA-FIFO (包含PLL锁相环模块内容)
1.FIFO的使用2.PLL使用3.异步模块之间需要打两排4.PLL FIFO默认情况下1为复位信号(可修改)
2023-09-28 10:19:18
145
原创 FPGA——(假)双端口RAM
假双端口RAM是虽然有两个端口,但其中一个端口只负责写,一个端口只负责读。两个端口可以同时执行但是,不能发生读写冲突(同一时刻对于同一个地址读、写是不允许的)
2023-09-25 15:22:37
760
原创 ZYNQ-FPGA部分之IP库 单核RAM读写数据
1.verilog语言编码能力:需要注意数据的表示,已经定义位宽的数据后面调用要注意位宽一致。2.IP核调用3.仿真软件的使用4.独立进行时序逻辑的分析还不懂的地方:wire类型属于与reg类型数据何时使用?
2023-09-21 15:09:36
394
原创 Linux中vfork
vfork与fork函数都是为了建立子进程但是其差别有vfork中父进程需要等待子进程运行结束后才可以运行(可以用exit函数结束子进程)vfork是直接使用父进程存储区而fork是子进程拷贝父进程存储区因此在vfork中子进程改变变量会影响父进程...
2022-01-17 10:21:17
567
原创 Linux中fork()函数
fork是用来建立子进程的函数其形式为 fork(void)当代码执行到fork后,系统变有两个进程都会执行下面的语句,但是两个进程pid号是不一样的。fork的返回值:父进程中返回值是子进程的pid号,而子进程返回的是0。fork常用于服务器...
2022-01-17 09:53:10
582
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人