自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

heibao111728的博客

草在结她的种子;风在摇她的叶子;我们站着,不说话;就十分美好

  • 博客(170)
  • 资源 (10)
  • 收藏
  • 关注

原创 基于OSip协议栈的GB28181视频平台--log4cplus使用

推荐选择2.0.8版本,原因可参考本专栏协议栈选型部分文章。

2025-08-06 10:42:51 227

原创 基于OSip协议栈的GB28181视频平台--jrtplib编译与使用

互联网上传输媒体流(视频、音频)一般是通过rtp协议传输,rtp协议是基于udp的应用层协议,手动实现rtp数据的传输发送是一个挺具有技术挑战的任务,要研究RFC3550,并按里面的要求实现传输逻辑。好在c、c++有开源的rtp协议栈供开发人员使用。jrtplib是一个使用c++编写的开源rtp协议栈,用户能够发送和接收RTP数据,而无需担心SSRC冲突、调度和传输RTCP数据等问题。用户只需提供有效负载数据,库会处理RTP和RTCP数据的传输。

2025-08-04 14:57:12 746

原创 基于OSip协议栈的GB28181视频平台--国标鉴权处理

在电话普及之前,假如你要去相关部门办理业务,首先你会找到办事窗口,告诉工作人员你要办理的业务(类似上图流程1);第四步:将步骤三生成的response与注册请求中携带的response参数比对,如果相同则说明成功,如果不同,则说明失败。上述参数中pwd为线下提供,只有通信双方知道、在网络中并不传输,只参与运算,这样既能保证pwd的安全性,又能验证客户端是否是授权的客户。第三步:对A1、nonce、nonceCount、cnonce、qop、A2几个参数进行md5加密生成response;

2025-08-01 11:02:41 666

原创 基于OSip协议栈的GB28181视频平台--OSip编译与使用

本专栏前面文章有介绍过,本产品的sip协议栈选用的是osip协议栈,本文记录osip协议栈的获取,编译及使用。

2025-08-01 09:41:13 682

原创 基于OSip协议栈的GB28181视频平台-产品组成介绍

zlm:zlmediakit,开源的转协议服务,用于将rtp流转为web端支持的格式;cms:信令服务,用于对接前端设备与其他服务,是整个产品的核心;本产品共由cms、ms、pgs三个核心服务构成,各服务功能如下。pgs:信令网关,用于将http等协议转换为sip协议;ms:流媒体服务,用于中转媒体流;

2025-08-01 09:15:42 146

原创 基于OSip协议栈的GB28181视频平台

作为高速公路服务单位,视频监控平台是核心基础平台之一,历史项目中曾采购过几家第三方公司产品。尤其是当业主单位提出新的建设性意见时,由于产品不是自研,没有源代码,对业主的意见不能做到及时响应。目前我们产品已经成型,效果图如下,我会将整个开发过程中遇到的技术难点、解决方案以及产品选型等过程,记录为一系列文章,以便自己与后来人员学习。整个高速公路服务单位中,视频监控平台的提供商有好几家,为了能与各厂家产品顺利对接,本次产品开发基于GB/T28181。1、基于OSip协议栈的GB28181视频平台--协议栈选型。

2025-07-30 15:21:16 252

原创 动态库中宏定义与主程序宏定义值不同时,程序以哪个为准?

直接先给结论:主程序代码以主程序中宏值为准,库中代码以库中宏值为准,相互之间不干扰,所以在使用第三方库时如果遇到宏定以值,主程序一定要手动将值与动态库中保持一致,否则程序就会报错,下面我们以jrtplib库的RTP_SUPPORT_THREAD值为例,一起验证一下。在日常的工作中,不可避免的要使用一些第三方库,有的时候第三方库提供了一下宏定义值,根据不同的宏定义值会有不同的响应。此时就出现一个冲突,主程序中的宏值与编译动态库时的宏值不同时,在程序运行过程中会以主程序中的值为准还是以动态库中的值为准?

2024-12-20 11:10:37 299

原创 sip核心头域作用说明

Record-Route头域一般是被proxies插入到request中的,这样后续的Request如何有着和前面一样的call-id就会被路由 到这些proxies。后续Request将根据Contact头域的内容决定目的地的地址,同时将Contact头域的内容放到Request-URI中。总的来说,如果有Route,request就应该根据Route发送,如果没有就根据Contact头域发送,如果连Contact都没有,就根据From头域发送。的建立是收到UAS的响应(To tag)时开始建立的。

2024-09-02 16:01:06 916 1

原创 c++将utf8转gb2312

2、转换iconv(conv, utfBuf, utfBufLen, gb2312Buf, gb2312BufLen);1、打开iconv_t conv = iconv_open("gb2312", "utf-8")3、关闭iconv_close(conv);

2024-07-12 17:33:20 951

原创 eXosip协议栈构造Info应答并发送

最开始构造INFO的应答时给接口传入的tid是Invite请求创建的事务,将Invite请求创建的事务tid传递给接口让生成INFO的应答,肯定会失败。最近在开发GB28181视频监控平台,对于录像的暂停、倍速等控制是通过INFO消息完成的,但是eXosip协议栈没有明确说明该如何去构造INFO消息的应答。通过对源代码的解读,是使用eXosip_call_send_answer接口去构造,参考了一些博客,发现大家使用该接口去构造INFO的应答时会失败。

2024-06-26 16:49:48 402

原创 Docker镜像制作之ZLMediakit镜像制作

项目中一直使用docker,但是还没有机会自己亲自制作一款,心里总有一些不痛快,最近一个小项目需要把rtsp转换为支持web原生播放的视频格式,经过多方对比最终选择了ZLMediakit,本博文就以ZLMediaKit镜像制作为例,介绍Docker镜像制作流程。基础知识补充:什么是Docker为什么要用Docker,这个连接应该是官方的,讲的很清晰,包括在Docker制作过程中可能用到的一些命令的具体含义都可以通过该连接学习。

2024-01-02 10:13:27 2527

原创 视频监控平台客户端开发记录

所用到的核心技术。

2023-09-28 15:21:31 352

原创 lamda表达式

我讨厌lamda表达式的另外一个重要原因是在之前的认知里lamda表达式的全部功能都能被函数替代,没有存在的必要。这段代码中为什么必须使用lamda表达式,问题在于index这个参数(包含了所需的行和列的信息),如果使用常用的普通函数作为槽函数,那么信号中无法发送index参数,因为在QT中槽函数的参数来源是信号中的参数,而此处的信号是一个点击事件,没有任何参数,所以普通的函数作为槽函数无法获取index这个参数,而lamda有一个优势就是可以使用两个作用域中的参数,刚好可以解决此问题。

2023-07-24 11:15:14 399

原创 osip开源库在windows平台上编译

之前写过一篇关于sip协议栈选型的文章,最终采用了2.3.6版本,文章中说明了为什么采用osip协议栈,以及为什么采用2.3.6版本。现在Linux上的产品已经基本满足需求了,接下来我们打算开发一套客户端和服务端对接,考虑到windows与Linux使用同一套源码,减低维护成本,所以在windows下我们依旧选择2.3.6版本,在编译的时候遇到一些坑,在此记录一下,方便自己和道友后续参考。我使用的编译硬件环境是windows10 + vs2017。

2023-06-25 11:21:21 557

原创 QT中.pro文件常用配置

在.pro文件中增加下面一句话:#specify ui directory.UI_DIR=./UI

2023-06-20 10:27:08 376

原创 docker 操作手册

docker run --network=host -d --name darwin darwin:v1 //创建名为darwin的容器,并将镜像darwin的v1 tag装在该容器中运行。docker update --restart=always ecf6f32646c6 //设置id为” ecf6f32646c6”的容器随docker启动而启动。Docker rm goofy_bohr //删除名为goofy_bohr的容器。docker start mysql //启动mysql容器。

2023-06-20 10:24:30 312

原创 支持硬件加速的opencv编译

为了降低cpu的使用率提升系统的接入能力,需要将编解码模块移至GPU处理,opencv默认的发行版中不支持GPU加速,所以需要重新编译opencv使其支持GPU硬件加速。make -j 后的数字需要参考本机的核数填写,不能超过本机的核数,本文编译时使用32核机器,核数查询可以通过nproc命令查询。有时候系统中默认的python为软连接,连接目标是python2,删除该软连接,创建新的软连接,连接至python3。cuda运行时库:NVIDIA发布的用来使用GPU的底层依赖库,可从NVIDIA官网获取。

2023-06-20 09:52:34 3125

原创 支持硬件加速的ffmpeg编译

为了降低cpu的使用率提升系统的接入能力,需要将编解码模块移至GPU处理,ffmpeg默认的发行版中不支持GPU加速,所以需要重新编译ffmpeg使其支持GPU硬件加速。

2023-06-19 11:28:14 2067

原创 cmake 添加-g 编译选项的几种方式

在执行make 时添加“VERBOSE=1”,如果想加速编译速度,可以添加 -j 10 选项,后面的数字的最大值为本机的处理器核数。有时候我们需要用gdb调试程序,需要为程序添加“-g”编译选项,那么cmake构建的项目该如何添加“-g”编译选项呢?此处收集了两种方式;修改CMakelist.txt, 添加“add_definitions("-Wall -g")”行;执行cmake时,添加-DCMAKE_BUILD_TYPE=Debug编译选项。建议使用第二种,可以不用改变CMakelist.txt。

2023-06-09 10:11:08 4727

原创 基于OSip协议栈的GB28181视频平台--协议栈选型

基于OSip协议栈的GB28181视频平台--sip协议栈选型

2023-03-27 10:52:49 860

原创 新版本Wireshark导出视频流

wireshark旧版本可以导出负载,但是升级新版本后没有对应的导出按钮,所以很多人不知道该如何导出视频流,以至于单单为了导出视频这一功能很多人依旧使用旧版本。今天给大家分享一下我是如何新版本中导出视频流的。

2023-01-29 17:25:21 3950 3

原创 linux网络配置命令nmcli

linux网络配置命令nmcli

2022-10-27 10:01:43 242

原创 Qt 编程经验

qt 编程经验

2022-08-10 16:23:50 152

原创 ffmpeg AVFrame保存至内存

AVFrame保存至内存

2022-07-13 15:21:56 1416

原创 QT国际化之tr()使用

在正式简绍之前先说点题外话,刚接触qt时,部分功能需要查询网络资料,现在回过头来看有一点非常让人意外,就是网络上对tr()使用的介绍,之前看了网上有大量类似下面这样的用法:tr("系统设置")了解之后可以很负责任的分享给新入坑的同学,tr()中包含中文,完全是坑爹的误导,如果再代码中出现,首先可以肯定的是作者根本不知道tr()的用法。借着这个背景我们开始分享QT国际化。所谓国际化就是让同一软件服务于不同语言的使用人员,比如中文、英文。这种场景下有没有可能只编写一个版本的程序实现呢?答案是肯定的,qt

2022-07-13 15:08:14 2233

原创 ffmpeg使用之硬件加速(命令行方式)

1、查看当前ffmpeg支持的硬件加速方式;ffmpeg -hwaccels2、查看当前ffmpeg支持的硬件解码器ffmpeg -decoders | grep Nvidia3、查看当前ffmpeg 支持的硬件编码器ffmpeg -encoders | grep Nvidia4、硬解码使用命令ffmpeg -hwaccel cuda -i rtsp://admin:Sf%23123jtdz@20.97.94.203/Streaming/Channels/1 -c:v

2022-05-24 09:09:13 3535

原创 RTSP推流

rtsp协议推流流程

2022-04-05 21:35:47 4964 1

原创 SDL2之SDL_OpenAudioDevice无法播放声音

最近在自己抽时间做一个通用的视频监控客户端,通过rtsp协议获取媒体流然后解码渲染,在这个过程中发现音频流比视频流慢大概4~5秒,初步怀疑是音频播放模块引发的。旧的音频播放使用SDL_OpenAudio、SDL_PauseAudio加回调实现,因为回调中何时读取音频数据不由我的程序控制,怀疑问题出现在这里,查看SDL2相关资料后发现有新的音频播放接口代替SDL_OpenAudio,即SDL_OpenAudioDevice,但是使用过程中发现,切换为SDL_OpenAudioDevice播放音频时一直没有

2021-07-22 22:54:20 2296 1

原创 局域网搭建cengtos8 yum源

前言准备Nginx服务器;Rpm包;规划Rpm包放在/media/路径下;http根目录设置为/media/;media的目录结构如图1所示(repodata文件家可以不上传,可以使用createrepo命令生成)图1本地源本部分后续补充;挂载光盘镜像创建存放iso镜像文件的目录“mkdir “/iso””将镜像文件拷贝至服务器“/iso/”路劲下;创建目录“mkdir /mnt/Centos8-1905/”执行“mount /iso/Cent

2021-03-30 14:50:45 247

原创 Windows下查看所有环境变量

打开cmd,输入set

2021-01-28 10:54:44 2557

原创 使用cmake在Windows下编译libevent

1、下载安装cmake2、下载libevent3、将cmake.exe所在路径添加至PATH环境变量中;4、进入libevent-master目录,创建build文件夹(md build)5、进入build,执行“cmake .. -D EVENT__DISABLE_OPENSSL=ON -D EVENT__DISABLE_MBEDTLS=ON -D EVENT__DISABLE_TESTS=ON” (-D选项后面的字段可以从CMakeLists.txt文件中查找)...

2021-01-22 17:40:10 1031

原创 win10 搭建sftp服务器

1、安装openssh(一般系统自带)路径为:“c:/Windows/System32/OpenSSH/sshd”;2、更改配置文件指定ftp根路径 更改“C:\ProgramData\ssh\sshd_config”文件,在文件最后添加“ChrootDirectory d:/sftpRoot”3、启动sshd服务 以管理员执行“net start sshd”完工,使用xftp即可登录,用户名、密码为Windows系统用户名和密码...

2021-01-21 14:21:42 5915 3

原创 git技能——添加与提交tag

1、添加taggit tag v0.2.0 -m"use sdl render audio."2、提交taggit push --tags

2020-10-17 15:40:47 515

原创 音视频打包格式之 “planar“ and “packed“

我们经常回看到视频格式后缀会有包含 "planar" 或 "packed"。这两者有什么区别呢?今天我们来谈一谈。其实很简单,以YUV数据来举例,对于YUV数据如果是packed形式的,我们就可以知道视频数据中YUV数据是将YUV打包在一起(YUV数据交错)放置的,比如“YYYYUUYYYYVVYYYYUUYYYYVVYYYYUUYYYYVV......”。如果是planar形式的,那么我们就可以知道视频数据中YUV是分区域(平面)放置的,比如“YYYYYYYYYYYYYYYYUUUUUUVVV

2020-08-02 15:37:22 652

转载 VS2015打包程序

使用Visual Studio Installer打包安装项目【VS+Qt项目开发系列】(八) - 罗先森何其有幸的博客 - CSDN博客 https://blog.csdn.net/lhl1124281072/article/details/80046527添加项目编译与打包所依赖的dll文件【VS+Qt项目开发系列】 - 罗先森何其有幸的博客 - CSDN博客 https://blog.csdn.net/lhl1124281072/article/details/80033287Visua...

2020-07-06 11:48:21 395

转载 m3u8

靠谱网址https://www.jianshu.com/p/e97f6555a070

2020-06-23 10:22:06 1200

原创 qt自定义类使用qss

默认情况下qss只能用来控制qt默认类的样式控制,如果我们想让我们自定义类也受qss控制,可以在自定义类的构造函数中增加:setAttribute(Qt::WA_StyledBackground,true);注:此处自定义类继承自qt默认类...

2020-06-04 16:59:03 1892

原创 h264之DTS、PTS

I 帧可以独立解码出一幅完整的图像,而 P 帧、B 帧不行。P 帧需要依赖视频流中排在它前面的帧才能解码出图像。B 帧则需要依赖视频流中排在它前面或后面的帧才能解码出图像。这就带来一个问题:在视频流中,先到来的 B 帧无法立即解码,需要等待它依赖的后面的 I、P 帧先解码完成,这样一来播放时间与解码时间不一致了,顺序打乱了,那这些帧该如何播放呢?这时就需要我们来了解另外两个概念:DTS 和 PTS(详见下边说明)。DTS、PTS 的概念如下所述: DTS(Decoding Time ...

2020-05-11 10:28:06 1280

原创 ffmpeg+directx硬件加速

https://my.oschina.net/u/4257943/blog/3246410/print

2020-05-08 10:30:00 830

原创 windows下查看库文件中的函数列表

dumpbin /exports .\avcodec.lib

2020-05-05 10:08:44 1250

rfc2250.pdf

RTP_Payload_Format_for_MPEG1_MPEG2_Video-rfc2250.pdf

2018-05-09

rtsp协议,rfc2326书签版

rtsp协议,rfc2326书签版

2022-04-05

Centos8搭建本地yum源与局域网yum源.docx

局域网搭建centos8 yum源,使用http协议,nginx服务器

2021-03-30

RFC3984.pdf

RTP_Payload_Format_for_H.264 Video-rfc3984官方文档,来源与国际电信联盟官方网站,是H264编解码处理必须阅读的文档

2018-05-09

ISO_ICE_14496-12

mp4格式文件的官方说明文件,为了阅读方便手动添加了书签。

2018-10-29

T-REC-H.264-200503-S2PDF-C(中文版).pdf

该资源为h264编码的标准文档,介绍了h264编码流程以及SPS、PPS等相关概念

2018-05-22

JpegSnoop_V1.8

所谓欲善其功,需先利器。 作为媒体开发者,我们少不了使用各种工具帮我们分析媒体数据,这里介绍一款jpeg图像分析工具:JPEGsnoop

2018-09-25

live555windows项目

本项目完成了live555库在windows环境下的编译工作,如果你想做一个windows环境下的rtsp客户端或者服务器那么这些库将是你不可缺少的。

2018-05-12

YUV420详解.xlsx

该文档对YUV420的存储方式做了一个图形化的诠释,可结合该文档所在的博文进行学习

2018-09-19

空空如也

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

TA关注的人

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