- 博客(38)
- 收藏
- 关注
原创 使用libwebsocket技术总结
network.http.spdy.websockets,如果不禁用,会导致libwebsocket无法建立wss连接。编译minimal-examples\ ws-server\minimal-ws-server,需要创建vc控制台工程项目,并引用websocket.dll动态库,使用/MT编译选项,编译为动态库。2) 当前libwebsocket v3.2版本需要使用openssl v1.1.x以上版本,否则ssl安全协议支持只能选择内置ssl模块,一般都选择openssl库作为ssl加密库。
2025-01-18 11:48:20
1395
原创 git命令手册
切换目标分支(以master为目标分支为例)# 使用 rebase 重新整理提交历史。# 将一个 commit 提交到新的分支。# 拉取仓库master分支的最新版本。# 在master分支下创建分支。#创建本地分支跟踪远程分支并切换。# 查看提交历史的图形化形式。# 编辑 Git 配置文件。# 恢复某个文件的某个版本。# 合并多个提交为一个提交。#取消最近的commit。#查看所有的git配置项。#关闭文件权限的提交。
2025-01-16 17:04:02
341
原创 实现linux硬盘smart检测
SkDisk *d 要操作的硬盘对象 这个是通过sk_disk_open(const char *name, SkDisk **d)获取的。SkSmartAttributeParseCallback cb 回调函数指针, 处理每个解析后的 SMART 属性的回调函数。const SkSmartParsedData **data 解析后的 SMART 数据。的指针,包含一个 SMART 属性的解析结果。:用户自定义的数据,直接传递到回调函数中。SkDisk *d 要操作的硬盘对象。
2025-01-16 16:51:56
673
原创 RV1126采集VI视频数据流
这个章节主要是讲解如何通过RKMEDIA的API获取RV1126的VI视频流,虽然这部分在之前的课程里面讲解了很多次,但还是要带着大家回顾一下这部分代码。)、第二个参数:通道号ID(这里填0,因为RGA模块创建的通道号是0)、第三个参数:VI码流的缓冲数据。死循环获取VI码流的数据,这里的模块号是RK_ID_VI,通道号是CHN_ID:0,第三个参数:-1阻塞获取。去设置VI模块,设置完VI模块则需要对其进行使能。VI模块捕捉视频的类型,这里默认填写MMAP。VI模块的id号,用于初始化和使能VI模块。
2024-09-11 09:04:19
1265
1
原创 RGA模块的讲解
stImgIn是视频输入的结构体,stImgOut是处理后的视频结构体。由于网页显示的图像是RGB的彩色图像,所以我们需要使用RGA模块把NV12的灰度图像转换成RGB的彩色图像。),最后把RGA的数据赋值到共享内存里面,代码是(共享内存的内容下节课讲解)。视频输入的分辨率虚宽,虚宽的数值跟分辨率宽度数值一致都是1920。视频输入的分辨率虚高,虚高的数值跟分辨率高度数值一致都是1080。视频输出的分辨率虚宽,虚宽的数值跟分辨率宽度数值一致都是1920。上面是RGA模块初始化的代码,这里使用的结构体是。
2024-09-11 08:59:04
542
原创 共享内存的使用
这是Linux共享内存的创建函数,调用该函数后Linux的内核就可以申请一块内存,并且共享内存是以”页”作为单位,一页等于4KB = 4096bytes,所以在创建共享内存的时候大小最好是4KB的整数倍。shmctl是删除共享内存的方法,它可以将共享内存的状态标记为删除状态。值得注意的是,当共享内存被标识为删除状态后,它不会被马上删除,直到所有进程全部和共享内存全部解除关联,才会彻底被删除。当进程不需要操作共享内存,可以让进程之间和共享内存解除关联,进程推出之后,就结束进程和共享内存关联就自动解除。
2024-09-02 10:20:11
1107
原创 CA证书说明与使用
对于私钥/公钥的文件后缀有时候用 key/crt,有时候用 pem,其实这不重要,重要的是文件中的内容格式。主要功能为:证书发放、证书更新、证书撤销和证书验证。生成CA证书之后可以直接部署在服务器上,也可以通过下面的步骤,用CA证书签署服务器公钥生成服务器证书,然后部署到服务器上。2、CA机构对请求文件进行身份确认,邮箱、第三方数据库、当面认证和身份确认等,根据身份认证等级来划分不同的认证方式。通过openssl生成证书,需要生成CA密钥对和CA证书,而第三方CA机构颁发只需要提供一个请求文件即可。
2024-09-02 10:02:49
5068
原创 linux下QOS:应用篇
Linux采用了基于对象的实现方法,qos还能保证对不同接口采用不同的策略,TC QOS有很多拥塞控制的机制默认的是FIFo还有其他PQ、CQ、WFQ等.策略类用结构体:Qdisc_ops表示。每个设备可以采用不同的策略对象,在设备和对象的关联需要到Qdisc结构体。并且在上一节我们已经讲了tc的三级树型组织.这里不再贴图. 还有一点注意的就是tc控发不空收.
2024-08-16 10:58:06
1277
原创 linux下QOS:理论篇
关于qos ,也是linux下面必备功能之一,一般只需要结合iptables/etables/iproute2 和tc配合即可实现大部分功能. 网上讲这么方面的资料很多,大部分都讲tc命令的应用.这里就先从理论入手.QoS(Quality of Service)服务质量,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。但是对关键应用和多媒体应用就十分必要。
2024-08-16 10:55:17
1352
原创 onvif技术框架介绍
在OSI网络通信模型中,RPC跨域了传输层和应用层。wsdl(Web Services Description Language,网络服务描述语言)理解起来很简单,就跟我们平时开发c语言和c++语言一样,我们要写头文件.h或者.hpp,头文件里面都是函数声明,会对这个函数做详细的注解,比如说:函数发回值、传参等等,具体是什么样子的,这个可以结合视频教程来看!没错那就是soap协议,这个协议大家可以不用去了解非常详细,比如常规说的方法:协议投+协议体,这个在做onvif开发的时候,是没有必要去了解的。
2024-08-12 15:37:27
651
原创 RTMP协议讲解
其中Message Body指的是每一个分割消息的负载部分,而每个被分割的数据块大小固定为128个字节,并且在首部加上Chunk Header就组成了一块完整的消息分块。它占用3个字节,它表示的是所在的流信息、消息长度和类型都是相同的。上面这个图是chunk basic header长度为3byte的情况,这种情况的chunk header的特点是,第一个字节的位置全部设置为1。它代表的是解析时候的实时时间戳,它最大的取值范围是0xffffff,当时间戳超过这个最大值的时候,所有字节位设置为1。
2024-08-12 09:34:03
1132
原创 h264/h265编解码专题讲解
使用帧内预测的I帧可以进行独立编解码,不受其他帧的影响,I帧可以作为P帧和B帧的参考帧。而P帧和B帧采用帧间预测,具有很大的压缩比,能够很大提高压缩率。同时,P帧可以作为其后P帧的参考帧,或者作为其前后B帧的参考帧,所以P帧可能会造成误差的扩散,往往通过周期插入I帧来阻止误差积累。一般来说,对于像h264、h265编解码器,一般会采用块级编码,也就是预先将一幅图像切割为多个像素块,一次对块内的部分或者所有的像素进行预测和编码;‘是对同一帧数据使用帧内编码和帧间编码多个编码策略。
2024-07-26 15:06:37
1277
原创 通过JNI调用librkaiq库
由于rkaiq会依赖系统的libutils.so、libcutils.so库,查看/system/etc/public.libraries.txt和/vendor/etc/public.libraries.txt文件中列举的so库,根据链接器命名空间的限制规则APP进程默认只允许打开这些系统so库(通过java调用System.loadLibrary和native调用dlopen)。
2024-07-24 15:58:09
395
原创 RkAiq(Rk Auto Image Quality)模块讲解
ISP30 包含了一系列的图像处理算法模块,主要包括:暗电流矫正、坏点矫正、3A、HDR、镜头阴影矫正、镜头畸变矫正、3DLUT、去噪(包括RAW域去噪,多帧降噪,颜色去噪等)、锐化等。ISP30包括硬件算法实现及软件逻辑控制部分,RkAiq即为软件逻辑控制部分的实现。RkAiq软件模块主要实现的功能为:从ISP驱动获取图像统计,结合IQ Tuning参数,使用一系列算法计算出新的ISP、Sensor等硬件参数,不断迭代该过程,最终达到最优的图像效果。
2024-07-24 15:43:00
2542
1
原创 一种Android系统双屏异显的两路音频实现方法
在 h a r d w a r e / l i b h a r d w a r e / 下 打 上 补 丁 D u a l _ a u d i o _ h a r d w a r e _式,这就是audio_hw_device、audio_stream_in及audio_stream_out等等存在的目的,这些。时,mHeadState的状态设置成BIT_HDMI_AUDIO;状态设置包括BIT_HDMI_AUDIO和BIT_USB_HEADSET_DGTL,目的是同时打开hdmi和speaker。
2024-07-20 10:57:50
1217
原创 RK3588 tinyalsa_hal添加一个自定义声卡输入和输出
输出流程图:在声卡列表snd_out_sound_cards里添加一个自己的声卡,比如添加一个dev_proc_info参考一下rk的speaker:将声卡添加到输出流中:根据上面的输出流程图,首先会调用adev_open_output_stream这个函数来打开要配置输出声卡,write配置为out_write最终是调用了start_output_stream函数在 read_out_sound_card函数里面获取声卡id添加到dev_out中。
2024-07-20 10:53:46
1031
原创 RK3588 Android12 移植opencv库,并在camera hal通过opencv处理图像
找到对应的编译Android.mk并加上链接opencv库,这里在rk3588里面对应的camera hal编译文件是。移植完成后,我们需要把opencv应用到camera hal中进行图像处理。最后在对应图像帧处理的地方加入我们的方法就可以了。在官网下载opencv安卓版本。
2024-07-15 20:36:34
611
4
原创 RK3588 Android12 红外遥控预览镜头缩放(数码变焦)
原Rect的宽是 rect.width(),放大到最大时 zoomRect 的宽是 rect.width() / maxZoom,因为有左右两边,所以它们的差值需要除以2,然后划分成 MAX_ZOOM 份,需要再除以 MAX_ZOOM。再简单说明一下上面的代码,因为本身maxZoom的值并不会很大,如果直接使用 1~maxZoom 的 int 值去放大缩小,画面变化就很剧烈,所以设置了一个 MAX_ZOOM = 100 去把这个过程划分成了100份,这个值可以自己设定。初始化缩放宽度和高度的最小值。
2024-07-12 11:28:19
798
原创 rk3588 Android HDMI IN热插拔解决
1、公司在使用 别的厂商的板卡遇到一个问题,开机我们的app自启就会闪退,后来定位发现是camera 的open出错了,这个问题的出现是因为没有插HDMI IN输入的问题导致的,所以需要对HDMI IN的热插拔进行检测,后面我把这个问题也顺利解决了。下面是我的尝试和使用的解决办法。3、话不多说,我用的是读取系统文件实现的,但是这个方法,需要有status文件的系统读权限,可以修改设备下的/vendor/etc/init/hw/init.rk3588.rc文件修改的权限,这个问题交给自己或者厂家协商解决。
2024-07-05 16:47:05
1225
1
原创 RK3588 Android12实现UVC输出功能详解
上述进入device模式之后,会在/dev下生成一个video节点,通过ls /sys/class/video4linux来确认节点。然后通过 javac -h命令把这个类生成一个头文件,实现头文件里声明的函数,将以上的流程添加到这个函数里,最后在对应地方调用即可。由于涉及到UVC协议和V4L2标准接口,所以通过调用JNI接口来实现UVC的功能。3、初始化节点,也就是对UVC流控制端口的配置,配置传输速率、包大小、端点序号等。在这个函数里面我们就可以通过采集摄像头的数据,来写入到UVC节点里面。
2024-07-05 16:43:24
1360
原创 RK3588 Android12将普通apk设置为launcher
添加以下内容后,就会把对应apk添加上launher属性,与在AndroidMainifest.xml中添加launcher属性是一样的效果。添加步骤一的内容,开机还是会启动一个桌面启动器来选择launcher,以下代码就是用来选择默认launcher的,更换对应的包名和类名即可。1、设置apk的launcher属性。
2024-05-06 17:25:30
756
原创 RK3588 Android 12 异显功能
两个副屏需要分别设置 persist.sys.rotation.einit-1 ,persist.sys.rotation.einit-2(属性值为0,1,2,3)这两个属性来控制对应屏幕的方向。旋转功能:双屏场景下,副屏可通过persist.sys.rotation.einit-1 (属性值为 0,1,2,3)属性设置不同的方向,例如 setprop persist.sys.rotation.einit-1 1,设置副屏旋转 90 度,设置该属性后需重启机器验证。,它的目的是显示内容到第二屏幕。
2024-04-30 17:47:31
1778
4
原创 FLV格式讲解
FLV流媒体协议是美国Adobe公司推出来的一种流媒体协议。FLV流媒体格式的特点是封装过后的音视频数据非常小、并且封装的规范相对更加简单,所以FLV流媒体格式非常适合网络传输。但是FLV格式是Adobe公司的私有协议,所以它支持的网络传输协议比较有限:如RTMP、HTTP-FLV。
2024-03-29 11:36:01
1269
1
原创 RV1126 H264/HEVC编码流程
采集的时候用到的结构体·MPP_CHN_S,其中MPP_CHN_S的enModId是模块的ID、 s32ChnId是通道id。这里分别创建两个MPP_CHN_S结构体,一个是VI的MPP_CHN_S,它的enModId选择的是。)、u32Width(分辨率宽度)、u32Height(分辨率高度)、 enPixFmt(VI格式)、enBufType(映射类型默认是:MMAP)、enWorkMode(VI通道模式)等成员变量。另外一个则是VENC的MPP_CHN_S,它的enModId选择的是。
2024-02-02 21:47:43
2334
1
原创 logcat命令详解
⽇志消息包含⼀个元数据字段,除了标签和优先级,您可以修改输出显示⼀个特定的元数据字段格式的消息。三个参数连⽤,这样当⼀个⽂件⽇志输出满了之后可以⻢上在另⼀个中进⾏输出。缓冲区主要给系统组件使⽤,⼀般的应⽤不需要关⼼,应⽤的。选项来指定⼀个⽀持的输出格式。清除缓冲区中的全部⽇志并退出(清除完后可以使。为了减少不想要⽇志的输出,可以建⽴⼀个过滤器。中的⼀个命令⾏⼯具,可以⽤于得到程序的。加载⼀个可使⽤的⽇志缓冲区供查看,⽐如。显示原始的⽇志消息,没有其他元数据字段。类是⼀个⽇志类,可以在代码中使⽤。
2024-01-25 14:23:15
6705
原创 h264的编码结构
它的最大特点是自带一个完整的图像信息,在解码的过程中只需要解码本帧就可以完整地提取出一个完整的画面。中文的意思是叫做片,为什么需要这个片,主要是为了并行编码设计,所谓的并行编码指的是,把一帧图像分成几个片,并片之间是相互独立进行编码的!帧指的是这一帧和前一帧的差别,并通过将图 像序列中已经编码后的冗余信息充分去除来压缩传输数据量的编码图像。帧又称之为前向参考帧,此帧的特点是需要参考前一帧的图像信息才可以正确把图像解码出来。帧指的是前向参考帧,它需要参考前一帧的图片才能够正确把数据解码出来。
2024-01-19 16:19:16
426
1
原创 音视频编解码基础
从解码队列拿数据,并进行音视频同步处理 把第二步解码队列的音视频拿出来,分别进行音视频同步的算法处理。:把队列的裸流数据取出来,进行每一帧的解码操作 把视频裸流队列和音频裸流队列的数据取出来,并一帧一帧送到解码器进行视频解码和音频解码。音视频编码技术在音视频领域有着举足轻重的地位,这是由于音视频原始数据量较大,在传输的过程中如果不进行编码的话,则无法进行传输。编码的第一步基本上都是采集视频、音频的数据,并把采集到的数据送到对应的音视频编码器。从视频编码队列和音频编码队列拿出数据,并进行音视频的封装,
2024-01-19 16:11:02
532
1
原创 RK3399 打开红外摄像头时默认打开红外补光灯
增加一个设备树节点属性用于绑定红外补光灯的控电管脚,在针对性的摄像头推流时,控制对应管脚进行拉高拉低操作。关闭GC2053 红外摄像头,不获取摄像头数据流时,针对红外补光灯的控电管脚进行拉低操作。打开GC2053 红外摄像头,获取摄像头数据流时,针对红外补光灯的控电管脚进行拉高操作。新增mc_infrared-gpios按钮用于绑定红外补光灯的管脚。
2023-12-29 15:34:30
564
3
原创 Linux I2C驱动挂载知识
I2C工作原理:I2C总线标准的两根传输线,SDA是数据线,Scl是时钟线,当SCL为高,SDA由高到低时,发送启动信息,发送9个脉冲,1-7是地址,8是读写控制位,9是ACK应答位,所以挂在I2C上的被控设备都接受所发送的信息,并把接收到的7位地址与自己的地址进行比较,如果相同ACK就会反馈应答。当SCL为低,SDA由低到高,则发送停止信号。二、I2C驱动架构。
2023-12-29 11:06:45
1048
1
原创 RK3288 7.1 MIPI屏适配
(1) 在自己不能保证屏幕排线是否接好的情况下,切记寻找硬件工程师确认屏幕排线没有接错,否则容易造成烧坏屏幕的后果(2)对于新屏幕,一开始尽可能不要下发到了其他屏幕的初始化指令,这样容易“污染”屏幕IC的指令区,导致即使下发对应屏幕的初始化指令也不能去除其它已刷入的屏幕初始化指令,最后会使得无论怎样调试都解决不了的屏幕显示问题。(3)要尽可能确保固件已经配好了对应的屏幕,在烧写完毕之后,断电接好屏幕,重新上电查看屏幕显示效果(4)遇到疑问及时与硬件工程师和屏幕供应商反馈情况,以获得最有效的帮助。
2023-12-28 17:07:23
2260
1
原创 Linux中的input子系统浅析
系统框架主要分为三部分:Input driver:该部分是对应实际的输入设备驱动,用于处理硬件设备,将数据转化成统一的数据,方便和handler层交互。input core:字面意思就是input系统的核心层,提供各种处理函数input_register_device、input_register_handler、input_allocate_device、input_event等。Event handler:对应某个输入事件的处理,将数据发送到上层。
2023-12-25 17:19:08
970
原创 排序算法之希尔排序
希尔排序是D.L.Shell于1959年提出来的一种排序算法,在这之前排序的算法时间复杂度基本都是O(n)的,希尔排序算法是突破这个时间复杂度的第一批算法之一。希尔排序算法的发明,使得我们突破了慢速排序的时代,之后。......
2022-08-15 19:25:06
545
1
原创 fork和vfork的区别
vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec。3. vfork ()保证子进程先运行,在她调用exec 或exit 之后父进程才可能被调度运行。调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。1. fork ():子进程拷贝父进程的数据段,代码段。vfork ( ):子进程与父进程共享数据段。或exit 之后父进程才可能被调度运行。2. fork ()父子进程的执行次序不确定。......
2022-08-15 18:08:28
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人