应用编程
文章平均质量分 85
Ao_Richard
个人学习理解笔记
展开
-
运用海康SDK发生的的错误代码分析
修改完第一个结构体类型后,再修改它的结构体成员,并在后面sprintf_s的传参中传入char* pcImagePath类型的参数;SaveImageToFile函数需要的参数类型为MV_SAVE_IMAGE_TO_FILE_PARAM_EX。关于文件路径参数可以按自己的实际情况修改,至此修改完成。时出现保存图片的错误,可以此篇为参考修改。可能也有朋友在使用这位大佬的代码。因为在下面第349行代码中。原创 2024-08-21 20:48:39 · 368 阅读 · 5 评论 -
Linux--V4L2应用程序开发(二)改变亮度
创建一个新线程用来控制亮度,线程通过读取用户输入来增加或减少亮度值,并使用ioctl函数将新亮度值设置到视频设备。原创 2024-07-02 16:10:23 · 344 阅读 · 0 评论 -
Linux--V4L2应用程序开发(二)获取数据
ioctl VIDIOC_REQBUFS:申请buffer,APP可以申请很多个buffer,但是驱动程序不一定能申请到ioctl VIDIOC_QUERYBUF和mmap:查询buffer信息、映射如果申请到了N个buffer,这个ioctl就应该执行N次执行mmap后,APP就可以直接读写这些bufferioctl VIDIOC_QBUF:把buffer放入"空闲链表"如果申请到了N个buffer,这个ioctl就应该执行N次ioctl VIDIOC_STREAMON:启动摄像头。原创 2024-06-28 16:20:16 · 804 阅读 · 0 评论 -
Linux--V4L2应用程序开发(一)数据采集及问题
Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。(Video4Linux2)是 Linux 内核中用于捕获视频数据的框架和 API。它提供了一套标准化的接口,方便开发者与各种视频硬件设备进行交互,并支持丰富的视频格式和功能。通过使用 V4L2,开发者可以构建高效的视频捕获和处理应用程序。方式(mmap)、方式(read)和。内存映射的方式采集速度较快,一般用于连续视频数据的采集,实际工作中的应用概率更高;原创 2024-06-24 16:45:48 · 1452 阅读 · 0 评论 -
Linux--视频推流及问题
方案一:·mjpg-streamer,它运行在ARM板上·在手机上使用浏览器直接观看视频方案二:推流端(Fmpeg)--rtmp-->Nginx(流媒体服务器)--rtmp/httpflv/hls-->浏览器、播放器此篇文章记录方案二的具体细节。原创 2024-06-20 21:30:35 · 1337 阅读 · 0 评论 -
音视频的编解码基础总结
日常生活中我们会遇到各种后缀的音视频文件,比如:avi,rmvb,mp4,flv,mkv等等,这些后缀名代表的其实是一种,何为封装格式?就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难能看出具体使用了什么。总的来说,不同的封装格式之间差距不大,各有优劣。原创 2024-06-18 15:34:50 · 1467 阅读 · 0 评论 -
Linux--(三)MQTT协议参数
QoS是的缩写,所以中文名便是服务质量。一个物联网通信中有些信息非常重要,我们需要确保这类重要信息可以准确无误的发送和接收,而有些信息则相对不那么重要,这类信息如果在传输中丢失不会影响系统的运行;QoS 便用于告诉客户端或服务器哪些信息是重要信息,需要准确无误的传输、不可丢失;哪些信息不是那么重要,即使在传输过程中丢失也无妨!MQTT设计了一套保证消息稳定传输的机制,包括消息应答、存储和重传。在这套机制下,提供了三种不同级别的 QoS),也就是MQTT协议有三种服务质量等级:⚫。原创 2024-06-17 16:10:39 · 812 阅读 · 0 评论 -
Linux--MQTT(二)通信基本原理
订阅”信息这一操作很像我们在使用微信时“关注”了某个公众号,当公众号的作者发布新的文章时,微信官方会向关注了该公众号的所有用户发送信息,告诉他们有新文章更新了,以便用户查看。而对于订阅消息的客户端来说,可通过订阅“主题”来订阅消息,这样当其它客户端或自己(当前客户端)向该主题发布消息时,MQTT 服务端就会将该主题的信息发送给该主题的订阅者(客户端)。只有在客户端订阅该主题后,服务端接收到该主题的新消息时,服务端才会将最新接收到的该主题消息推送给客户端。客户端要想接收消息,首先要订阅该消息的主题。原创 2024-06-15 15:15:00 · 961 阅读 · 0 评论 -
Linux--MQTT(一)简介
MQTT 5.0 在 MQTT 3.1.1 的基础上增加了许多新功能和改进,使协议更加灵活、健壮和适应现代物联网应用的需求。这些改进包括属性机制、改进的错误报告、共享订阅、会话和消息的过期间隔、用户自定义属性、流量控制、增强的订阅选项以及具体的断开原因码等。通过这些特性,MQTT 5.0 提供了更强的可扩展性和可管理性,适用于更加复杂和多样化的应用场景。原创 2024-06-14 23:01:46 · 1097 阅读 · 1 评论 -
Linux信号基础
也可以把它称为软件中断。信号与硬件中断的相似之处在于能够 打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟。大多数情况下,是无法预测信号达到的准确时间,所以,信号提供了一种处理异步事件的方法。总的来看,信号的目的都是用于通信的,当发生某种情况 下,通过信号将情况“告知”相应的进程,从而达到同步、通信的目的。信号由谁接收就由谁处理,当信号到达后,进程会对信号进行相应的处理,处理方式有3种。1)忽略该信号 2)捕获信号,进程收到信号后执行预先绑定好的信号处理函数。原创 2024-06-10 16:21:55 · 580 阅读 · 0 评论 -
文件属性与目录
符号链接文件( link )类似于 Windows 系统中的快捷方式文件,是一种特殊文件,它的内容指向的是另 一个文件路径,当对符号链接文件进行操作时,系统根据情况会对这个操作转移到它指向的文件上去,而不是对它本身进行操作,譬如,读取一个符号链接文件内容时,实际上读到的是它指向的文件的内容。,链接文件可以通过这个路径找到被链接的源文件,它们之间类似于一种“主从”关系,当源文件被删除之后,软链接文件依然存在,但此时它指向的是一个无效的文件路径,这种链接文件被称为悬空链接。,当系统关机时,设备文件都会消失;原创 2024-06-08 10:44:07 · 835 阅读 · 0 评论 -
Linux--标准IO库
从图中自上而下,1)首先应用程序调用标准I/O库函数将用户数据写入到stdio缓冲区中,stdio缓冲区是 由 stdio库所维护的用户空间缓冲区。2)针对不同的缓冲模式,当满足条件时,stdio库会调用文件I/O(系统 调用 I/O)将stdio缓冲区中缓存的数据写入到内核缓冲区中,内核缓冲区位于内核空间。3)最终由内核向磁 盘设备发起读写操作,将内核缓冲区中的数据写入到磁盘(或者从磁盘设备读取数据到内核缓冲区)。应用程序调用库函数可以对stdio。原创 2024-06-07 15:51:31 · 1247 阅读 · 0 评论 -
Linux--Socket编程基础
套接字(socket)是Linux下的一种进程间通信机制(socket IPC), 使用 socket IPC可以使得在不同主机上的应用程序之间进行通信(网络通信),当然也可以是同一台主机上 的不同应用程序。socket IPC通常使用客户端服务器这种模式完成通信,多个客户端可以同时连接到服务器中,与服务器之间完成数据交互。内核向应用层提供了socket接口,对于应用程序开发人员来说,我们只需要调用socketsocket是应用层与TCP/IP。原创 2024-06-02 21:52:59 · 1098 阅读 · 0 评论 -
Linux--网络通信(一)概述
它是体系结构中的最高层,直接为用户的应用进程(例如电子邮件、 文件传输和终端仿真)提供服务。但是实时应用通常不希望过分的延迟报文段的传送,且能容忍一部分数据丢失。,每个数据包都要确保可靠传输,当它出错时就重传,这会导致后续的数据包被阻滞,视频效果反而不好。无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供“:面向连接的,数据传输的单位是报文段,能够提供可靠的交付。向它的应用程序提供了面向连接的服务。,偶尔的丢包、偶尔的花屏时可以忍受的;2)无需建立连接,不会引入建立连接时的延迟。原创 2024-05-20 13:21:57 · 772 阅读 · 0 评论 -
应用编程之线程(二-同步篇)
线程的主要优势在于,资源的共享性,譬如通过全局变量来实现信息共享,不过这种便捷的共享是有代价的,那就是多个线程并发访问共享数据所导致的数据不一 致的问题。一、为什么需要线程同步线程同步是为了对共享资源的访问进行保护。保护的目的是为了解决数据一致性的问题。出现数据一致性问题其本质在于进程中的多个线程对共享资源的并发访问(同时访问)。二、互斥锁互斥锁(mutex)又叫互斥量,从本质上说是一把锁,在访问共享资源之前对互斥锁进行上锁,在访问完成后释放互斥锁(解锁)。互斥锁使用。原创 2024-04-21 15:20:27 · 716 阅读 · 0 评论 -
应用编程之线程(一)
⚫串行:一件事、一件事接着做⚫并发:交替做不同的事;⚫并行:同时做不同的事。原创 2024-04-20 16:35:40 · 555 阅读 · 0 评论 -
应用编程之进程(三-通信篇)
所谓进程间通信指的是系统中两个进程之间的通信,不同的进程都在各自的地址空间中、相互独立、隔离,所以它们是处在于不同的地址空间中,因此相互通信比较难,Linux内核提供了多种进程间通信的机制。大部分的程序是不要考虑进程间通信的,因为大家所接触绝大部分程序都是单进程程序(可以有多个线程),对于一些复杂、大型的应用程序,则会根据实际需要将其设计成多进程程序,譬如GUI、服务区应用程序等。在一些中小型应用程序中通常不会将应用程序设计成多进程程序,自然而然便不需要考虑进程间通信的问题总结如下:⚫。原创 2024-04-20 13:04:08 · 878 阅读 · 0 评论 -
应用编程之进程(二)
当子进程的工作不再是运行父进程的代码段,而是运行另一个新程序的代码,那么这个时候子进程可以通过 exec函数来实现运行另一个新的程序。系统调用execve()可以将新程序加载到某一进程的内存空间,通过调用execve()函数将一个外部的可执 行文件加载到进程的内存空间运行,使用新的程序替换旧的程序,而进程的栈、数据、以及堆数据会被新程序的相应部件所替换,然后从新程序的 main()函数开始执行。对execve()原创 2024-04-20 12:25:57 · 802 阅读 · 0 评论 -
应用编程之进程(一)
操作系统下的应用程序在运行main()函数之前需要先执行一段引导代码,最终由这段去调用应用 程序的 main()函数,我们在编写应用程序的时候,不用考虑引导代码的问题,在编译链接时,由将引导代码链接到我们的应用程序当中,一起构成最终的可执行文件。再来看看argc和argv传参是如何实现的呢?譬如,这两个参数arg1和arg2是如何传递给应用程序的 main函数的呢?当在终端执行程序时,命令行参数(shell进程逐一进行解析,shell。原创 2024-04-19 21:53:13 · 781 阅读 · 0 评论