- 博客(57)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 SRS搭建webrtc直播一条龙教学!!!!!!
SRS对直播和RTC这两种能力的抽象,是流(Stream),一个流会有多个消费者(Consumer),流之间没有关联。基于这些业务能力,我们提供了各种场景下的DEMO,比如低延迟直播、一对一通话、多人通话、连麦等等。WebRTC是通信的能力,从技术上看是两个或多个客户端,让用户具备互动的能力。人对于延迟的感知是400ms,也就是一般的对话能顺利进行,这是RTC的核心指标。直播和RTC的协议或能力,是SRS的核心能力,新的音视频开发者,将不会区分直播和RTC,因为都是互联网视频能力。启动srs成功后,我们。
2022-11-22 11:36:44
4296
13
原创 深入理解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
原创 __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
原创 对PCM数据进行重采样
其实重采样的真正原因是这样的,在我们进行音视频开发中,遇到的很多设备的对于音频的格式要求是不一样的。为何需要进行重采样呢?
2024-05-16 15:41:10
219
原创 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
原创 CentOS修改系统库libdl.so.10软连接导致Linux命令失效!
如果不小心重启了,可以使用救援模式对坏掉的Centos进行修复,使用救援模式(用新的操作系统镜像暂时进入坏掉的操作系统,然后去将重命名或删掉的软连接重新命名回去或重新创建软连接即可将无法启动的操作系统启起来!我修改了libdl.so.10软连接导致linux命令全部失效,例如ls ll vim 等命令均失效,这个时候千万不能重启操作系统,重启无法解决此问题还会导致服务器无法起起来!LD_PRELOAD 这个命令可以恢复删除或重命名导致失效的软连接!Linux系统动态库软连接切勿修改或重命名!
2023-04-13 10:55:18
320
原创 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
转载 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
编译好的Windows环境FFmpeg库以及x264、x265库文件
2024-07-10
脚本一键打包linux服务ldd依赖库
2023-03-01
FFmpeg头文件+编译好的库,引入即可使用
2022-11-23
ffmpeg+SDL2的简易流媒体播放器,仅供大家参考学习。缺少dll库,在我资源里面下载ffmpeg+SDL2较新发布那个有。
2022-05-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人