- 博客(141)
- 资源 (14)
- 收藏
- 关注
原创 黑豹X2 armbian 编译rkmpp ffmpeg 实现CPU视频转码
执行了demo程序 发现没有任何输出 可能是armbian底层 未实现驱动 还是啥的。armbian的不需要做任何修改 直接执行 make-Makefiles.bash。需要提前安装好 srt 下x264的库 直接 apt install 就可以安装。编译完成后 会安装到/usr/local/bin /usr/local/lib。集成到程序中 测试 输入1080P 编码 640*360输出 可以正常跑。进到 rkmpp\build\linux\aarch64目录。1.编译rockmpp。
2024-11-05 15:53:15 323
原创 RTSP作为客户端 推流 拉流的过程分析
但是实际测试中发现 部分rtsp server tcp方式发送的时候 rtcp包没有这四个字节 找0x24头的时候找不到 ffmpeg会将错误原因设置为End of file 如下图 80 C8 00 06 是RTCP的报文。客户端发送OPTIONS方法 服务端回复支持的方法 可以看到比一般的摄像头多了ANNOUNCE RECORD方法。需要用户名密码时候的认证信息计算 大多数都是走DIGEST方式 仅仅介绍此种方式。需要注意的是:SETUP时候的uri 和其他方法的uri是不一样的。
2024-10-03 12:58:37 803
原创 Ubuntu 安装RUST
然后执行刚刚那个下载的脚本 如下图 会比官方的快一些 我这平均200多K 也不是很快。然后 wget --no-check-cetificate +下载链接。rustc hello.rs 正常编译 生成了hello 执行既可。执行这个脚本后会给出对应的下载链接 如下图。然后 source ~/.bashrc。我直接给出来 大多数应该都是这个。尝试用cargo构建项目 都OK。更改下 安装路径为国内源。官方给的是这样如下脚本。
2024-10-02 16:02:44 851
原创 LINUX下 ffmpeg编译 集成X264 SRT
然后 make make install。之前已经编译了 libsrt的库。设置好编译参数 如下。
2024-09-11 15:32:43 212
原创 告别交叉编译 armbian小盒子 做RK3588开发
正好手头上有个arm64位的armbian小盒子 黑豹X2 信息如下。都齐了 不少了 尝试运行 也能运行 只不过rkmeida的接口提示报错了。将原来在宿主机上 能编译正常运行的 工程 copy到 X2 小盒子。将程序拿到 实际的RK3588板子上运行 提示c++的库 缺少东西。将librockchip_mpp的so库链接过来之后能编译成功了。由于小盒子X2 的cpu也是瑞芯微的 没有其他品牌的小盒子。黑豹X2 用的 RK3566 也是瑞芯微平台。直接将小盒子的 c++库copy过来。
2024-06-14 16:27:03 616
原创 瑞芯微 RK3588 画中画 OSD RTSP拉流效果展示
主要开始的时候会比较费时间 需要找到变动接口对应的新接口。但是迁移到3588平台之后 发现 API接口变化较大。这些功能本来在1126平台都实现过。经过几天的操作 已实现 效果如下。之后 就比较好操作了。
2024-06-07 13:51:19 941 1
原创 瑞芯微 RK3588平台编译freetype
make install 对应的头文件和库文件生成了 之后就可以在项目中用了。我这是2.9的版本 freetype-2.9.tar.gz。把freetype2源码包下载下来之后。新建build.sh脚本 内容如下。然后 执行下这个脚本。
2024-06-06 16:40:10 281
原创 RK3588平台编译zlog 日志模块
产生的头文件zlog.h 和库文件libzlog.a 都在src目录下 copy到 工程目录即可。新建一个build_rk3588.sh脚本。然后 zlog.conf 配置文件内容如下。板子上跑的实际效果如下。将工具链导入环境变量。
2024-06-03 11:40:30 381
原创 瑞芯微 RK3588 环境搭建 SDK编译 编译指定模块
厂家推荐是虚拟机下 我这真好有真实的UBUNTU环境 就不用虚拟机了。需要将00到04 的压缩包 重新打包成一个文件 文档里面也已经给出命令了。这里主要用到两个目录 一个是源码也即SDK 交叉编译链 编译工具。如果在windows下面看 如下 是看不到符号链接文件的。需要注意的是 下下来的时候 只有下面绿色的部分。然后切到源码目录 我这里改名为SDK了。厂家给的资料下载下来之后 我的目录如下。具体目录不一样 按照文档说明操作即可。先安装交叉编译链 按照文档说明。搜了下需要执行如下命令。
2024-05-30 17:32:06 1852
原创 Ubuntu 搭建SRT协议 环境
需要安装cmake openssl等依赖 我的环境已经有了。这样就编译完成了 生成了对应的.a和.so库。打不开的话国内gitee 不是最新的。下下来之后 cd 到srt目录。1.官网clone源码。正常没出错的话 显示如下。
2024-05-24 11:16:12 380
原创 armbian ubuntu 小盒子安装nodejs npm vue3 环境
但是有一个问题默认的是 绑定的是127.0.0.1 小盒子是命令行的 没有浏览器 只能从局域网其他机器访问 这样是访问不了的。1.直接通过apt-get install nodejs 的版本太低了 我的是v12 我试了下。所以就卸载了自动安装的nodejs apt remove nodejs。这样 就可以通过npm create vue@latest 来创建vue项目了。这样直接敲 node -v npm -v 都有作用了。这样vue的开发环境就搭好了。去淘宝的ftp上下载对应的版本。
2024-01-31 22:00:34 1052
原创 linux平台 LED情报板网关项目总结
所有下发都是协程接口进行 这样保证了并发性,同时引入了redis缓存 用于保存每个情报板的发布状态 发布记录等等 每个情报板保存多达500条记录,具体的是在配置文件中配置的 由于redis的数据是保存在内存中 所以 不能设置的太大。2.1.5的下发消息的时候需要同步返回 2.0的是异步返回,所以1.5的要尽可能完成 不然会导致发 布平台卡在那里。4.1.5有注册接口 注册的时候需要把每个情报板支持的字体大小 上报给平台 2.0都是在平台配置的。xml接些tiny2xml json接些jsonxx。
2024-01-30 17:23:29 603
原创 armbian ubuntu arm64 源码安装nginx
chmox +x build.sh 然后 执行脚本./build.sh。修改install/conf/nginx.conf配位文件增加如上配置。然后reload 就可以看到armbian小盒子里面的所有内容了。最终结果如上 没有openssl 暂时不影响 用的时候在安装。下载源码包之后 tar -zxvf 解压。再次执行build.sh 脚本。安装在了install目录下。新建一个build.sh脚本。提示没有pcre 安装pcre。再次执行build.sh脚本。提示没有zlib安装zlib。
2024-01-28 14:59:35 710
原创 类似于推箱子的小游戏 寻找 最短路径
类似 推箱子小游戏 的变种 C/C++版本 BFS最短路径。最终目标是将灰色的小箱子移动到蓝色的HOME点。需要两次搜索 第一次是 出发点到灰色小箱子。蓝色代表HOME点 灰色代表要找的小箱子。BFS 搜索路径之后 找到一条最短路径。动画效果用的是JAVA的 一个jar包。第二次是灰色小箱子到蓝色HOME点。代码很乱 临时记录下。黑色代表墙壁 不能越过。
2023-11-15 18:56:23 323
原创 Linux平台 LED情报板网关开发总结
3.主任务队列是一个阻塞队列 一直等待 直到 有平台下发过来的消息 解析并送入队列之后,读取消息之后判断是否是有效的消息 如果有效 送入线程池进行并行处理 这里的处理 会根据不同的led厂家品牌调用不同的led驱动进行实际和led进行socket通信 之后并将结果 通过http 反馈给平台 成功还是失败 失败的原因等。5.其他貌似没啥了 无非是更新 led的时候需要考虑加锁的的问题 然后是不同的LED品牌 不同的协议 对接的问题 TCP UDP HTTP都有 ,各种涉及的奇葩协议 等等 ......
2023-11-02 15:51:30 253
原创 armbian 系统下 arm小盒子上 尝试跑SRS
看一下top cpu已经沾满了 已经70°了 cpu不会爆掉吧 无风扇主动散热 cpu主频已经到2G了。虽说是1G 但是实际上可用的只有803M 如下图 正常待机温度 50度左右 现在已经68度了。强行中断 搞不起来 太卡了 好像死机了。1.github国外的太慢了 找了个国内yuan。之前的这个小盒子 只能单线程编译 多线程会卡死。提示要安装tclsh 那就安装下。然后有提示安装pkg-config。我看源码还编译ffmpeg了。先等等看 此时已经很卡了。2.进到trunk目录。
2023-10-14 21:22:29 1257
原创 海思 3531DV200 程序 平移到SS528V100 记录
大概两年前的时候用的是3531DV200 通过将 高分辨率的视频 转成低分辨率 低码流的视频 然后推到RTMP服务器。就是默认的open_source\u-boot\u-boot-2020.01\commonbootm.c文件中的值。kernel模块 遇到的主要问题是 第一增加厂家的网卡驱动 这个很简单按照厂家指导就可以。如上图 原来的内核是10M 现在改成11M 对应的下面的 fs大小也要调整。问了下厂家 是下面b的命令也要执行 执行之后就正常了。fs主要就是应用相关的 程序移植 之类的。
2023-10-13 15:44:13 456
原创 海思平台SS528V100编译 linux kernel tun.c eth_get_headlen 编译 出错的问题
然后 去arch/arm64/configs/目录 更改配置文件ss528v100_defconfig。会去opensource目录下解压linux内核压缩包 同时打上很多补丁。然后 然后我们的应用程序用到一个特性 需要打开tun/tab这两个属性。目录是drivers\net\ethernet\vendor\gmac。那就 用原来的文件 替换掉现有的文件 如下图 左边的是原来的。gmac.h文件 增加如下代码。没打补丁之前的文件 没问题。右边的打完补丁之后的文件。打开之后编译内核出错。
2023-10-12 16:25:20 430
原创 基于多线程的Reactor模式的 回声服务器 EchoServer
参考了MediaServer 引入EventPollerPoll 和 EventPoller的 概念。线程之间通过eventfd来通信 将客户端的fd传到 对应的线程中。获取fd之后 从剩余的执行线程中 找到一个连接客户端数量最少的线程。然后将客户端的fd加入到这个线程中并通过EPOLL监听这个fd。一个线程专门用来接受accept获取客户端的fd。最少两个两个线程 设置为1的话 会改成2。
2023-10-09 17:43:14 303
原创 gcc 9版本 使用std::thread时候 的链接错误 undefined reference to `pthread_create‘
偶然发现 同样的代码 在 不同版本的ubuntu上编译的时候 一个能编译通过。然后看了下 libstdc++so.6 2204的是 是20多MB。1804 的是12.5MB左右 差别应该就是在这个库里面了。编译失败的提示 找不到pthread_create函数。ubuntu2204的 没有要求pthread库。ubuntu 1804 则多了pthread库。失败的加上lpthread 库之后可以编译过。成功的系统是ubuntu22.04。失败的是 ubuntu18.04。ldd看下 可以发现。
2023-10-08 10:54:56 199
原创 EPOLL单线程版本 基于reactor 的 httpserver文件下载 支持多个客户端同时处理
当调用send失败返回-1之后 就 结束了 而一般来讲 send的时候发送的数据超过内核中的send buffer的大小的时候 就会 失败了。这个时候 必须 要保存下来当前文件的已发送的字节数 以及当前文件的偏移指针 等下一次 EPOLLOUT事件的时候再次 发送给客户端。之前写了一个httpserver的问价下载服务器 如果有多个客户端请求过来只能串行处理必须得等当前的操作完成之后才会处理。目前已经实现了这个功能 采用的是单线程版本的reactor模式。支持 多个客户端同时下载文件。
2023-10-05 22:16:03 581
原创 httpserver 下载服务器demo 以及libevent版本的 httpserver
cpp h 这些可以直接显示 其他的 则是提示是否要下载。代码如下 先放上来。
2023-09-30 23:54:44 1394
原创 nmap命令的使用
nmap 192.168.131.130 -p 10000-60000 扫描10000-60000中开放的端口。默认扫描1-10000端口 通过 -p指定范围。1.查看某个ip的已使用端口。2.扫描某个网段的ip设备。
2023-09-26 13:48:17 108
原创 linux通过time命令统计代码编译时间
该时间包括 ls 进程执行时实际使用的 CPU 时间,ls 进程耗费在阻塞上的时间(如等待完成 I/O 操作)和其他进程所耗费的时间(Linux 是多进程系统,ls 在执行过程中,可能会有别的进程抢占 CPU)。答案就是 user+sys 的时间,但一般情况下,real=user+sys,因而我们就使用 real 的时间作为 ls 的执行时间了(注意,这里会有几个坑,我们将在后面进行介绍)。该时间仅指 ls 进程执行时实际使用的 CPU 时间,而不包括其他进程所使用的时间和本进程阻塞的时间。
2023-09-26 11:25:45 435
原创 56块钱搭建一个ubuntu 2204 linux 服务器
实际可用 只有4.几个G 作为变成 写写代码 没啥问题 至于其他的 就别想了。直接从 电脑可以访问了 如下图 就是硬盘很小 卖家说是8G的 内存是1G。主要是想拿来 试试io_uring的 由于这个 是5.10以后的内核版本才支持。老板刷机之后 led灯都不亮了 不知道有没有开机 我还以为坏了 刚开始。硬件pdd上淘的一个linux小盒子 应该是以前的机顶盒之类的。找了个显示器 键盘 查到小盒子上通电 本来指示灯应该亮的。连上之后显示器键盘都可以拔掉了 就剩下 如图上的样子。
2023-09-25 16:38:13 439
原创 linux新版本io框架 io_uring
高性能:相比传统的select/poll/epoll等I/O多路复用机制,io_uring采用了更高效的ring buffer实现方式,可以在处理大量并发I/O请求时提供更高的吞吐量和低延迟。异步:io_uring支持异步I/O操作,并且可以通过用户空间和内核空间之间的共享内存映射来避免数据拷贝,从而减少了CPU的开销。事件批处理:io_uring可以将多个I/O操作合并成一个请求进行处理,从而降低了系统调用的次数和上下文切换的开销。之后程序起来之后 用网络调试助手 发送测试文字。由于github上不去。
2023-09-20 18:04:52 343
原创 SS528V100 ffmpeg拉流attempted to set receive buffer to size 1024000 but it only ended up set as 425984
网上搜了下 cat /proc/sys/net/core/rmem_max 这个值是212992 *2 =425984。可以 echo 2097152 > /proc/sys/net/core/rmem_max 通过这个方式修改。原来3531 设置没问题 移植到ss528v100发现不行。
2023-09-06 15:17:33 297
原创 EPOLL解决单个客户端同时连接多个服务端的问题
但是协程依赖于协程库 所以 重新改成EPOLL 今天试了下 成功了。之前尝试过没有成功 改成协程了。
2023-08-30 16:03:51 213
原创 海思SS528V100 开发环境搭建记录 固件编译
1.拿到厂家的SDK 解压rar压缩包(aarch64-mix210-linux.tga 要用tar -zxvf命令解压)之后会得到三个文件夹 如下图高亮了。,安装交叉编译器的脚本配置的环境变量就可以生效了,或者。执行 source /etc/profile。./sdk.unpack 如下图。,解压缩该文件,可以得到一个。2.安装交叉编译工具链。请重新登陆也可 如下图。
2023-08-29 17:21:45 1583 1
原创 C++ 用st协程库解决 一个客户端同时连接多个服务端的问题 State Thread st协程库 在程序中的运用
默认最传统的方法 一个线程中 遍历这些设备 假设有30个设备 每个设备超时时间5秒 那么 遍历一遍需要30*5 = 150秒 如果 有100个设备 就需要500秒。具体代码如下 CreateSocket 是用传统的socket函数 从connect开始的所有io函数都得换成st库的io函数。这个 其实 能应付大多数的需求了 假如有100个设备 最坏的情况 每个设备都不通 超时时间为5秒。具体执行的函数 中 主要是需要将传统的 网络的io函数都改为 st的io函数 才有用。
2023-08-16 19:22:19 331
原创 应用程序打包docker记录 exec format error
最开始没有最上面的 #!/bin/bash 运行的时候提示 exec format error 加上这句就好了。之后 把这个catvideo.tar镜像上传就可以了。runapp.sh脚本内容如下。写一个Dockerfile。
2023-08-16 09:44:31 1127
原创 通过 EPOLL 解决客户端同时连接多服务器的问题
遍历设备列表 找到设备之后 通过 socket连接 发送一个指令 等待服务器返回 用来检查是否在线。这样的问题是 如果设备不是很多的话 还好 但是如果 有上百个设备 的话。基本上还是相当于单线程 测试结果感觉还是单线程在跑。每隔一段时间需要 比如1分钟 连一下服务器看下是否连通。项目需求是 程序上 同时配置了多个服务端 设备。相当于是改成单线程了 但是效果不是很好。后来 看了EPOLL尝试一下。具体大概就是 定时器到了之后。原来是用线程池来做的。后期改成协程试下看看。
2023-08-11 20:01:12 786
原创 std::string 的append方法 存放文本和非文本数据
如果是文本数据那么append方法参数为 ( char *data, int len)今天在用std::string来拼接数据 有文本数据 也有 非文本数据。如果是非文本数据 则参数为(int size, char data);将data的前len个字节附加到 string中。重复size个data 附加到 string中。
2023-08-08 20:29:52 379
原创 C++反射实现
1.需要一个单例模式Singleton.h。6.基类CPPReflexBase.cpp。3.类方法 ClassMethod.h。2.类成员 ClassField.h。4.注册类 ClassReg.h。5.基类ReflexBase.h。内容来自别人的内容 记录下。
2023-08-07 19:17:05 248
原创 通过FFmpeg 来筛选合并视频文件的项目记录
程序收到消息后 根据日期时间戳去对应的目录检索是否符合要求的文件 比如某个时间段。没有的话 根据时间戳判断是否需要等待或者 返回没有检索到。检索到之后 将视频片段拼接成一个完整的视频文件。平台通过http下发json格式的消息。项目中用到 线程池 等待队列 等。Http服务用cpphttp。
2023-07-07 10:43:02 796
原创 ubuntu下 C/C++程序读取设置环境变量
读取的话 main函数多加一个env参数 一个字符串数组 然后遍历这个数组 即可。可以通过echo回显。
2023-07-04 14:57:35 860
rtsp server rtsp服务器 linux ubuntu版本 包括ffmpeg库
2023-02-23
ubuntu下 利用qt做的rtsp /rtmp播放器 支持rtmp h265
2022-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人