- 博客(80)
- 问答 (1)
- 收藏
- 关注
原创 ubuntu使用gparted工具扩容
在使用ubuntu的过程中,由于创建ubuntu系统时申请的空间比较少可能会导致ubuntu空间不足,影响使用;但是重新安装一个ubuntu又需要拷贝现有的资料,费时费力;现在分享一个使用gparted工具扩容的方法,方便以后的开发;提醒:再扩容前最好对ubuntu做备份,以免操作失误导致系统无法启动;
2025-03-30 15:32:36
801
原创 linux之时间服务器
在项目开发中,各个模块的时间同步是一个重要的机制;那么如何在linux上搭建时间服务器呢?并且客户端怎么与服务器进行时间同步呢?
2024-11-14 10:39:03
671
原创 c语言实现线程池,新手秒懂
其实,无限循环的线程基本不会添加到线程池中,线程池就是为了缓解频繁创建,销毁线程占用大量资源而创建的,而无限循环的线程不存在频繁创建和销毁所以就不需要线程池;添加进线程池的线程线存放在队列中,如果有空闲的执行线程,会被取走执行;如果把无限循环的线程添加到线程池,会一直占用线程池的执行线程,导致这个执行线程不能处理其他任务造成资源浪费;2.如果要求并发性,异步性,那么就需要运用线程,但是为了效率,就需要使用线程池来管理这些线程;初始化线程池信息结构体,创建执行数量的线程用于执行队列中的任务;
2024-07-24 11:13:40
574
原创 live555搭建实时播放rtsp服务器
createNewStreamSource函数是需要我们实现的函数,函数创建了H264FramedLiveSource类对象,这个类对象就是我们实现doGetNextFrame函数的类;当然live555源码的实现技巧,运行流程也是很值得借鉴的;live555可以说是rtsp的专项库,既可以搭建rtsp服务器,也可以搭建rtsp客户端;FramedSource类中只有一个doGetNextFrame纯虚函数,用于获取媒体流,其他不用实现;我是以帧的方式获取的视频流,在实际的开发中,不一定非要一次取一帧;
2024-07-19 09:36:01
2520
1
原创 live555 rtsp服务器实战之createNewStreamSource
live555用于实际项目开发时,createNewStreamSource和doGetNextFrame是必须要实现的两个虚函数,一般会创建两个类来实现这两个函数:假如这两个类为H264LiveVideoServerMediaSubssion和H264FramedLiveSource;H264LiveVideoServerMediaSubssion为实时视频会话类,用于实现createNewStreamSource虚函数;
2024-07-15 14:35:48
548
原创 live555关于RTSP协议交互流程
在构造函数中setBackgroundHandling会把客户端套接字fOurSocket和对应的处理函数incomingRequestHandler添加到闭环双链表中,在doEventLoop中循环遍历,客户端有信令交互就调用相关的处理函数;UDP流媒体传输服务器需要创建两个四个UDP套接字,用于传输音频RTP,音频RTCP,视频RTP,视频RTCP;该文档是以H264的传输为例所以只介绍视频RTP端口,视频RTCP端口的创建过程,音频类似;TCP流媒体传输使用的时信令交互的套接字,这里不做解释;
2024-07-13 16:37:52
978
原创 live555的核心数据结构值之闭环双向链表
描述:一个节点保存有前一个节点的地址和后一个节点的地址,并且最后一个节点的下一个节点地址指向第一个节点,第一个节点的前一个节点的地址指向最后一个节点;该链表的添加方式为头插法;
2024-06-27 10:12:43
536
原创 vscode linux项目插件global扩展安装
vscode经常用来编辑linux系统下的项目;但是经常出现一些小问题;例如代码导航:有时想要跳转到函数定义时会提示:未找到xxx的任何定义;更奇怪的是有的函数可以跳转有的函数不能跳转;理论上来说C/C++插件已经具备函数导航功能可是不知道为什么失效;遇到这种情况可以安装C/C++ GNU Global插件来解决。描述:提供使用 GNU Global 的 C/C++ 智能感知功能。插件描述上也描述了global的安装方法,不过在linux上安装与上述有所不同;
2024-06-24 17:36:08
989
原创 linux命令提示符设置
当然以上都是属于临时的设置;关机后就不存在;可以将export命令 保存到~/bashrc或者/etc/profile或者/etc/bash.bashrc等启动脚本中;每次启动都会进行配置;
2024-06-13 13:34:52
572
原创 ffmpeg实现媒体流解码
本期主要讲解怎么将MP4媒体流的视频解码为yuv,音频解码为pcm数据;在此之前我们要先了解解复用和复用的概念;解复用:像mp4是由音频和视频组成的(其他内容流除外);将MP4的流拆分成视频流(h264或h265等)和音频流(AAC或mp3等);复用:就是将音频和视频打包成MP4或者flv等这些媒体格式;因此要实现MP4媒体流的解码流程如下:代码分为四部分:打开输入文件,寻找视频解码器,寻找音频解码器,解码。
2024-03-24 16:46:19
915
原创 推荐一款很不错的vscode高亮插件
用过很多款高亮插件,总感觉大部分显示都很乱,但是其中有一款用起来很清晰明了,很喜欢!底色高亮让人感觉很清晰,一个好的高亮插件能让你快速了解程序的运行过程,让人舒畅!插件名字:select-highlight-cochineal-color。
2024-03-22 09:23:48
747
原创 ffmpeg 滤镜实现不同采样率多音频混音
音频混音在音视频开发中是十分重要的一个环节,所谓音频混音就是将所有需要混音的数据相加得到混音数据,然后通过某个算法进行非法数据的处理;例如相加数值超过最大值,最小值等!在实际的音频开发中,要实现混音的流程如下:因此我们的编码实现就分为五部分:寻找解码器,音频解码,混音,创建编码器,音频编码;
2024-03-17 16:14:37
1305
原创 ffmpeg之avformat_alloc_output_context2
功能:查找根据format_name或者filename或者oformat输出类型,并且初始化ctx结构。参数:ctx:AVFormatContext结构体,ffmpeg核心结构体,会在函数内部给ctx分配AVFormatContext空间并初始化。oformat:指定输出格式的 AVOutputFormat 结构体指针。可以使用 NULL,此时将根据 format_name 自动选择输出格式。
2024-02-20 19:32:12
1100
原创 linux 测试网络速率
ethtool是很强大的查询网卡(嵌入式称为phy芯片)配置的工具,几乎phy芯片芯片手册寄存器能配置的选项,ethtool都能查询到;phy芯片一般分为10base,100base,1000base;Speed: 1000Mb/s能说明网卡处于1000base模式,实际速率相差不多;就是当前网络的速率;这里的Speed: 1000Mb/s只能说明phy芯片最大速率能达到1000Mb/s;网络自适配是否打开,工作模式(全双工,半双工),速率等信息;phy芯片支持的端口,支持的链接模式;
2024-02-19 17:26:05
1590
2
原创 linux互斥锁:递归锁,非递归锁用法详解
在实际的项目中经常涉及到共享资源,共享资源被多个线程访问会出现竞争现象;为了解决竞争和保护共享资源常用的机制之一就是互斥锁!互斥锁又分为递归锁和非递归锁,互斥锁默认是非递归锁,也是我们常用的上锁方式。那么什么是递归锁和非递归锁呢?
2024-02-04 15:20:45
636
原创 aiXcoder自动跳出
在使用vscode时突然提示:需登录aixcoder才可以继续使用;在设置里搜索自动更新:将Update:Mode项改为none即可继续使用,需要重启vscode。文件->首选项->设置;(最好在扩展里所有aixcoder,如果已经安装最好卸载掉)后面可能要收取费用,本着白嫖的宗旨思考:那么怎么恢复原来的版本呢?
2024-01-23 10:51:29
570
原创 linux信号处理机制
注意:SIGKILL和SIGSTOP这两个信号不在处理范围内,SIGKILL和SIGSTOP是两个特殊的信号,具有特殊的行为和权力。除了这种方式,还有一种操作信号集的方式更为精确,能够屏蔽,添加,删除,操作等某个信号。检查某个信号signum是否在信号集set中。将某个信号signum添加到信号集set。将某个信号signum从信号集中删除。set:用来存储信号集的值。set:用来存储信号集的值。signum:某个信号。signum:某个信号。signum:某个信号。成功:0,失败:-1。
2024-01-19 11:59:51
454
原创 vscode无法自动补全
扩展->c/c++->Intellisense,找到Intelli Sense Engine Fallback 或者直接在设置里搜Intelli Sense Engine Fallback,将该选项设置为enabled;c/c++插件功能非常强大,几乎能满足日常编码过程中常用的功能;前提:安装c/c++插件。完成后代码即可自动补全。
2024-01-13 16:29:23
3091
原创 linux tcpdump能抓到包但是应用程序不能收到包
tcpdump命令能抓到过来的数据包,可是应用程序的recvfrom等套接字接收函数无法接收数据包;原因可能是各种各样的;由于疏忽不用时没有关闭所有的套接字,导致套接字越来越多,系统和单个进程都是有文件描述符上限的;太多的文件描述符就会导致应用程序的recvfrom等套接字接收函数出现问题;在网络编程项目中会遇到各种各样的网络问题,原因往往是多种多样的,在网上不会找到一个满意的答案;由于我的项目中的另外一个进程:在使用某功能时会创建很多套接字(文件描述符);我的好像是五百多个文件描述符就出现这个问题。
2024-01-11 11:45:56
2158
1
原创 linux文件描述符管理
在实际的项目开发中,文件描述符是经常用到的并且在释放资源过程中也是很容易忽略的,使用之后不释放就会增加cpu负担,无异于内存泄漏;所以时刻掌握文件描述符的状态是非常重要的!下面介绍文件描述符的管理方法。这个命令会输出三个数字,分别表示已分配的文件描述符数量、已分配但尚未使用的文件描述符数量和系统可用的最大文件描述符数量。已分配的文件描述符数量就是当前正在被使用的文件描述符数量。0:文件描述符编号;/dev/pts/2:文件描述符对应的文件;该可以查看文件描述符资源是否释放干净。
2024-01-10 18:01:27
1016
原创 VScode右键没有go to definition选项
3.3. 如果C_CPP:intelli Sense Engine的配置是disabled;则下拉选择default;3.2. 在搜索框中搜索intelli Sense Engine (需要先安装C/C++)1.2. win重装系统,重新安装vscode出现问题,没重装系统之前是没问题的;1.1. 项目代码在远程服务器上;3.1. 打开设置界面:文件。
2024-01-08 17:40:21
9676
4
原创 Valgrind交叉编译
将bin,libexec两个目录移植到板子上,假设路径是:/mmc_data/tools/valgrind;这可能时你之前使用了--host=armv7-linux或者其他编译器没有清理make生成的文件,执行make而导致的;由于我是在海思3531上运行的,没有找到合适的libc6-dbg,所以就没向大家展示正确用法;但是编译过程是正确的,说实话这个工具对于arm系统不太友好,不知道是不是只是海思芯片有这问题。这行是没事的,只是工具的打印信息;7-15行是错误的:需要安装libc6-dbg;
2024-01-03 18:09:33
1158
1
原创 freetype位图制作的理论与用法详解,一篇文章学会freetype
该文档详细讲述了 各种格式的字符串(中文,英文)编码,怎么使用freetype制作成可以在lcd上显示的位图,并且如何将位图渲染到LCD上,每部分都有代码详细演示,不懂都难;可以使用freetype制作位图,用于视频字幕或logo,对从事音视频开发者很有参考价值。5.5 渲染GB2312,UTF8转化的Unicode。5.1 GB2312或UTF8生成位图。5.3 LCD坐标和笛卡尔坐标。3.1 基线,笔,布局。5.2 位图渲染到画布。5.4 两种渲染方式。4. freetype用法。
2023-12-19 11:21:32
656
原创 如何生成core文件进行项目调试?
由于项目前期的调试错误比较多,或者有某些隐藏危险:例如内存泄漏;偶尔才出现一次,如果没有捕捉错误的手段可能好不容易出现的机会就溜走了,所以生成core文件是必要的,发生段错误会生成相应的core文件,使用gdb可以查询错误原因和堆栈情况。
2023-12-14 14:00:45
554
原创 freetype将字符串制作成位图并显示过程详解
在流媒体项目中字幕显示是不可或缺的一环,一般会有字幕流在视频播放过程中进行显示;不过还有很多情况是从头到尾只在视频的某个区域显示某些文字,例如某个电视台的log;这种也称为字幕,如果想要将这些字符串显示到视频,需要将这些字符串做成位图进行显示,无法直接显示,freetype开源库就是将字符转化为位图的工具。画布和freetype是无法处理中文编码的,像GB2312或UTF8等中文编码需要转换成unicode编码才能够被处理,显示;
2023-11-18 20:30:26
1216
2
原创 嵌入式linux常用的文件传输方式
只需要下载个tftp服务器:tftpd64/tftpd32,安装到windows,然后运行,设置好ip地址和文件存放路径即可在开发板上使用tftp命令连接该服务器;ssh使用一般是最多的,将ssh服务器程序一直到开发板上,然后可以使用xshell进行访问,以windows的方式传输,也可以在虚拟机使用scp传输。如果虚拟机运行了nfs服务器,在arm上运行mount命令将虚拟机的某个目录挂载到arm上,然后使用cp,mv等即可传输文件。执行rz,会有win弹窗,选择想要传输的文件即可。
2023-11-02 16:11:46
717
原创 grpc的proto消息体中嵌套流类型数据
repeated类型用于表示重复的数据集合。它类似于编程语言中的数组或列表,可以包含多个相同类型的元素。但是如果想要获取的消息体只有一部分是流数据该怎么办呢?
2023-09-10 20:18:46
390
原创 TS流中的PCR与timeus(微秒)的相互转化
由PCR的结构信息可知其中只有program_clock_reference_base(时钟基准)和program_clock_reference_extension(时钟参考扩展)两个字段表示PCR数据,reserved为保留位;
2023-08-27 16:08:52
292
原创 TS流中的PTS,DTS与timeus(微秒)的相互转化
在TS协议流中PTS和DTS都是由五个字节表示,想要将五字节的时间戳数据转化为微秒就需要了解这五个字节时间信息的构成:根据IOS13818-1协议可知:由此可见,在五字节中真正表示时间戳的也只有33字节。其中标记位为1bit,值为1.因此要想获得pts和dts的微妙值只需要将代表时间戳的33bit拼起来就可以啦!由于PTS和DTS真正的时间戳数据只占33bit(ts协议规定,具体看我博客);
2023-08-24 15:10:52
645
原创 TS协议概念及传输流程
PAT的PID字段固定为0x0,也是TS解析的起点,解析ts流需要先找到PID为0x0的PAT包,PAT包中又包含了很多PMT的PID,PMT中包含了该节目的视频流PID和音频流PID,通过节目编号获取PMT编号,再通过PMT获取节目对应的媒体流PID,从TS流中找到对应PID的媒体流即可。进入河南卫视就会获取河南卫视的媒体流数据,该媒体流数据包括音频,视频,字幕等,就是获取TS中的获取河南卫视媒体流的PES包,进而播放媒体流。PID:包含在TS头中,标识特定的媒体流或TS包(PMT)。
2023-08-08 16:15:44
907
原创 TS协议之PES(ES数据包)
TS=TS头+PES头+ES。TS,PES头是在音视频流传输过程中需要的数据信息,而ES其实就是我们所说的要打包的音视频原始流数据:视频流(H264/H265), 音频流:(AAC)。最后一个ts:TS头+填充字节+部分ES;第一个ts:TS头+PES头+部分ES;协议:ISO/IEC 13818-1。第二个ts:TS头+部分ES;也就是一帧数据只有一个PES。0xc0:含有PTS和DTS。0x80:只含有PTS。
2023-08-06 16:49:13
1875
原创 TS协议之PMT(节目映射表)
是一个容器,里面包含了该节目需要的所有媒体流:音频流,视频流,字幕流等。因此一般情况下,一个PMT里面由两个TS_PMT_Stream代表两种流(视频流,音频流),通过TS_PMT_Stream里的元素PID来获取TS协议中的流媒体数据。一般情况下,N和N1是相等的,都等于媒体流的数量,假如该PMT中含有音频流,视频流,字幕流三种流的PID,则N和N1就等于3;而N中的descriptor()就包含了音频流,视频流,字幕流三种流的描述。PMT:节目映射表,与PAT成对出现,包含了该节目下所有的节目元素。
2023-08-04 17:50:05
639
原创 TS协议之PAT(节目关联表)
字段是一个容器:std::vector program;容器容每个TS_PAT_Program结构对用一个PMT,所以当PMT很多的时候可能超过188个字节,要进行分段;在TS传输过程中,就是遍历该容器通过查找program_map_PID字段找到对应的PMT。PAT:节目关联表,与PMT成对出现,包含所有的频道编号;是解析ts数据的起点。TS头:参考TS协议之PES(数据包),已做过解释这里不多做解释。后续会更新更多音视频相关技术,关注一下。
2023-08-03 16:14:35
580
原创 grpc时间管理系统
grpc有自己的一套时间管理接口time.h,实现了时间的获取及转化;这是三个极端时间点。gpr_time_0一般作为计时的起点或者比较时间的基准,可以用于一些初始化或比较操作中;gpr_inf_past/gpr_inf_future: 可以用来设置异步API的deadline参数,代表永不超时;
2023-07-30 10:57:27
748
原创 git创建仓库c及gitbash代码管理
该文章详细说明了从github的仓库创建到使用gitbash上传,更新代码的流程;github是作为成程序员必须知道且普遍会用到的代码管理的生气网站,存在代码存储,更迭等的强大功能;2.4.2 git指令。1. 上传代码后github仓库没有上传过的代码。2.3 导入github仓库。2.1 gitbash下载。2.2 配置ssh公钥。以上问题都给出了明确的解答;1. 创建git仓库。
2023-07-28 10:00:39
252
原创 cmake之file:文件处理命令
4.3 TO_CMAKE_PATH 和TO_NATIVE_PATH。3.3 REMOVE 和REMOVE_RECURSE。2.2 TOUCH和TOUCH_NOCREATE。3.1 GLOB和GLOB_RECURSE。5.1 DOWNLOAD和UPLOAD。2.1 WRITE和APPEND。3.6 COPY和INSTALL。
2023-07-23 15:46:59
393
原创 grpc之AsyncNext:获取完全队列中的请求/响应
程序运行后还没有任何请求,则got_tag为nullptr,这个很正常表示队列中没有数据,假如来了一个请求/响应,got_tag为请求/响应的对象的指针;= nullptr)容错中。如果完全队列没有响应,则AsyncNext方法阻塞到2023-07-13:00:00:01时刻进行返回,所以AsyncNext方法的超时是以某时刻为准,下次循环当前时间已经超过deadline的时间值从而没有超时效果;获取队列中可用的请求/响应,如果没有可用的数据则阻塞一定时间然后返回,这个阻塞的时间就是设置的超时时间。
2023-07-16 10:43:04
725
1
TCP服务器监测客户端异常退出方法
2024-07-19
live555的核心数据结构值之闭环双向链表
2024-07-19
live555 rtsp服务器实战之createNewStreamSource
2024-07-19
live555 rtsp协议交互流程
2024-07-19
ffmpeg实现解复用MP4并解码音视频流
2024-03-24
ffmpeg 滤镜实现不同采样率多音频混音
2024-03-17
freetype位图制作的理论与用法详解,一篇文章学会freetype
2023-12-19
freetype开源库API 核心结构中文解释及代码演示
2023-12-12
流媒体音视频技术:grpc协议实现流媒体传输,proto消息体中的流类型嵌套
2023-09-10
TS协议之PMT(节目映射表)
2023-08-04
SIP协议开源库Vocal-1.5.0
2023-08-04
TS协议之PAT(节目关联表)
2023-08-03
TS协议之PES(数据包)
2023-08-03
github创建仓库及gitbash代码管理
2023-07-28
cmake之file命令:文件处理命令
2023-07-23
c++ jsoncpp所有类及类方法的全面解析(代码示例)
2023-06-13
一篇文章学会grpc编程,全网最详细,最全面保姆级教学
2023-05-28
find-package深入刨析及使用实例
2023-05-28
libstdc++.so.6.0.25
2023-05-23
FLV解复用代码实现!!!!
2022-11-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人