自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixin_44651073的博客

分享日常学习

  • 博客(222)
  • 资源 (4)
  • 收藏
  • 关注

原创 STL标准模块库操作

它的作用是提前分配好内存,以避免在后续添加元素时反复扩容(扩容通常需要复制全部元素,开销很大)。最通用的方法,用于将一个或多个元素插入到容器的指定位置(对于序列容器如 vector)或直接插入(对于关联容器如 set, map)。重要:reserve() 只改变容器的 capacity(容量),不改变 size(实际元素个数)。特点:连续内存,支持随机访问,尾部插入/删除快,中间/头部慢。特点:非连续内存,不支持随机访问,任何位置插入/删除都快。特点:分段连续内存,支持随机访问,头尾插入/删除都快。

2026-06-11 11:43:54 186

原创 GB28181码流线程封装PS流

后续 IDR:is_idr=1,但不再拼 SPS/PPS,只用 FIFO 里当前 IDR 数据(PS muxer 会话里参数集已建立),后面。sent_first_keyframe) 整块跳过:P 帧:is_idr=0,不再 continue,直接往下走 PS 发送。rtp_send_ps_payload:每个 PS 包 → 多个 RTP/UDP(1200B 一片)ps_muxer_create 失败 → free(c), video_is_ps=0。// 单 RTP 负载上限。

2026-06-03 20:25:46 30

原创 GB28181信令交互函数调用

设备平台invite交互过程

2026-06-02 20:25:23 129

原创 GB28181启动传参的设计

3.s->cfg = *cfg:浅拷贝(指针仍指向外面)整型(server_port、local_port…)已正确在 s->cfg 里。配置参数进行赋值拷贝,c_str() 指向 std::string 内部缓冲区,该缓冲区必须在整个 SIP 运行期间有效。gb28181::start 里:c.server_ip = g_cfg.server_ip.c_str();→ cfg 里的指针指向 g_cfg 的 string 缓冲区(不是 SIP 自己的内存)。start()函数里面创建了------>

2026-06-02 19:46:31 33

原创 RTSP码流中fifo结构

一个GOP往往会在IDR 前再带一次SPS/PPS,不等于每个 GOP 都会“更新”一套新参数,只有分辨率/profile/码率结构等变了时,SPS/PPS的 字节内容才会变;包含了以下内容:1 个 IDR(I)+ 中间若干 P(可能有 B);GOP 开头往往还有 SPS、PPS(有时 SEI),中间 P 帧一般 不再带 SPS/PPS。发送时各模块从同一队列 按序 read,再各自决定是缓存(SPS/PPS)、拼接还是只推 I/P。P 帧(type=1)若小于 MTU → 单包;关键帧(可独立解码)

2026-06-02 14:32:44 22

原创 封装RTP头部细节实现

HandleFrame里面实现真正封RTP、触发发送的是。下面按调用链说明封装细节。确定FIFO数据是Annex-B:前4字节 00 00 00 01。RTP 负载里不带起始码,需要从NAL 头第一个字节开始。需要跳过前四个字节。

2026-06-02 11:19:56 21

原创 Webrtc本端发candidate给对端

前也有这两行),属于 SDP 内嵌候选;单独发的那两次 JSON 是 Trickle ICE,让对端不必等整份 SDP就能先加候选。,srflx 那条 candidate);第一条 host 往往更早或几乎同时,取决于库枚举网卡的顺序。第一条candidate和第二条candidate内容。—— 经 STUN 看到的 NAT 反射公网地址。—— 经 STUN 看到的 NAT 反射公网地址。还会再带一遍(offer 里在。—— 本机网卡上的地址(如。—— 本机网卡上的地址(如。之后很快就会出现(先。

2026-05-15 13:43:11 120

原创 Webrtc本端和对端信令交互步骤

在官方库函数中,进入handle_signaling_message后开始解析msg消息结构体中的type,解析后会有三种type == "request",type == "answer",type == "candidate"当对端发送request。

2026-05-15 11:22:29 515

原创 Webrtc信令交互

TX type=candidate(no sdp field) 是因为这条消息里没有 **sdp** 字段,只有 **candidate`。这段日志里,answer 之后没有再打 RX candidate,说明对端候选可能都编在 SDP 里,或 ICE 已够用。video track open:Track 已可用,设备开始 sendFrame(并 IDR)。:如果上述所有直接连接的尝试都失败了(例如,任何一方处于严格的对称型NAT之后),ICE就会。之后 ICE/DTLS 继续,直到 Connected。

2026-05-14 17:51:53 554

原创 wvp-GB28181服务器网页报错调试

你现在的状态,前端报错里的 404 根因已消除,剩下是鉴权:页面需要先登录,或接口调用时带上会话/token。直接修复(最短路径),把 8080 的配置文件改成唯一默认 server,并明确包含。这是 前端网关/代理路径不匹配 或 后端版本接口变更:前端代码还在调。你当前后端(WVP-Pro)不提供这个路径(或被代理到错误目标)不是账号问题,是 nginx 上 8080 的生效。代理(或命中了另一个 8080 server)。这就是你页面报错的直接原因(后面的。(把路径换成你第2步查到的实际文件)

2026-04-27 09:36:22 119

原创 linux查看静态库的平台属性

平台编译的库使用ubantu默认编译链,但是上层的音视频代码是海思编译链编译,导致报错。可以用下面命令查看库的编译链属性。

2026-04-16 19:21:21 44

原创 MPEG-TS 封装的核心逻辑

TS 封装中最核心的部分,负责将 PES 负载数据分片写入 TS 包。如果缺少 SPS/PPS:解码器无法初始化,画面无法解码,如果缺少 IDR 帧:解码器没有解码起点,只能等下一个 IDR。如何将一个完整的 PES 负载数据(如包含 SPS、PPS、IDR 帧数据)分片封装成多个 188 字节的 TS 包。计算已使用空间(used = 基础头部(6/12) + PES头+AUD(18) + 负载数据(copySize))如果直接发送 P 帧或 B 帧,解码器会因为缺少参考帧而无法解码,导致花屏或黑屏。

2026-04-14 20:06:20 315

原创 SRT协议封装MPEG-TS 流的视频和音频TS头结构

是 TS 包中最核心的部分,承载了包同步、流标识、加扰、连续性计数等关键信息。解码器检查连续性:若连续两个同 PID 包计数器差不为 1(且非上述情况),则检测到丢包。作用:指示当前 TS 包的有效负载是否包含 PES 包或 PSI 表的起始。作用:由解调器或信道解码器置 1,表示该包在传输中损坏,解码器应丢弃该包。作用:4 位循环计数器,从 0 到 15 递增,用于检测丢包。作用:最重要的字段,标识该 TS 包属于哪个流。作用:TS 包的同步标识,解码器通过搜索。,且 TS 包负载的第一个字节是。

2026-04-09 16:18:31 460

原创 SRT协议封装MPEG-TS 流的视频和音频PES头结构

PES(Packetized Elementary Stream,分组化基本码流)头部是 MPEG-TS 封装中的关键部分,位于 TS 包的负载中,承载了音视频帧的解码和显示时间戳(PTS/DTS)等核心信息。

2026-04-09 14:44:37 426

原创 SRT协议封装MPEG-TS 流的PAT表和PMT表结构

PAT(节目关联表)和 PMT(节目映射表)是 MPEG-TS 流中两个最核心的元数据表。简单来说,,而。解码器必须先从 PAT 中找到 PMT 的位置,再通过 PMT 找到具体的音视频流。

2026-04-09 11:48:48 404

原创 802.11 无线WiFi管理帧

802.11 无线WiFi管理帧: 管理数据包控制网络的管理功能,1) 信标帧(Beacons): 在无线设备中,定时依次按指定间隔发送的有规律的无线信号(类似心跳包),主要用于定位和同步使用2) 解除认证(Deauthentication)数据包802.11其它帧结构见上文。

2025-10-20 10:05:18 741

原创 IEEE 802.11无线wifi帧结构

在某些帧 (如 Power Save Poll 帧)中,Duration/ID 字段包含的是站点的 Association ID (AID)身份标识,这是一个由接入点 (AP) 分配给每个关联站点的唯一标识符。片段号用于标识帧的分片部分。//Disassociation/Deauthentication帧,Probe Request/Response帧, Probe Response(检测应答)帧, IBSS 的ATIM帧, Authentication帧等,其余帧结构后续补充。指示关联请求的处理结果。

2025-10-18 16:49:19 1286

原创 Linux网络设备驱动—netlink

建立 netlink 套接字函数在成功的时候,返回一个 structure sock 指针类型的值,之后可以用这个值对 netlink 套接字进行处理;当返回值为 NULL 的时候,套接字建立失败了,需要进行资源的释放。netlink_kernel_create 是 Linux 内核中的一个函数,主要用于创建 Netlink 套接字,以便于内核与用户空间的通信。向skb缓冲区中获取消息头空间并且初始化netlink消息头,入参中的第5个参数为netlink消息头的总空间。

2025-09-16 09:13:46 769

原创 Linux网络设备驱动—网络连接状态和从参数设置

网络设备驱动 可以通过netif_carrier_on()和netif_carrier_off()函数改变设备的连接状态,如果驱动检测到连接状态发 生变化,也应该以netif_carrier_on()和netif_carrier_off()函数显式地通知内核。只是列出了net_device_stats包含的主项目统计信息,实际上,这些项目还可以进一步细分,net_device_stats中的其他信息给出了更详细的子项目统计,详见Linux源代码。具体的设备是否接受这 些信息的修改,要视硬件的设计而定。

2025-09-15 15:02:20 910

原创 Linux网络设备驱动—数据收发

网络设备接收数据的主要方法是由中断引发设备的中断处理函数,中断处理函数判断中断类型,如果 为接收中断,则读取接收到的数据,分配sk_buffer数据结构和数据缓冲区,将接收到的数据复制到数据缓 冲区,并调用netif_rx()函数将sk_buffer传递给上层协议。napi_schedule()函数被轮询方式驱动的中断程序调用,将设备的poll方法添加到网络层的poll处理队列中,排队并且准备接收数据包,最终触发一个NET_RX_SOFTIRQ软中断,从而通知网络层接收数据包。

2025-09-15 14:15:03 831

原创 Linux网络设备驱动结构

Linux系统对网络设备驱动定义了4个层次,这4个层次为网络协议接口层网络设备接口层、提供实际功能的和。

2025-09-15 13:43:51 1346

原创 LINUX中USB驱动架构—USB驱动程序框架

open()成员函数的实现非常简单,它根据usb_driver和次设备号 通过usb_find_interface()获得USB接口,之后通过usb_get_intfdata()获得接口的私有数据并赋予file- >private_data。usb_register_dev(interface,&skel_class)中的第二个参数skel_class包含了字符设备的 file_operations结构体指针,而这个结构体中的成员实现也是USB字符设备的另一个组成成分。在usb_driver的。

2025-09-13 10:29:18 427

原创 LINUX中USB驱动架构—探测和断开

对于字符设备而言,usb_class_driver结构体的fops成员中的write()、read()、ioctl()等函数的地位完全等同于字符设备中的file_operations成员函数。如果是其他类型的设备,如tty设备,则调用对应设备的注册函数。在USB设备驱动usb_driver结构体的probe()函数中,应该完成如下工作。在USB设备驱动usb_driver结构体的probe()函数中,应该完成如下工作。对于其他类型的设备,如tty设备,则调用对应设备的注销函数。

2025-09-13 09:21:04 292

原创 LINUX中USB驱动架构—URB请求块

USB本身所属设备驱动的结构与其挂不挂在USB总线上没什么关系,但是据此在访问方式上却有 很大的变化,例如,对于USB接口的字符设备而言,尽管仍然是write()、read()、ioctl()这些函数,但是在这些函数中,贯穿始终的是称为URB的USB请求块。

2025-09-13 09:07:21 755

原创 LINUX中USB驱动架构—设备驱动

usb_device_id数组,usb_device_id结构体包含有USB设备的制造商ID、产品ID、产品版本、设备类、接口类等信息及其要匹配标志成员match_flags(标明要与哪些成员匹配,包含DEV_LO、DEV_HI、DEV_CLASS、DEV_SUBCLASS、DEV_PROTOCOL、INT_CLASS、INT_SUBCLASS、INT_PROTOCOL)。usb_driver结构体中的id_table成员描述了这个USB驱动所支持的USB设备列表,它指向一个。

2025-09-12 19:39:52 386

原创 LINUX中USB驱动架构—主机驱动

USB采用树形拓扑结构,主机侧和设备侧的USB控制器分别称为主机控制器(Host Controller)和USB 设备控制器(UDC),每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设备不能主 动向主机发送任何消息。从主机侧去看,在Linux驱动中,处于USB驱动最底层的是USB主机控制器硬 件,在其上运行的是USB主机控制器驱动,在主机控制器上的为USB核心层,再上层为USB设备驱动层 (插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱 动包括两

2025-09-12 17:11:28 1063

原创 开发板烧写命令和系统启动参数设置

sf probe 0 —— 选择spi0作为下载方式,这里代表为以spi方式下载,因为使用的是spi flash。sf write 0x40000000 0x0 0x90000 把SDRAM地址 0x40000000 处 0x90000( Flash.img大小为576kb)的数据烧写到 flash 的 0 偏移地址。root=/dev/mtdblock2 — 跟文件系统在第2个分区(分区从0开始算起),第0个分区是uboot,第1个分区是kernel,第2个分区为文件系统;

2025-09-12 13:46:40 472

原创 linux系统启动时脚本命令执行

Linux内核启动过程中,会挂载文件系统,在文件系统挂载后,运行的第一个程序就是根目录下的linuxrc,而这是一个指向/bin/busybox 的链接,也就是说,系统起来后运行的第一个程序就是busybox本身。再然后,busybox会解析“/etc/inittab”配置文件,而/etc/inittab配置文件里面会运行/etc/init.d/rcS这个脚本!这句话的意思是遍历/etc/init.d/下的以名称为S开头的,紧接着是数字0-9,再紧跟着还是数字0-9,再往后有多少字符不限制的文件。

2025-09-11 17:56:28 420

原创 SPI设备驱动

申请或者 定义一个spi_driver,然后初始化spi_driver中的各个成员变量,当SPI设备和驱动匹配以后,spi_driver下的probe函数就会执行!构建spi_transfer,然后将其打包到spi_message里面,需要使用spi_message_init初始化spi_message,然后在使用spi_message_add_tail将spi_transfer添加到spi_message里面,最终使用spi_sync和spi_async来发送。:与SPI设备对应的SPI驱动。

2025-09-11 11:08:52 935

原创 Linux设备驱动中的并发控制(一)

该宏用于定义并初始化一个名为name的等待队列元素。4.添加/移除等待队列add_wait_queue()用于将等待队列元素wait添加到等待队列头部q指向的双向链表中,而 remove_wait_queue()用于将等待队列元素wait从由q头部指向的链表中移除。

2025-09-10 17:25:27 885

原创 富瀚MC632X jffs2文件系统制作

根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文 件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载 (mount。目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。中的文件应该是 只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。

2024-11-08 16:09:01 1473 2

原创 LINUX底层命令sed

sed -i 'Nc 替换内容' filename //替换第N行内容。一般在底层要替换某内容,很少打开该文件确认位置再用这个命令。替换一个文件中的部分内容。

2024-11-01 09:12:00 369

原创 LINUX I2C适配器驱动编写

i2c_imx_start、i2c_imx_read、i2c_imx_write 和 i2c_imx_stop 这些函数就是 I2C 寄存器的具 体操作函数。当设备和驱动匹配成功以后 i2c_imx_probe 函数就会执行,i2c_imx_probe 函数 就会完成 I2C 适配器初始化工作。第 1008~1013 行,imx_i2c_struct 结构体要有个叫做 adapter 的成员变量,adapter 就是 i2c_adapter,这里初始化i2c_adapter。

2024-10-30 16:07:25 961

原创 LINUX IIC总线-设备驱动框架

I2C 设备驱动文件

2024-10-30 15:11:50 1467

原创 DDR内存和Flash内存

NAND 闪存的存储单元则采用串行结构,存储单元的读写是以页和块为单位来进行(一页包含若干字节,若干页则组成储存块, NAND 的存储块大小为 8 到 32KB ),这种结构最大的优点在于容量可以做得很大,超过 512MB 容量的 NAND 产品相当普遍, NAND 闪存的成本较低,有利于大规模普及。由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。通常称为闪存,也是内存器件的一种。

2024-10-29 11:43:13 795

原创 LINUX总线-设备-驱动匹配

根据总线-驱动-设备驱动模型,IIC、SPI、USB这样实实在在的总线是完全匹配的,但是要有一些外设是没法归结为具体的总线:比如定时器、RTC、LCD等。为此linux内核创造了一个虚拟的总线:platform总线。根据驱动的分离与分层衍生出了总线(bus)-驱动(driver)-设备(device)驱动框架。设备:设备属性,包括地址范围、如果是IIC的话还有IIC器件地址、速度......总线代码我们不需要编写,linux内核提供给我们使用的。向总线注册设备的时候,使用。驱动:是具体的设备驱动。

2024-10-29 09:36:51 861

原创 GB28181信令交互和推流代码实现

其中,信令1、8、9、10、11、12为SIP服务器接收到客户端的呼叫请求后通过 B2BUA 代理方式建立 媒体流接收者与媒体服务器之间的媒体流信令过程,信令2~7为SIP服务器通过三方呼叫控制建立媒 体服务器与媒体流发送者之间的媒体流信令过程,信令13~16为媒体流接收者断开与媒体服务器之间 的媒体流信令过程,信令17~20为 SIP 服务器断开媒体服务器与媒体流发送者之间的媒体流信令过程。19:SIP 服务器向媒体流发送者发送 BYE 消息,断开消息4、5、7建立的同媒体流发送者的Invite会话。

2024-10-28 09:51:08 2327 1

原创 strcat函数追加字符串

使用strcat函数给目标字符串追加字符时,首先要找到目标字符串中'\0'的位置,然后在'\0'的位置上向后追加源字符串。源字符串src是从目标字符串src中的'\0'位置开始追加的,同时源字符串sdest中的'\0'也一并追加了过去。

2024-10-22 10:28:21 306

原创 LINUX内核驱动-总线-设备模型

match 函数很重要,单词 match 的意思就是“匹配、相配”,因此此函数就是完成设备和驱动之间匹配的,总线就是使用 match 函数来根据注册的设备来查找对应的驱动,或者根据注册的驱动来查找相应的设备,因此每一条总线都必须实现此函数match 函数有两个参数: dev 和 drv,这两个参数分别为 device 和 device_driver 类型,也就是设备和驱动。name 表示设备名字,要和所使用的 platform 驱动的 name 字段相同,否则的话设备就无法匹配到对应的驱动。

2024-10-22 08:56:45 1197 1

原创 LINUX内核驱动异步机制

我们首先来回顾一下“中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数,在中断服务函数中做具体的处理。Linux 应用程序可以通过阻塞或者非阻塞这两种方式来访问驱动设备,通过阻塞方式访问的话应用程序会处于休眠态,等待驱动设备可以使用,非阻塞方式的话会通过 poll 函数来不断的轮询,查看驱动设备文件是否可以使用。这两种方式都需要应用程序主动的去查询设备的使用情况。

2024-10-20 22:01:43 1097

STM32F4xxx中文开发手册

本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。

2023-12-28

onvif各模块wsdl文件

​ wsdl2h 工具根据 WSDL 文件生成 C/C++ .h 头文件;soapcpp2 工具则从上面生成的头文件生成 SOAP 服务端和客户端框架代码。 ​

2023-03-15

YOLOv5实现车辆目标检测

该算法可以对输入视屏中的每一帧图片的车辆实现车辆目标的识别,具体的功能有: 1.车辆实现车辆跟踪; 2.目标的框选与识别; 3.有完整的图形显示界面,可以显示通过检测线的车辆的总数,当前的帧速率; 4.可以对车辆位置信息进行获取并进行车辆位置的输出打印。

2022-06-30

嵌入式入门第一课——嵌入式入门要点,嵌入式ubantu系统安装及常见ubantu命令(详细见后期系统编程)

嵌入式是一门软硬结合的技术。 软件指的是代码 --> C语言程序、C++程序 硬件指的是开发平台。 --> ARM开发板、STM32开发板

2022-03-15

lcd图片缩放算法.zip

参考文档 https://www.cnblogs.com/funny-world/p/3162003.html https://blog.csdn.net/baidu_37503452/article/details/73498139

2022-03-22

YOLOv5训练车辆类型识别TXT数据集

YOLOv5训练车辆类型识别TXT数据集.自己整理的车辆类型数据集 一共1400张图片,共分7个类別, 分别为Bus,Car,SportsCar,MicroBus,Truck,SUV,Jeep是TXT格式的数据集,用LabelImg工具进行标注,可以转成TFRecord格式的数据集训练效果非常完美。里面含有权重比例文件,可直接拿来训练。

2022-03-21

空空如也

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

TA关注的人

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