自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (3)
  • 收藏
  • 关注

原创 SRS搭建webrtc直播一条龙教学!!!!!!

SRS对直播和RTC这两种能力的抽象,是流(Stream),一个流会有多个消费者(Consumer),流之间没有关联。基于这些业务能力,我们提供了各种场景下的DEMO,比如低延迟直播、一对一通话、多人通话、连麦等等。WebRTC是通信的能力,从技术上看是两个或多个客户端,让用户具备互动的能力。人对于延迟的感知是400ms,也就是一般的对话能顺利进行,这是RTC的核心指标。直播和RTC的协议或能力,是SRS的核心能力,新的音视频开发者,将不会区分直播和RTC,因为都是互联网视频能力。启动srs成功后,我们。

2022-11-22 11:36:44 4296 13

原创 CentOS 7安装Cmake步骤!

代码】CentOS 7安装Cmake步骤!

2022-08-09 10:54:12 7649

原创 深入理解FFmpeg--软/硬件解码流程

FFmpeg是一款强大的多媒体处理工具,支持软件和硬件解码。软件解码利用CPU执行解码过程,适用于各种平台,但可能对性能要求较高。硬件解码则利用GPU或其他专用硬件加速解码,能显著降低CPU负载,提升解码效率和能效。FFmpeg结合这两种解码方式,提供了灵活的多媒体解决方案,适合于视频处理、流媒体和多媒体应用开发。1、FFmpeg支持多种硬件加速类型,用于编解码视频,以提升性能和效率。这些硬件加速类型使FFmpeg在处理高分辨率视频时更加高效,减少了CPU负载,提高了多媒体处理的整体性能。

2024-07-19 16:11:08 676 1

原创 GB35114管理平台间认证-双向认证注册

_osip_quoted_string_set()函数,提取Sip中带引号的字符串-CSDN博客。管理平台间认证分为互联认证和级联认证,下面以信令安全路由网关1向信令安全路由网关2发。起认证为例进行说明。

2024-07-16 10:38:16 337

原创 GB35114国密算法-GMSSL

C++有个三方库-GMSSL是可以进行GB35114所需要的SM2、SM3、SM4等加解密算法的,但是使用国密算法是需要申请报备的GmSSL是由北京大学自主开发的国产商用密码开源库,实现了对国密算法、标准和安全通信协议的全面功能覆盖,支持包括移动端在内的主流操作系统和处理器,支持密码钥匙、密码卡等典型国产密码硬件,提供功能丰富的命令行工具及多种编译语言编程接口。

2024-07-16 10:25:15 467

原创 GB35114控制信令认证流程

其中Note为新增字段,其中包含了nonce以及加密算法algorithm。

2024-07-16 10:04:06 321

原创 __osip_quoted_string_set()函数,提取Sip中带引号的字符串

该函数可用于GB35114提取Authorization字段中的random1以及random2、sign1、algorithm等字段的值。定义在osip2库中的parser.h中,声明在osip_www_authenticate.c中。该函数是osip2库中的函数(稍作修改)

2024-07-16 09:48:29 206

原创 深入理解FFmpeg--libavformat接口使用(一)

它的主要两个目的是去复用(即将媒体文件拆分为组件流)和复用的反向过程(以指定的容器格式写入提供的数据)。除非您绝对确定不会使用libavformat的网络功能,否则还应该调用avformat_network_init();写数据包:av_write_frame()/av_interleaved_write_frame();初始化:avformat_alloc_output_context2();创建媒体流(如果有的话):avformat_new_stream();

2024-07-10 16:20:52 466

原创 (Windows环境)FFMPEG编译,包含编译x264以及x265

本文使用 MSYS2 来编译 ffmpegMSYS2 是 Windows 下的一组编译套件,它可以在 Windows 系统中模拟 Linux 下的编译环境,如使用 shell 运行命令、使用 pacman 安装软件包、使用 gcc (MinGW) 编译代码等。MSYS2 的安装也非常省心,只需要到下载.exe安装包,管理员身份运行安装即可。安装完毕后,开始菜单里就会有下面的程序:点击它们就会启动一个 shell 窗口,Just like on Linux!

2024-07-10 15:25:21 1274

原创 time_t类型unix时间戳转换

反之可以使用 localtime_r 函数将unix时间戳转换为结构体;所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数(头文件中有一个结构体,可以保存所有的年、月、日、时、分、秒等相关信息。),发生错误时返回-1。

2024-06-21 11:38:36 309

原创 libsndfile使用示例

二、从本地打开wav文件并读取pcm数据。三、从缓存中读取pcm数据。

2024-05-23 16:09:10 404

原创 对PCM数据进行重采样

其实重采样的真正原因是这样的,在我们进行音视频开发中,遇到的很多设备的对于音频的格式要求是不一样的。为何需要进行重采样呢?

2024-05-16 15:41:10 219

原创 Google 开源项目风格指南

谷歌C++开源项目编码规范:

2024-05-07 14:45:21 198

原创 C++代码eSpeak库使用示例

要将 eSpeak 库生成的 PCM 数据转换为 WAV 格式并保存,你可以使用 C++ 的标准文件操作来创建 WAV 文件,并将 PCM 数据写入其中。部分为 eSpeak 生成的实际 PCM 数据。这段代码假设输入的 PCM 数据是单声道、16位的。函数生成 PCM 数据。然后,我们将这些 PCM 数据写入 WAV 文件,并在最后使用。函数用于将 PCM 数据写入 WAV 文件。在函数中,首先构建了 WAV 文件头(结构体),然后将其写入文件,接着将 PCM 数据写入文件。在这个示例中,我们首先使用。

2024-04-01 11:19:38 340

原创 解决The ‘Access-Control-Allow-Origin‘ header contains multiple values ‘*, *‘, but only one is allowed

他们可能需要检查服务器配置并修改响应头以确保每次只返回一个有效的 'Access-Control-Allow-Origin' 值。具体来说,服务器返回的 “ 'Access-Control-Allow-Origin' 头包含了多个值,而规范只允许一个值。:联系服务器管理员或开发人员,要求他们修改服务器配置,确保在响应头中只返回一个有效的 'Access-Control-Allow-Origin' 值。在这种情况下,服务器应该正确配置CORS响应头,以允许来自青柿播放器所在域的请求。

2024-03-18 16:41:48 2520

原创 SRS报错serve error code=1028(StreamBusy)(Stream already exists or busy)

此报错是因已经有这个RTMP客户端在往SRS推流了,只要关闭多余的推流RTMP客户端即可。

2024-02-27 09:51:37 308

原创 serve error code=5011(RtcRtpMuxer)(Failed to mux RTP packet for RTC)

这个报错是因为SRS目前不支持h265格式的RTC,所以无法将HEVC格式的RTMP数据转为RTC数据,会报错5011,将SRS配置中的配置信息修改即可,将RTC服务关闭即可。

2024-02-26 15:29:34 485

原创 SRS关闭无人观看的流

要做到关闭无人观看的SRS流的话,需要一个http_server端来接收SRS所发出的http请求,并及时回复code:200, 否则SRS无法进行下一步的操作(放流或断流), 回复了SRS以后我们对信息进行解析即可获取到是用户断开了播放还是开始播放

2024-02-21 15:31:51 599

原创 htonl()、htons()、ntohl()、ntohs()四个函数

htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。这些函数在不同的操作系统上可能会有一些细微的差别,但它们的目的都是为了处理网络数据的字节顺序转换,以确保在不同的主机上进行网络通信时能够正确解释数据的顺序。主机字节顺序指的是在特定主机体系结构上整数的字节表示方式,而网络字节顺序是一种固定的大端字节顺序,用于在不同主机之间进行通信。

2024-01-03 10:25:06 1699 5

原创 SIP(Session Initiation Protocol,会话初始协议)

SIP(Session Initiation Protocol,会话初始协议)

2023-12-21 10:52:39 493

原创 jsoncpp库输出浮点型值精度错误

这是因为 21/100 没有精确的浮点表示,默认情况下,我们使用17位数字,因为这是将double的任何值明确表示为字符串所需的数字。这与15==DBL_DIG==std::numeric_limits<double>::digitals10不同,后者是可以在不失真的情况下从字符串解析到double并返回的最大位数。我们选择了足够多的数字来完美地表示每一个可能的双精度值。所以只需要15位数字的精度,因为15位数字可以在不失真的情况下解析和重新打印,但这会牺牲对double数据类型的完整尾数的访问。

2023-12-13 15:17:48 681

原创 GB28181开发------录像查询(设备视音频文件检索)

传送结果的 Message消息可以发送多条,应支持附录 N 多响应消息传输 的要求。文件检索请求和应答命令采用 MANSCDP协议格式定义,详细描述见 A.2.4文件目录检索请 求和 A.2.6文件目录检索应答。收到请求,解析请求中对应的参数,例如:起始时间,截止时间,目标设备,是否模糊查询等必要字段。进行查询,查询完成后,构造相应的响应字段,例如文件总数、设备编码、文件列表等。构造完成后,将查询到的结果返回给查询方即可。

2023-08-25 15:51:09 457

原创 string转int函数(stoi)

而 atoi 是一个传统的 C 函数,它不会抛出异常,而是在转换失败时返回 0。另外,atoi 并不支持处理带有正负号的字符串,需要额外的处理逻辑来应对这种情况。,除非在非常频繁地进行字符串到整数的转换,在大规模数据处理或性能要求非常高的场景下,可以考虑使用 atoi 作为一种性能优化的选择。但是需要注意的是,优化性能的同时也要考虑到可靠性和安全性的因素,及时处理转换错误和异常情况。异常,这样我们可以在代码中捕获并处理这些异常。而且,stoi 还能处理带有正负号的字符串,能够更方便地转换带有符号的整数。

2023-08-25 15:37:35 651

原创 C++获取map最小值算法,STL---std::min_element()!

这些重载仅若 std::is_execution_policy_v (C++20 前)std::is_execution_policy_v (C++20 起) 为 true 才参与重载决议。comp - 比较函数对象(即满足比较 (Compare) 要求的对象),若a 小于 b ,则返回 ​true。寻找范围 [first, last) 中的最小元素。

2023-08-23 10:16:53 614

原创 relocation error: /lib64/libm.so.6: symbol __get_cpu_features, version GLIBC_PRIVATE not defined in

主要功能:在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib.so),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。lrwxrwxrwx. 1 root root 21 12月 14 21:46 ld-linux-x86-64.so.2 -> /usr/lib64/ld-2.17.so。-rwxr-xr-x. 1 root root 31461 12月 14 19:41 libutil-2.18.so。

2023-08-10 10:43:39 1227

原创 SRS编译支持H265,但VLC无法播放!

SRS官方文档有编译ffmpeg特殊版来推流以使SRS转流的flv与rtmp流支持h265,SRS转流的hls是原生支持h265的,如果需要使用flv以及rtmp则需根据官方文档进行操作。编译ffmpeg时需要根据下方链接,SRS-h265作者之一:施维 大佬的ffmpeg文件,下载施维大佬的文件拷贝替换libavfomat目录下的对应文件进行ffmpeg特供版编译。

2023-06-13 17:33:36 1172

翻译 (Linux环境)FFMPEG编译,包含编译x264以及x265

编译成功后,执行 ./ffmpeg -codecs 可以看到支持h264,hevc的编解码。执行ldd ./ffmpeg,可以看到仅依赖一些系统的动态库。可以发现,x264的链接选项都放在Libs里,而不是Libs.private。由于install指令不太好用(只拷贝了一个bin过去),所以参考x265的内容,将x264的内容手动拷贝到dist目录下。检测x265的过程,就是编一个简单的带main函数的小程序,仅仅链接x265库。编译成功后,可以看到dist目录下已经有x265相关的内容了。

2023-06-13 17:16:18 908

原创 PTS时间戳的计算

例如,如果音频的采样率是44100Hz,第一帧的时间戳为0,第二帧的时间戳为0.0000227s(1/44100),第三帧的时间戳为0.0000454s(2/44100),以此类推。例如,如果视频的帧率是25fps,第一帧的时间戳为0,第二帧的时间戳为0.04s(1/25),第三帧的时间戳为0.08s(2/25),以此类推。在大多数情况下,PTS和DTS是相同的,即视频或音频帧在解码时和播放时的时间戳是一致的。显示时间戳(PTS)是指视频或音频帧在播放时的时间戳,用于控制视频或音频帧的显示顺序和播放速度。

2023-04-25 11:31:22 1684

原创 编译osip2与eXosip2静态库,一文搞定!

添加osipparser2/ 与osip2/再编译。

2023-04-14 11:35:32 422

原创 CentOS修改系统库libdl.so.10软连接导致Linux命令失效!

如果不小心重启了,可以使用救援模式对坏掉的Centos进行修复,使用救援模式(用新的操作系统镜像暂时进入坏掉的操作系统,然后去将重命名或删掉的软连接重新命名回去或重新创建软连接即可将无法启动的操作系统启起来!我修改了libdl.so.10软连接导致linux命令全部失效,例如ls ll vim 等命令均失效,这个时候千万不能重启操作系统,重启无法解决此问题还会导致服务器无法起起来!LD_PRELOAD 这个命令可以恢复删除或重命名导致失效的软连接!Linux系统动态库软连接切勿修改或重命名!

2023-04-13 10:55:18 320

翻译 Windows10专业版svn没图标

解决Windows10专业版svn没图标问题!!!

2023-03-15 17:10:11 316

原创 avformat_find_stream_info调用read_frame_internal死循环卡死

read_frame_internal这个函数调用,可以解析出不同流的es流,而read_frame_internal函数除非出错否则必须解析出一帧数据才能返回.发现服务调用ffmpeg库函数avformat_find_stream_info出现卡死,进入死循环现象,经过排查是调用了上图接口。因为原始流之中有编解码器信息,但没有数据包,所以解析不出帧,但rtsp流没有错误,所以死循环卡死在其中!具体原因还有待排查!至少定位了是卡死在哪里了!

2023-03-14 17:49:08 676

原创 linux命令手册,一文就够

查看服务查看端口占用情况查看服务编译情况ldd +服务名make编译 make clean清除上次编译。

2023-03-14 17:43:54 93

转载 ffmpeg:rtsp报错method SETUP failed: 461 Unsupported Transport

试用请求rtsp流时,UDP端口时无法返回。

2023-03-14 17:27:44 3099 2

原创 GDB调试手册,一文就够

GDB是:UNIX及UNIX-like下的。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。

2023-03-14 17:17:07 1291

原创 查看linux中程序是否被系统杀死,如何查看日志

最近在linux开发日常中,维护之前发布的程序,几台服务器只有一台在重启,而且不定期,查看服务日志也没有任何signal信号以及服务挂掉的原因打印,迫于无奈怀疑是linux系统给服务干掉了。于是想查看服务被杀掉的日志,看看系统日志,即可判断。即途中目录下的messages文件,通过命令即可过滤信息查看是否被系统killed。用以下命令查看系统日志信息!命令输出如下:参数解析:total-vm: total virtual memory. 进程使用的总的虚拟内存。

2023-03-06 11:35:00 5526

原创 脚本一键打包linux服务ldd依赖库

ldd不是一个可执行程序,而只是一个shell脚本 ldd能够显示可执行模块的dependency(所属)(所属),其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。我们知道,ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency(所属)。

2023-03-01 11:26:11 657

原创 SRS编译configure参数文档

在下载SRS源码后编译过程中,可以通过添加./configure参数来开启某些功能!SRS对直播和RTC这两种能力的抽象,是流(Stream),一个流会有多个消费者(Consumer),流之间没有关联。基于流,我们构造了各种业务的能力,比如集群、录制、转码、转发。基于这些业务能力,我们提供了各种场景下的DEMO,比如低延迟直播、一对一通话、多人通话、连麦等等。

2023-02-28 14:46:04 426

原创 关于SRS-webrtc走Nginx代理

因为需求原因,以及隐私原因,在使用SRS流媒体服务器进行webrtc流播放的时候,需要使用nginx代理来代替IP+端口形式,是因为IP+端口形式webrtc的HTTP请求会直接暴露服务器信息。所以使用nginx代理SRS服务的webrtc请求,基本行不通。可以通过修改源代码实现,但不建议。个人尝试过使用nginx代理webrtc转的http请求,从而不暴露srs服务器信息。webrtc流地址播放时,srs内部转为http请求向srs流媒体服务器发送。从0开始搭建webrtc!

2023-02-24 11:32:29 1853 7

原创 C++exit()函数无法结束进程

exit()函数与_exit()函数最大的区别就在于 exit()函数在调用 exit 系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件。如果程序使用_exit()来结束进程,则不会进行I/O缓存清理,会结束进行。但是_exit()函数直接将进程关闭,缓冲区的数据将会丢失。程序如果写了处理signal信号的函数,那么可能会引起捕捉信号导致无法结束进程,程序进入一种无法结束状态,一直打印堆栈信息。如果程序使用exit()来结束进程,那么在结束前会进行清理I/O缓存的操作,不会立马结束。

2023-02-03 16:28:09 1455

GB28181/GB3511

GB28181/GB3511

2024-07-23

编译好的Windows环境FFmpeg库以及x264、x265库文件

编译好的Windows环境FFmpeg库以及x264、x265库文件 FFmpeg 是一个强大的多媒体框架,可以让用户处理和操纵音频和视频文件。具有易于使用的界面,用户可以在 Windows、Mac 或 Linux Ubuntu 系统上下载 FFmpeg 并将其提取到文件夹中。然后,该软件可以加入 PATH 环境变量,便于无缝集成到工作流中。无论是要添加对话还是增强音频过滤器, Fmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the c

2024-07-10

脚本一键打包linux服务ldd依赖库

在linux中, ldd是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系。 当然, 你也可以用ldd --help或者man ldd来看其用法。 ldd本身不是一个程序,而仅是一个shell脚本:ldd可以列出一个程序所需要得动态链接库(so) 1)   ldd不是一个可执行程序,而只是一个shell脚本 ldd能够显示可执行模块的dependency(所属)(所属),其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency(所属),而程序并不真正执行。要不你可以在shell终端测试一下,如下: export LD_TRACE_LOADED_OBJECTS=1 再执行任何的程序,如ls等,看看程序的运行结果。 2)   ldd显示可执行模块的dependency(所属)的工作

2023-03-01

FFmpeg头文件+编译好的库,引入即可使用

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 [1] FFmpeg编码库可以使用GPU加速。 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。 ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录

2022-11-23

SDL+ffmpeg库及头文件引入即可使用

下载后解压,将lib引入到QT项目,头文件包含进项目。将DLL库放在项目build文件夹的debug目录下就大功告成。

2022-10-20

TestDirector 8.0压缩包,下载解压顺序执行exe即可

TestDirector 8.0压缩包,下载解压顺序执行exe即可

2022-10-08

ffmpeg+SDL2的简易流媒体播放器,仅供大家参考学习。缺少dll库,在我资源里面下载ffmpeg+SDL2较新发布那个有。

本人根据已故大神雷霄骅的文章以及一些前辈们的文章,使用QT界面开发,写了一个简单的ffmpeg+SDL2的流媒体播放器。 流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件。流式传输可传送现场影音或预存于服务器上的影片,当观看者在收看这些影音文件时,影音数据在送达观看者的计算机后立即由特定播放软件播放。 流媒体就是指采用流式传输技术在网络上连续实时播放的媒体格式,如音频、视频或多媒体文件。流媒体技术也称流式媒体技术.所谓流媒体技术就是把连续的影像和声音信息经过压缩处理后放上网站服务器,由视频服务器向用户计算机顺序或实时地传送各个压缩包,让用户一边下载一边观看、收听,而不要等整个压缩文件下载到自己的计算机上才可以观看的网络传输技术。

2022-05-07

eXosip2-3.5.0库,下载即可用

eXosip2-3.5.0库,下载即可用

2022-02-24

空空如也

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

TA关注的人

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