- 博客(84)
- 资源 (15)
- 问答 (1)
- 收藏
- 关注
原创 opengl shader加速渲染AVFrame提高1080P渲染效率
如果能实现硬解码的数据不经过CPU直接打到GPU进行渲染,那就是最完美的方案。这个在x86下需要研究opengl渲染硬件类型数据,难度未知,理论如果用的是比较新的框架,资料会多一些。本文主要是基于2-3的优化,在qt5.1下面基于opengl实现了这个方案,在多路1080P的使用场景下CPU使用率下降非常明显。一般的在arm嵌入式平台,大多数板子都要硬解码硬件渲染的框架,使用即可。1的优化效果往往需要将硬解码的数据copy至CPU再使用2-3的优化。这三点优化来说2与3是优化的效率是非常显著的。
2025-02-18 15:55:40
396
原创 2024年终总结
自己边学编写,开发了网页前端拉流demo,sip服务器,使用开源的simple-rtsp-server服务器,纯go的版本,自学了go,在这个基础上加上了内网穿透与sip服务器交换的全过程,才使得内网的rtsp流服务器能与外网webrtc拉流。也拿到了不错的奖金,算起来是不亏的。另外,选择公司就等于选择了行业和具体的项目,像音视频开发这个,主要是安全监控,互联网,算法检测设备这类的公司,除了互联网大部分都是实体工厂设备的公司。这里吐槽的有点多了,哈哈,我走了,这两个项目都因为种种原因完蛋了,最后裁员了。
2025-01-25 16:55:33
401
原创 涨工资经验之谈
很多逻辑难度都很简单,但是公司里居然招不到人,还需要通过猎头招聘,去了一年就满级了。什么串口编程,什么Qt,什么多线程,什么Http,什么tcp,统统拿下。苏州待遇普遍很低,就算是做算法,除了华为模式和外企,或者极其仅有的算法岗之外,其余都很低。之前游手机戏,七年开发出身,游戏公司倒闭彷徨一阵子,机缘巧合转了Qt上位机开发。工资起始主要还是看公司,不同的方向,看公司,同一个方向也看公司。第二家跳槽涨薪5K,接触的是C++11,CMake系列,音视频开发,蓝牙,android等等。服务器后台开发,看公司。
2024-11-20 17:39:11
377
原创 RK3568视频硬解码并与Qt界面融合显示深入探究
融合的方式在rockit方案里提到了很多,网上也有很多说用RGA,RGN什么鬼的,或者VO send_frame的方法,甚至还有用colorKey,视频层在上,Qt层在下,通过设置Qt背景颜色什么鬼的。问题2:视频卡顿,这个问题很奇怪,一开始是以为是RK的bug,还是怎么。按照官方的demo,这样干是可以的,主要是注意解码的格式和缓存区大小,还有h264,h265,以及送帧方式。最后说一说和Qt融合的方法,主要说Rockit的方案,其他方案可以交给QImage渲染,效率低一些,但足够用了。
2024-11-13 19:38:36
2084
4
原创 weston.ini 修改DRM设备配置,并使Framebuffer是RGBA格式的方法
setRedBufferSize(), setGreenBufferSize(), setBlueBufferSize(), setAlphaBufferSize(): 设置颜色通道的位数。将 QWidget 的混合模式设置为 Qt::TransparentForBackground,这表示窗口的内容会与背景进行混合,而不是完全覆盖背景。通过这些属性,你可以指定你需要的颜色深度和采样数量,这会影响 Wayland Compositor 选择的最终像素格式。setSamples(): 设置多重采样数量。
2024-11-09 00:18:20
510
原创 QOpenGLWidget渲染QImage
由于是用在Rk3568上的,版本是openes 3.2所以只能这样了,x86平台需要自己修改一下,后面空了把x86的也放出来。简单做个记录吧,调了半天终于能显示出来了。
2024-10-29 10:30:38
418
原创 ffmpeg取rtsp流音频数据保存声音为wav文件
这个查了一圈也没人给出正确答案,实际上是由于我自己编译的ffmpeg时候,开启的选项的导致的。把音频解码器相关的给禁掉了。重新编译ffmpeg后,一切正常。format_ctx->streams[audio_stream_index]->codecpar是空指针。也就是说:subchunk2Size是出去wav文件头部数据意外的数据长度。本来不是什么难搞的问题,代码写完了,音频流信息中的详细信息,具体代码表现为。// 更新 WAV 文件头中的数据大小。具体为什么,可以查看wav格式的说明。
2024-09-30 16:51:31
869
原创 Qt QDialog点击界面自动激活问题解决办法
当界面继承QDialog以后,设置非模态,并直接调用show后,弹出新界面覆盖在这个Dialog上时,点击其他未被遮挡的区域,会自动激活QDialog画面,自动激活后,导致QDialog显示在新界面的上面了。也就是说,当使用QDialog,非模态时,如果有其他界面显示在这个对话框上层,且没有完全遮挡时,点击其他对话框,这个对话框会自动获取焦点,并显示在最上层。由于程序中对QDialog使用方式的错误,导致在新版本中出现一个奇怪的问题。这个问题,是由于QDialog对话框的窗口属性导致的。
2024-09-12 13:09:22
484
原创 Ubuntu14.04安装VSCode,秒装方法
1. 问题:由于开发环境是14.04的ubuntu虚拟机,原本用了VSCode Remote远程插件通过windows链接虚拟机项目。不过经常因为网络原因,或者其他奇怪的问题,整个过程不是舒畅。所以,想着干脆直接在虚拟机装一个好了。由于系统换的代价暂时过大,电脑垃圾ubuntu版本太新,会有卡顿问题等等。所以开始踩坑,网上搜索了一堆,各种奇怪的安装方式。直接下载tar.gz,然后解压打虚拟机的/opt目录。如此,再重新执行打开就舒服多了。需要升级下有个库的版本,然后直接打卡就行了。
2024-05-14 17:05:08
827
1
原创 VirtualBox7.0.16的蓝屏大坑与ssh登陆ubuntu虚拟机的办法
安装了最新版的VirtualBox,装了ubuntu系统,在win10下通过ssh死活无法与ubuntu进行正常登陆控制。由于在下旧版本之前我已经安装了增强功能,那就需要卸载原来的增强功能,然后换成7.0.14的增强功能。问题1:ssh登陆失败,但是主机能ping通ubuntu,反过来也能ping通,网络模式是默认的。这时候有点懵逼的,因为我一开始装的是7.0.16,安装增强功能是正常的。结果因为用了最新版的virtualbox,遇到了最新版的蓝屏问题,一登陆就蓝屏。这是个官方的bug,真是日了狗。
2024-04-26 16:41:00
2900
9
原创 Qt图片等资源管理
这样引用的就是第二个qrc中的图片。:/myimg 是资源描述符的前缀,可以为空,添加后目录结构。二者的前缀一样,如果一样,且存在相同路径的图片时,后面的会把前面的覆盖。这个就是基于linux下或者winodows下的文件相对路径的写法。可以添加多个qrc文件,第二个前缀描述符为空,可以直接使用。2,可以格局可执行程序的路径放置,在代码中用相对路径使用。使用的时候,可以在代码中这样写。或者直接写成绝对路径。
2024-04-19 13:18:22
461
原创 XUbuntu18.04 源码编译Qt4.5.3的过程
至找打了这几个的安装包,也就是deb包,安装的时候,也是各种坑。总结下来,就是更新sources.list中的ubuntu源的版本,由于gcc4.4在低版本的ubuntu的源里,所以更新后,就能安装了。对Qt4.5.3支持的最好的gcc是4.2.x系列,已经是十几年前的东西了。1.Qt4.5.3的在linux上只能源码编译安装,需要找低版本的gcc,找gcc的过程很麻烦。-j4是开启4核编译,我的虚拟机最多4个核心,所以就只能是-j4。但是ubuntu的镜像源上,很难找到低版本的gcc。
2024-04-19 11:25:56
478
原创 Qt 旧版本下载地址和使用mingw编译的问题
由于windwos上没有安装VS相关的东西,用的mingw版本的,结果4.5.3里边不带mingw的编译器,网上也很难下到和4.5.3已经编译好的匹配的版本。所以用下载的mingw4.4.x系列版本,重新编译了Qt的源码,才能用。由于工作中用到了很老的版本,比如4.5.3。:这个是新的下载地址。
2024-04-18 10:43:11
560
原创 堆排序,以及大顶堆构造过程Java实现
具体编码建议,在第二步中,如果依次遍历,将会存在大量重复计算节点的操作。因为是从叶节点开始,那么每个节点有两个叶节点,就会找两次,所以每次找完,下标-2就行,直接进入下一个根节点。第三步中,有可能找不到叶节点,当找不到左右节点时,直接跳出循环就行了,说明已经将所有的根节点找完了。根找完了,就说明调整完毕。依次从最后一个节点开始,查找每个节点的根节点,然后根据根节点,继续找出左右子节点,在三个节点中取最大值和根节点交换位置。依次从一个节点开始,查找每个节点的左右子节点,在三个节点中取最大值和根节点交换位置。
2023-09-07 12:52:12
275
原创 关于d3dva11解码H264编码报-1094995529错误的问题
也就是cmsOpenProfileFromMemTHR 这个函数报错了,经过Chatgpt,这个函数是预加载颜色空间后,与实际的传入的颜色内存空间进行校对。校对失败就会出现这个问题。问题的根本就在于D3Dva11硬解码器,是不支持BP的,他对H264的颜色空间有一定要求。简称为BP,MP,HiP这三种配置,Base Profile是对于一些比较差的设备用来解码的。解码器的配置都是正确的,一番操作,发现是H264 profile的问题。经过排查源码,发现这个函数在底层执行的时候,会进行颜色空间检测。
2023-08-29 13:09:11
853
原创 TX2 NX上gstreamer融合音视频示例及更多示例
/ nvcompsositor 的两个输入必须是一样的图片格式和内存形式,需要将云图透明部分用白色(255,255,255)填充。将mp4和wav融合成一个新的mp4。视频录制h264编码。
2023-06-07 09:21:59
675
原创 onvif server端鉴权函数
另外,客户端发过来的密码是加密的,具体是怎么加密的请参阅官方文档,这里直接用相应的函数实现与后端密码对比。鉴权的原理:根据客户端发过来的账号密码,监测是否与服务端设置的账号密码是否正确。客户端测试软件:ONVIF Device Manager V2.2.250。客户端写错账号,或者不填,或者写错密码,都是可以提示错误的。
2023-05-09 09:39:55
1025
2
原创 精确时间同步协议(PTP)C++实现
PTP协议有多种实现方式,其同步模式分为请求应答模式,和端到端模式。包含域,时钟类型,等基本概念,域代表参与同步的域号,每个参与同步的设备都会有一个域号,相同的域号代表他们属于同一个域。之前研究的时候,看到的都是C语言的示例,C语言实现网络通信,需要基于socket,自行封装解析,写起来很复杂,如github上的ptpd开源项目。前期研究花了一些时间,用Qt的UDP实现,用了一天时间。研究了其协议字段,直接用Qt的udp硬撸了一下,差不多花了一天半的功夫,编码加调试,期间有顿悟!算是从不懂到手撕了!
2023-04-27 09:00:23
3099
7
原创 git 笔记
第二种方法就是先将本地的项目初始化为一个git仓库,然后再强行合并本地仓库和远程仓库,由于这两个仓库是完全不同的两个仓库,所以直接pull都会报错,需要在pull的时候假加上–allow-unrelated-histories才可以pull成功。5、pull远程仓库的内容,更新本地仓库,使用–allow-unrelated-histories忽略本地仓库和远程仓库的无关性,强行合并(关键):git pull origin master --allow-unrelated-histories。
2023-03-24 10:30:12
86
原创 git命令快速入门
将暂存区提交入本地仓库,也就是将绿色状态的提交入库,入库后,工作区与暂存区和仓库中代码一致,git status,是看不到提示的。将本地仓库的commit,推入远程仓库,如果远程仓库也有修改,需要先更新代码,才能提交,如果远程仓库的地址和本地仓库映射的远程仓库的地址不一样,是无法同步推送和更新的。从远程仓库拉取最新提交代码,并与本地仓库代码合并,如果本地仓库有提未提交的代码,需要先提交本地仓库代码。如果有冲突,需要解决冲突。将暂存区的内容还原到工作区,可以还原文件,以及回退提交,本地仓库和暂存区不受影响。
2023-02-28 11:16:48
302
1
原创 使用Gstreamer+OpenCV实现两路图像数据混合拉流推流
由于混合的时候需要保留透明度,但是OpenCV不支持四通道的数据写入。所以只能利用VideoCapture先拉到摄像头数据,利用要混合的图片,手动计算叠加。推流后用相关视频软件拉流就能看到效果,如PotPlayer 64 bit,VLC等等。我需要实现的功能是在TX2 NX,拉取摄像头数据,并再摄像头数据上与另一张图片混合。由于用到了rtspclientsink插件,所以需要安装rtsp插件。为提高效率,通过将线程绑定在固定CPU上,提高了线程优先级。2、可学习gstreamer,图像混合的一些插件用法。
2022-12-01 13:04:30
7795
12
原创 Linux下基于Bluez开发USB蓝牙SPP服务端
解决办法就是修改系统中蓝牙服务的启动选项,-C的意思就是compat,兼容性模式运行蓝牙服务,因为bluez5.x的版本去掉了socket的方式连接蓝牙,所以我们需要手动开启。这句也很重要,我们要在设备上建立SPP协议的服务。发现提示说他的连接地址和我代码中的不一致,虽然我写对了,但是str2ba是我从网上下载下来,修改的。由于是在linux上运行的,所以参考的bluez的代码,用C语言实现了蓝牙的Server端。问题就是他是逆序的,同样的,在初始化地址那里需要用逆序,这样他才能用正确的地址。
2022-11-30 16:26:14
5745
5
原创 WebRTC点对点通讯建立连接的流程
WebRTC是一种点对点的通讯机制,是在两个客户端建立了RTCPeerConnection连接后,进行通讯,可发送音视频流,也可以发送消息,如文字等等。登陆成功后就创建了一个连接,如果是多对多,则需要在每当有人加进来的时候,其他的人都需要在创建一个链接,并与新加入的人建立ygie连接。也就是,当客户端A接收到onicecandidate信号后,通过Server向客户端B发送候选请求,B记住A的候选人信息。完成这一步,就是完成了P2P的连接。B收到offer请求,后答复A,答复后,同时告知A我是的候选人。
2022-11-04 23:55:59
1007
转载 c++ windows console 快速编辑模式 代码关闭(转载的)
原因windowsPowershell分快速编辑模式和标准模式.当处于快速编辑模式时,鼠标点击控制台会导致,改程序被阻塞.且系统默认情况下,是快速编辑模式。问题win10下编写Windows下控制台程序时发现程序经常被阻塞.解决通过代码重置控制台的属性....
2022-07-18 17:22:51
582
原创 VS2019+cmake 方式添加ffmpeg库文件,cmake添加lib文件dll文件,包含目录示例
cmake_minimum_required(VERSION 3.10)project(${PROJECT_NAME} CXX)set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED on)project(wfdb_demo)set(ffmpeg501 "D:/work/ffmpeg-5.0.1-full_build-shared/ffmpeg-5.0.1-full_build-shared") include_directories(${
2022-06-29 17:49:15
2894
1
原创 VS2019+CMake编译代码,windows.h与winsocket.h编译冲突,提示变量重定义解决办法
解决办法很简单,在CMakeLists.txt,添加预编译选项Add_Definitions(-DWIN32_LEAN_AND_MEAN)在工程的最顶层目录下的CMakeLists.txt中加上上面这行。
2022-06-10 13:31:49
682
原创 VS2015安装报“安装包丢失或损坏”(win7)问题的解决办法(证书安装后无效,仍然无法解决请尝试本文)
win7安装VS2015提示文件损坏,安装证书后依然无法解决问题的解决办法
2021-12-17 20:06:34
4831
原创 linux开机启动tomcat
#!/bin/sh# chkconfig: 345 99 10# description: Auto-starts tomcat# Auther: Lex Mc# /etc/init.d/tomcatd# Tomcat auto-start# Source function library.#. /etc/init.d/functions# source networking configuration.#. /etc/sysconfig/networkRETVAL=0export J
2021-02-22 14:40:42
156
原创 数据库备份脚本
#!/bin/shDUMP=/home/idl-face/databus5535/bin/mysqldump #mysqldump备份程序执行路径OUT_DIR=/home/mysql_data #备份文件存放路径#LINUX_USER=root #系统用户名DB_NAME=face #要备份的数据库名字DB_USER=root #数据库用户名DB_PASS=Bs~XIsDDv4XcDGCt\)S\(+4*yjQ&8NJh ...
2021-02-22 14:39:50
199
1
原创 树的相关知识回顾
树的数据结构相对来说也比较好理解。但由于为了查询效率和存储效率,又有多种树形结构,对树进行了限制。如二叉树,平衡二叉树,红黑树,B树,B+树。其实也没多少多复杂,只是愿不愿意花时间去研究。个人花了点花时间回顾了一下平衡二叉树和二叉树的理论和实现。红黑树和B树,B+树暂时没有去研究。后续有空了再补。只是将具体的特点大概了了解了一下。代码是关于二叉树和平衡二叉树的代码实现。P4.h#pragma once#include <iostream>#include <vecto
2020-10-26 11:49:00
156
原创 图的基础算法
图的表示方式一般有两种,链表和矩阵。图的相关算法比较简单,深度,广度优先遍历,深度可以用递归。广度需要用队列先将访问过的层级加入队列,直到这一层的节点访问结束,进入下个几点再遍历。最短路径问题最短路径给出的条件就是起点和终点,最短路径问题是解法多种多样,只复盘了Dijkstra算法这个。这个算法的核心有两个,一个是保存从起点出发到达每个顶点的路径数值,然后从最短的那个点出发。修改路径数值表中,可以由这个点联通,并且经由这个点的路径值比原来还小的话,就更新数值表。示例,a点到b点是3,到c点是5,
2020-10-21 10:46:10
379
1
原创 回顾单链表,堆栈,队列,双链表数据结构
这几个数据结构还是比较通俗易懂的,其中堆栈和队列可以用数组封装实现,也可以用双端链表实现,等等不多复述。个人感觉数据结构真正复杂的是树型结构,多叉树,二叉树,平衡二叉树,B+树,B-树,红黑树,他们关系和区别,目前也说不清楚。这一块是我感觉很薄弱的地方。简单写了个单链表,其他的懒得写了,下篇开始搞搞树型结构P2.h#pragma once#include <iostream> using namespace std;template <class T>cla
2020-10-16 15:18:25
168
原创 简单回顾一下十大排序算法
#include "P1.h"#include <iostream>#include <list>#include <vector>using namespace std;P1::P1(){}P1::P1(int *p,int size){ m_array = p; m_size = size;}P1::~P1(){}/*冒泡排序*/void P1::swap_bubbleSort(){ randomSort();.
2020-10-16 11:31:42
155
linux下基于Bluez实现蓝牙SPP服务端demo
2023-02-02
Visual Assist 10.9.2231CR-OK.zip
2020-09-08
xlsToCsv.rar
2020-05-29
cocos2d-x切水果刀光绘制demo
2015-05-08
上位机C++开发想学习下位机嵌入式开发需要如何学习
2023-01-30
Live555能否接受其他rtsp客户端推流并保存流数据?
2022-11-02
选国企程序员还是缘创业公司?
2022-05-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人