自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 资源 (5)
  • 收藏
  • 关注

原创 Ubuntu 搭建SRT协议 环境

需要安装cmake openssl等依赖 我的环境已经有了。这样就编译完成了 生成了对应的.a和.so库。打不开的话国内gitee 不是最新的。下下来之后 cd 到srt目录。1.官网clone源码。正常没出错的话 显示如下。

2024-05-24 11:16:12 178

原创 利用FFMPEG 将RTSP流的音频G711 转码为AAC 并 推流到RTMP

通过FFMpeg将音频编码G711 转为AAC格式

2024-03-01 18:52:33 829

原创 临时测试代码

【代码】临时测试代码。

2024-02-29 21:47:39 359

原创 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 740

原创 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 544

原创 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 580

原创 类似于推箱子的小游戏 寻找 最短路径

类似 推箱子小游戏 的变种 C/C++版本 BFS最短路径。最终目标是将灰色的小箱子移动到蓝色的HOME点。需要两次搜索 第一次是 出发点到灰色小箱子。蓝色代表HOME点 灰色代表要找的小箱子。BFS 搜索路径之后 找到一条最短路径。动画效果用的是JAVA的 一个jar包。第二次是灰色小箱子到蓝色HOME点。代码很乱 临时记录下。黑色代表墙壁 不能越过。

2023-11-15 18:56:23 236

原创 Linux平台 LED情报板网关开发总结

3.主任务队列是一个阻塞队列 一直等待 直到 有平台下发过来的消息 解析并送入队列之后,读取消息之后判断是否是有效的消息 如果有效 送入线程池进行并行处理 这里的处理 会根据不同的led厂家品牌调用不同的led驱动进行实际和led进行socket通信 之后并将结果 通过http 反馈给平台 成功还是失败 失败的原因等。5.其他貌似没啥了 无非是更新 led的时候需要考虑加锁的的问题 然后是不同的LED品牌 不同的协议 对接的问题 TCP UDP HTTP都有 ,各种涉及的奇葩协议 等等 ......

2023-11-02 15:51:30 189

原创 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 1115

原创 海思 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 267

原创 海思平台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 331

原创 基于多线程的Reactor模式的 回声服务器 EchoServer

参考了MediaServer 引入EventPollerPoll 和 EventPoller的 概念。线程之间通过eventfd来通信 将客户端的fd传到 对应的线程中。获取fd之后 从剩余的执行线程中 找到一个连接客户端数量最少的线程。然后将客户端的fd加入到这个线程中并通过EPOLL监听这个fd。一个线程专门用来接受accept获取客户端的fd。最少两个两个线程 设置为1的话 会改成2。

2023-10-09 17:43:14 275

原创 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 152

原创 EPOLL单线程版本 基于reactor 的 httpserver文件下载 支持多个客户端同时处理

当调用send失败返回-1之后 就 结束了 而一般来讲 send的时候发送的数据超过内核中的send buffer的大小的时候 就会 失败了。这个时候 必须 要保存下来当前文件的已发送的字节数 以及当前文件的偏移指针 等下一次 EPOLLOUT事件的时候再次 发送给客户端。之前写了一个httpserver的问价下载服务器 如果有多个客户端请求过来只能串行处理必须得等当前的操作完成之后才会处理。目前已经实现了这个功能 采用的是单线程版本的reactor模式。支持 多个客户端同时下载文件。

2023-10-05 22:16:03 548

原创 httpserver 下载服务器demo 以及libevent版本的 httpserver

cpp h 这些可以直接显示 其他的 则是提示是否要下载。代码如下 先放上来。

2023-09-30 23:54:44 1347

原创 nmap命令的使用

nmap 192.168.131.130 -p 10000-60000 扫描10000-60000中开放的端口。默认扫描1-10000端口 通过 -p指定范围。1.查看某个ip的已使用端口。2.扫描某个网段的ip设备。

2023-09-26 13:48:17 78

原创 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 326

原创 56块钱搭建一个ubuntu 2204 linux 服务器

实际可用 只有4.几个G 作为变成 写写代码 没啥问题 至于其他的 就别想了。直接从 电脑可以访问了 如下图 就是硬盘很小 卖家说是8G的 内存是1G。主要是想拿来 试试io_uring的 由于这个 是5.10以后的内核版本才支持。老板刷机之后 led灯都不亮了 不知道有没有开机 我还以为坏了 刚开始。硬件pdd上淘的一个linux小盒子 应该是以前的机顶盒之类的。找了个显示器 键盘 查到小盒子上通电 本来指示灯应该亮的。连上之后显示器键盘都可以拔掉了 就剩下 如图上的样子。

2023-09-25 16:38:13 368

原创 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 307

原创 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 184

原创 EPOLL解决单个客户端同时连接多个服务端的问题

但是协程依赖于协程库 所以 重新改成EPOLL 今天试了下 成功了。之前尝试过没有成功 改成协程了。

2023-08-30 16:03:51 165

原创 海思SS528V100 开发环境搭建记录 固件编译

1.拿到厂家的SDK 解压rar压缩包(aarch64-mix210-linux.tga 要用tar -zxvf命令解压)之后会得到三个文件夹 如下图高亮了。,安装交叉编译器的脚本配置的环境变量就可以生效了,或者。执行 source /etc/profile。./sdk.unpack 如下图。,解压缩该文件,可以得到一个。2.安装交叉编译工具链。请重新登陆也可 如下图。

2023-08-29 17:21:45 940 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 263

原创 应用程序打包docker记录 exec format error

最开始没有最上面的 #!/bin/bash 运行的时候提示 exec format error 加上这句就好了。之后 把这个catvideo.tar镜像上传就可以了。runapp.sh脚本内容如下。写一个Dockerfile。

2023-08-16 09:44:31 900

原创 通过 EPOLL 解决客户端同时连接多服务器的问题

遍历设备列表 找到设备之后 通过 socket连接 发送一个指令 等待服务器返回 用来检查是否在线。这样的问题是 如果设备不是很多的话 还好 但是如果 有上百个设备 的话。基本上还是相当于单线程 测试结果感觉还是单线程在跑。每隔一段时间需要 比如1分钟 连一下服务器看下是否连通。项目需求是 程序上 同时配置了多个服务端 设备。相当于是改成单线程了 但是效果不是很好。后来 看了EPOLL尝试一下。具体大概就是 定时器到了之后。原来是用线程池来做的。后期改成协程试下看看。

2023-08-11 20:01:12 733

原创 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 292

原创 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 192

原创 通过FFmpeg 来筛选合并视频文件的项目记录

程序收到消息后 根据日期时间戳去对应的目录检索是否符合要求的文件 比如某个时间段。没有的话 根据时间戳判断是否需要等待或者 返回没有检索到。检索到之后 将视频片段拼接成一个完整的视频文件。平台通过http下发json格式的消息。项目中用到 线程池 等待队列 等。Http服务用cpphttp。

2023-07-07 10:43:02 762

原创 ubuntu下 C/C++程序读取设置环境变量

读取的话 main函数多加一个env参数 一个字符串数组 然后遍历这个数组 即可。可以通过echo回显。

2023-07-04 14:57:35 795

原创 Photoshop 常用快捷键整理

反选 Ctrl+ Shift+i 或者Shift+F7。Camera Raw滤镜 Ctrl+Shift+A。调整图像大小Ctrl+Alt+i。选中/不选中 Ctrl+D。Ctrl+T 自由变换选区。填充选区Shift+F5。羽化 Shift+F6。Ctrl+ J复制图层。

2023-06-08 10:15:43 163

原创 QT + OpenGL + FFmpeg写的一个全景视频播放器

别的就是 camera的移动 以及openglmodel shader相关的代码了。切换到全景模式之后 随着鼠标的拖动 左边的窗口会显示对应的全景的一些坐标信息。对比了下 和insta360的还是不一样 和Detu的播放器效果是一样的。ffmpeg用的是软解 也没有做视频同步之类的 但是播放实时视频没有啥问题。效果如下 左边的窗口用于输入视频源 以及显示一些关于视频的一些信息。我们测试的RTSP是4K的 软解也没啥问题 记录下。网上搜了搜 基于前辈的基础上 写的差不多了。

2023-05-11 20:27:10 2173

原创 Visual Studio 2022 搭建GLFW OpenGL开发环境

包含了动态库和静态库 这里我们使用静态库 mt那个是multithread 多线程版本的。工作目录添加了一个3rd的目录用来存放第三方的库这里使用的是静态库glfw3.lib。为什么使用GLFW 因为GLFW是跨平台的 我下的是64位版本解压后有目录如下。设置lib库文件名 这里主要是glfw3.lib 和 opengl32.lib。b站有很多视频 按照视频 搭建了OpenGL的开发环境。先去GLFW的网站下载 windows平台的库文件。添加lib库目录 如下 链接器常规那里。

2023-05-06 11:24:02 1111

原创 学习ZLmediaKit流媒体服务器时候遇到的问题

另一个 directProxy ffplay播放只有音频的问题 也是不断加log 后来仔细对比 sdp报文 发现是在 setup构建sdp报文时候的问题。这个问题产生的原因就是 当初 这台服务器上 有关 ostream 的c++的库 有问题 会编译出错 (后来这个问题通过替换C++的so库解决了)第二个问题是directProxy设置为0的时候 推流的时候 然后用ffplay播放 只有音频没有视频。有问题的我的代码 看playload_type那里导致的问题。测试的时候发现有两个问题。

2023-04-27 17:36:04 1247

原创 ZLMediaKit 流媒体服务器RTSP推流时候 directProxy不同设置 时候的处理

先说结果 不开代理时候的最终为走到这里 由于这个是在头文件 无法下断点 所以把函数体写在cpp文件里 如下:涉及到文件:RtpCodec.h 和RtpCodec.cpp。这里的AudioTrack::inputFrame走到了基类的FrameDispatcher的inputFrame如下图。这样在去看调用堆栈就能看到走到onTrackFrame了 此函数根据不同的协议走到不同的inputFrame中 如下图。可以发现就是在MediaSink::inputFrame函数这里音视频走了不同的调用 函数如下。

2023-04-25 17:24:49 851

原创 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

断点断在 DemuxInputRtp 这个函数 这个是我改了名字的 之前是叫inputRtp 叫这个名字的函数太多了,所以给重新改了个名字 这样 看起来 会清晰一点。这个onRecv回调就是创建tcpserver的时候 根据不同的类型 比如HttpSession RtspSession 在其对应cpp文件中 去实现这个虚函数。所以 我的代码中会走到HttpSession的onRecv中 这个ProcessData函数也是我重新命名了。实现体就是 推流的走到这个onWrite函数。

2023-04-20 17:26:40 660

原创 ffmpeg ffplay常用 命令整理 rtsp rtmp推流

列出电脑的设备名称 比如摄像头 后面ffplay通过这里的名称进行编码推流。循环读取rabbit.mp4 并推送到rtsp服务器。从MP4文件提取aac文件。从aac文件解码PCM文件。ffplay播放pcm文件。以tcp方式播放rtsp流。

2023-04-14 11:55:28 5085

原创 ffmpeg 向流媒体服务器推RTSP 流时候的 交互过程以及接收到的 RTP包解析

以上是推流端向服务器推流的时候 的整个流程 之后就是媒体数据的发送了。正好最近在看流媒体服务器 中RTSP的部分 copy了下源码。然后在看下vlc播放端从此流媒体服务器拉流时候的过程。之前写了RTSP服务端 和客户端拉流之间的交互流程。借此机会 记录下rtsp推流时候和服务器交互的流程。编译下发现不能正常播放。

2023-04-14 10:58:01 685

原创 Ubuntu 开机启动 通过crontab定时器去检查脚本 实现

最后一行 check_qmcy.sh 即是 定时器将要执行的脚本 前面表示每隔5分钟执行一下这个脚本。通过ps 获取 nboard进程的数量 如果数量是 0 则启动 RumCmd.sh脚本去执行程序。没办法 网上搜了下 可以通过 crontab定时器去检查 程序是否启动。通过添加一个qmcy.service服务的方法 发现 确实执行脚本了。但是如果手动执行这个脚本 程序是能起来的 不知道为啥。没启动的话去 执行对应的脚本 把程序起来即可。nboard 是我们的程序的名字。但是脚本的程序缺并没有起来。

2023-04-13 16:50:12 780

原创 nm命令 以及 C++11 编译出现找不到stringstream 以及 undefined reference to `std::runtime_error

我们是64位的系统 默认用的是 /usr/lib/x86_64-linux-gnu/这个目录下的。后来偶然的机会发现 是libstdc++.so.6 太老了 找一个新的 替换掉这个就可以。使用nm命令查找下 发现 不管是32位还是64位的 c++的库里面都没有这个。首先找一下系统里面libstdc++.so.6这个库的位置。比如 找不到 std::runtime_error。最近在学习ZLMediaKit 源码。用这个正常的替换掉 默认路径的库即可。里面用到了很多C++11 的知识。

2023-04-12 11:01:23 474

原创 慢慢地咀嚼 ZLMediaKit 源码

往往大型项目中 为了 代码复用 会封装出来很多组件 层层嵌套 比如 最简单的一个tcp send函数 在这种大型项目中 要经过N层的 探索 你才能找到。但是zlmediakit过于庞大 学起来并不是那么容易 而且很多都是C++11的代码 ,之前还得先学下C++11 ,代码看起来 并不是那么容易。另外就是源码中使用了大量的回调函数 还是 c++11的 std::function那种 大量的 lamba的匿名函数。并不是严格按照ZL里面的来的 多数都是 被合并了。

2023-04-07 15:19:43 499

led2 20240411

led2 20240411

2024-04-11

LED-20240411

LED-20240411

2024-04-11

LED2.0线上稳定版本

LED2.0线上稳定版本 20240110 版本

2024-01-24

LED1.5 st稳定版本20240110

LED1.5 st稳定版本20240110 集成到ZD协议 线上运行 不死机版本

2024-01-24

推箱子代码 包含c语言 c++版本 动画用的是java的一个jar包

推箱子代码 包含c语言 c++版本 动画用的是java的一个jar包

2023-11-15

LED1.0部署程序压缩包

LED1.0部署程序压缩包

2023-06-13

led2.0程序部署需要文件

led2.0程序部署需要文件

2023-06-13

QT+ opengl + ffmpeg 写的 全景播放器

QT+ opengl + ffmpeg 写的 全景播放器

2023-05-12

rtsp server rtsp服务器 linux ubuntu版本 包括ffmpeg库

rtsp server rtsp服务器 linux ubuntu版本 包括ffmpeg库

2023-02-23

andorid 平台 代码 demux-rtsp for android

andorid 平台 代码 demux-rtsp for android

2022-10-15

2022 rk-crazy代码 for QMCY

2022 rk-crazy代码 for QMCY

2022-10-15

ubuntu下 利用qt做的rtsp /rtmp播放器 支持rtmp h265

ubuntu下 利用qt做的rtsp /rtmp播放器 支持rtmp h265 由于集成了ffmpeg静态库 所以 体积比较大

2022-09-02

Andorid 项目中使用FFmpeg拉取RTSP流 然后 推送到RTMP服务器

Andorid 项目中使用FFmpeg拉取RTSP流 然后 推送到RTMP服务器

2022-04-26

Android调用FFmpeg 拉rtsp流 获得h264原始压缩数据(Nalu数据)

Android调用FFmpeg 拉rtsp流 获得h264原始压缩数据(Nalu数据)

2022-04-17

rtmpH265 播放端 服务器端 推流端.zip

支持H265的RTMP 播放端 推流端 服务端 齐全了 可以直接拿来用

2021-12-16

ffmpeg_rtmp_h265.zip

windows下可以播放h265 rtmp的ffplay播放器

2021-12-14

nginx-rtmp-module-master.zip

nginx 关于rmtp的模块插件

2021-09-02

空空如也

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

TA关注的人

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