- 博客(159)
- 资源 (10)
- 收藏
- 关注
原创 Docker镜像制作之ZLMediakit镜像制作
项目中一直使用docker,但是还没有机会自己亲自制作一款,心里总有一些不痛快,最近一个小项目需要把rtsp转换为支持web原生播放的视频格式,经过多方对比最终选择了ZLMediakit,本博文就以ZLMediaKit镜像制作为例,介绍Docker镜像制作流程。基础知识补充:什么是Docker为什么要用Docker,这个连接应该是官方的,讲的很清晰,包括在Docker制作过程中可能用到的一些命令的具体含义都可以通过该连接学习。
2024-01-02 10:13:27 1186
原创 lamda表达式
我讨厌lamda表达式的另外一个重要原因是在之前的认知里lamda表达式的全部功能都能被函数替代,没有存在的必要。这段代码中为什么必须使用lamda表达式,问题在于index这个参数(包含了所需的行和列的信息),如果使用常用的普通函数作为槽函数,那么信号中无法发送index参数,因为在QT中槽函数的参数来源是信号中的参数,而此处的信号是一个点击事件,没有任何参数,所以普通的函数作为槽函数无法获取index这个参数,而lamda有一个优势就是可以使用两个作用域中的参数,刚好可以解决此问题。
2023-07-24 11:15:14 298
原创 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 310
原创 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 221
原创 支持硬件加速的opencv编译
为了降低cpu的使用率提升系统的接入能力,需要将编解码模块移至GPU处理,opencv默认的发行版中不支持GPU加速,所以需要重新编译opencv使其支持GPU硬件加速。make -j 后的数字需要参考本机的核数填写,不能超过本机的核数,本文编译时使用32核机器,核数查询可以通过nproc命令查询。有时候系统中默认的python为软连接,连接目标是python2,删除该软连接,创建新的软连接,连接至python3。cuda运行时库:NVIDIA发布的用来使用GPU的底层依赖库,可从NVIDIA官网获取。
2023-06-20 09:52:34 1863
原创 支持硬件加速的ffmpeg编译
为了降低cpu的使用率提升系统的接入能力,需要将编解码模块移至GPU处理,ffmpeg默认的发行版中不支持GPU加速,所以需要重新编译ffmpeg使其支持GPU硬件加速。
2023-06-19 11:28:14 1381
原创 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 3001
原创 新版本Wireshark导出视频流
wireshark旧版本可以导出负载,但是升级新版本后没有对应的导出按钮,所以很多人不知道该如何导出视频流,以至于单单为了导出视频这一功能很多人依旧使用旧版本。今天给大家分享一下我是如何新版本中导出视频流的。
2023-01-29 17:25:21 2218 1
原创 QT国际化之tr()使用
在正式简绍之前先说点题外话,刚接触qt时,部分功能需要查询网络资料,现在回过头来看有一点非常让人意外,就是网络上对tr()使用的介绍,之前看了网上有大量类似下面这样的用法:tr("系统设置")了解之后可以很负责任的分享给新入坑的同学,tr()中包含中文,完全是坑爹的误导,如果再代码中出现,首先可以肯定的是作者根本不知道tr()的用法。借着这个背景我们开始分享QT国际化。所谓国际化就是让同一软件服务于不同语言的使用人员,比如中文、英文。这种场景下有没有可能只编写一个版本的程序实现呢?答案是肯定的,qt
2022-07-13 15:08:14 2015
原创 ffmpeg使用之硬件加速(命令行方式)
1、查看当前ffmpeg支持的硬件加速方式;ffmpeg -hwaccels2、查看当前ffmpeg支持的硬件解码器ffmpeg -decoders | grep Nvidia3、查看当前ffmpeg 支持的硬件编码器ffmpeg -encoders | grep Nvidia4、硬解码使用命令ffmpeg -hwaccel cuda -i rtsp://admin:Sf%[email protected]/Streaming/Channels/1 -c:v
2022-05-24 09:09:13 2413
原创 SDL2之SDL_OpenAudioDevice无法播放声音
最近在自己抽时间做一个通用的视频监控客户端,通过rtsp协议获取媒体流然后解码渲染,在这个过程中发现音频流比视频流慢大概4~5秒,初步怀疑是音频播放模块引发的。旧的音频播放使用SDL_OpenAudio、SDL_PauseAudio加回调实现,因为回调中何时读取音频数据不由我的程序控制,怀疑问题出现在这里,查看SDL2相关资料后发现有新的音频播放接口代替SDL_OpenAudio,即SDL_OpenAudioDevice,但是使用过程中发现,切换为SDL_OpenAudioDevice播放音频时一直没有
2021-07-22 22:54:20 1652 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 190
原创 使用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 774
原创 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 5325 3
原创 git技能——添加与提交tag
1、添加taggit tag v0.2.0 -m"use sdl render audio."2、提交taggit push --tags
2020-10-17 15:40:47 432
原创 音视频打包格式之 “planar“ and “packed“
我们经常回看到视频格式后缀会有包含 "planar" 或 "packed"。这两者有什么区别呢?今天我们来谈一谈。其实很简单,以YUV数据来举例,对于YUV数据如果是packed形式的,我们就可以知道视频数据中YUV数据是将YUV打包在一起(YUV数据交错)放置的,比如“YYYYUUYYYYVVYYYYUUYYYYVVYYYYUUYYYYVV......”。如果是planar形式的,那么我们就可以知道视频数据中YUV是分区域(平面)放置的,比如“YYYYYYYYYYYYYYYYUUUUUUVVV
2020-08-02 15:37:22 512
转载 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 332
原创 qt自定义类使用qss
默认情况下qss只能用来控制qt默认类的样式控制,如果我们想让我们自定义类也受qss控制,可以在自定义类的构造函数中增加:setAttribute(Qt::WA_StyledBackground,true);注:此处自定义类继承自qt默认类...
2020-06-04 16:59:03 1673
原创 h264之DTS、PTS
I 帧可以独立解码出一幅完整的图像,而 P 帧、B 帧不行。P 帧需要依赖视频流中排在它前面的帧才能解码出图像。B 帧则需要依赖视频流中排在它前面或后面的帧才能解码出图像。这就带来一个问题:在视频流中,先到来的 B 帧无法立即解码,需要等待它依赖的后面的 I、P 帧先解码完成,这样一来播放时间与解码时间不一致了,顺序打乱了,那这些帧该如何播放呢?这时就需要我们来了解另外两个概念:DTS 和 PTS(详见下边说明)。DTS、PTS 的概念如下所述: DTS(Decoding Time ...
2020-05-11 10:28:06 1117
原创 Windows下编译x264
准备1、x264源码2、MSYS23、Mingw-w64(mini gnu for windows)x264源码"https://code.videolan.org/videolan/x264.git"MSYS2和Mingw-w64参见"https://blog.csdn.net/heibao111728/article/details/105813452"编译PKG_C...
2020-05-04 14:43:50 219
原创 vs使用mingw生成的动态库
1、使用mingw编译生成动态库*.dll;2、使用vs工具通过*.dll生成*.lib;创建vs需要的lib文件创建def文件,这要用一个第三方的工具pexports,可以在mingw中使用命令mingw-get install pexports进行安装。$ pexports liblinphone-4.dll > linphone.def$ pexports libmedi...
2020-05-03 17:35:49 2876 1
原创 编译Windows平台下使用的ffmpeg
ffmpeg官网只提供了ffmpeg源码,在Linux下可以比较方便的编译,如果使用的是centos操作系统可以参考"http://trac.ffmpeg.org/wiki/CompilationGuide/Centos"但是Windows的编译比较扯淡,主要原因在于Windows编译动态库的时候需要增加一些非标准c++的语法,ffmpeg并没有对其做适配,所以一般情况下我们有两种方式可以编译...
2020-04-28 14:53:20 1025
原创 Windows程序退出后后台依然存在该进程
对于这类型的问题,80%的概率是发生在我们自己写的代码本身,并且80%的概率是发生在多线程程序中,当我们的客户端线程在主线程退出后才开始退出就会导致该问题发生,所以解决该问题的本质办法就是确保我们自己的客户线程一定得在主线程退出之前结束退出。...
2020-04-27 11:56:46 3008
原创 c++Debug版本程序可以正常运行,release版本不行
相信很多行友都遇到过这个问题,在debug模式下程序可以稳定的运行,但是当产品交付的时候切换至release版就各种出问题,并且由于release版不能调试没法定位问题。一旦发生了这种问题给大家指条明路,挨个去排查是不是有些变量没有赋初值导致(90%的概率是因为此问题导致)。...
2020-04-26 16:18:27 1596
原创 QT获取顶级窗口指针并不是准确的顶级窗口指针解决办法
在QT中我们可以通过topLevelWidget()函数获取顶级窗口指针,但是获取到的顶级窗口指针并不是该窗口创建的时候的使用的顶级窗口指针,语句如下:MainWindow* parentWidget1 = (MainWindow*)topLevelWidget();但是通过调试发现parentWidget1 值与创建该窗口时使用的顶级窗口指针不同,通过查阅资料获取到一种可以准确获取顶...
2020-04-23 11:24:09 1810
原创 QT视频客户端全屏后视频卡住解决办法
QT编写视频监控客户端全屏后会发生视频卡住的问题,该问题的解决办法是重载showEvent事件,按照如下方式实现。void VideoCanvas::showEvent(QShowEvent * event){ this->setAttribute(Qt::WA_Mapped); QWidget::showEvent(event);}...
2020-04-15 14:12:45 1078
原创 QT+SDL2,视频渲染屏幕闪烁解决办法
最近在使用ffmpeg+sdl2+qt编写视频监控客户端,发现一个问题:使用SDL渲染视频的时候屏幕一直闪烁,通过资料查询和网上求助有一些解决办法,即重载paintEngine()函数,但是重载该函数会造成一些意想不到的后遗症,且QT帮助文档中也明确说明客户不需要关注paintEngine()的实现,那么有没有不用重载paintEngine()函数,就可以解决该问题的办法呢?首先我们得用清楚问题的...
2020-04-15 11:50:57 1819
原创 QT在开发环境中打开应用程序与双击exe程序界面不一样
今天发现一个问题:“QT在开发环境中打开应用程序与双击exe程序界面不一样”,通过网上查资料该问题已解决特记录一下。首先总结一下问题的根因:因为开发环境中由开发环境负责加载资源信息,而双击生成的exe开发环境不会为其加载资源信息,所以会感觉界面有些资源没有加载成功,或者直接无法运行。解决办法就是通过qt自带工具(windeployqt.exe)去为exe生成所需的资源信息以及收集所依赖的动态库...
2020-04-06 11:47:41 749
live555windows项目
2018-05-12
RFC3984.pdf
2018-05-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人