- 博客(66)
- 资源 (3)
- 收藏
- 关注
原创 SRS搭建webrtc直播一条龙教学!!!!!!
SRS对直播和RTC这两种能力的抽象,是流(Stream),一个流会有多个消费者(Consumer),流之间没有关联。基于这些业务能力,我们提供了各种场景下的DEMO,比如低延迟直播、一对一通话、多人通话、连麦等等。WebRTC是通信的能力,从技术上看是两个或多个客户端,让用户具备互动的能力。人对于延迟的感知是400ms,也就是一般的对话能顺利进行,这是RTC的核心指标。直播和RTC的协议或能力,是SRS的核心能力,新的音视频开发者,将不会区分直播和RTC,因为都是互联网视频能力。启动srs成功后,我们。
2022-11-22 11:36:44 4675 14
原创 使用FFmpeg实现简单的拉流、推流、视频解码Demo
使用FFmpeg实现一个RTSP拉流、RTMP推流及视频解码的Demo可以分为几个主要步骤。该Demo展示了如何通过FFmpeg处理多媒体流,实现从RTSP拉流到RTMP推流的功能,创建RTMP推流上下文,并配置输出流参数。将解码后的帧编码为RTMP流格式后,通过。同时,为了实现RTMP推流,需要创建一个新的RTMP输出上下文,通过。循环读取每一帧数据,判断是否为视频帧,如果是,则调用。首先是头文件--------Streamer.h。进行解码,得到原始的YUV数据。找到合适的解码器,使用。
2024-09-04 14:34:58 781
原创 使用FFmpeg的AVFilter转换YUV到RGB
AVFilter是 FFmpeg 提供的一个模块化框架,允许用户将多个滤镜(filters)串联起来,形成一个滤镜图(filter graph),以对音视频数据进行逐步处理。滤镜图定义了数据流的处理路径,每个滤镜节点负责特定的处理任务。
2024-09-04 14:18:42 997
原创 排查C++程序CPU异常占用方法
2、多线程服务排查时,需要排查对应线程的情况,为了确定高CPU占用的线程ID 首先,使用top -H -p 命令已经可以帮助你识别出哪些线程在消耗最多的CPU资源。命令来列出GDB当前调试的程序中的所有线程。这个命令会显示每个线程的GDB编号(通常是一个从1开始的数字),以及该线程的一些其他信息,比如它正在执行的函数(如果可用)和线程的操作系统ID(如LWP #);5、进入到指定线程后,使用bt 可以查看线程调用堆栈信息,可以看到该线程是具体处理什么业务,从而定位代码中占用CPU最高的地方。
2024-08-30 14:14:49 246
原创 Lambda表达式
lambda 表达式是一种在代码中直接创建匿名函数(即没有名称的函数)的方法。它们特别适用于需要传递给算法或事件处理器的简短、一次性使用的函数。
2024-08-23 17:07:32 490
原创 C++20特性-------std::span
std::span是一个轻量级的视图类型,用于表示一段连续的内存区域。它不拥有数据,而是提供对现有数组、容器或内存区域的非拥有(non-owning)视图。允许你在不复制数据的情况下处理这些数据。std::span是一个非常有用的工具,特别是在需要处理连续内存块而又不想复制数据的情况下。它提供了更好的安全性和代码可读性,使得处理数组和容器变得更加方便和直观。
2024-08-23 17:01:48 367
翻译 【VScode】Remote-SSH XHR failed无法访问远程服务器
路径:~/.vscode-server/bin/COMMIT_ID/vscode-server-linux-x64.tar.gz。如我的稳定版链接就是:https://update.code.visualstudio.com/commit:2ccd690cbff1569e4a83d7c43d45101f817401dc/server-linux-x64/stable。该脚本的主要内容是检查服务器的vscode-server的运行情况,若服务器端不能运行,则会自动下载。在服务器端进入该路径,解压。
2024-08-22 11:13:23 151
原创 C++锁(互斥、递归、读写、条件)
在 C++ 中,锁是用于同步线程对共享资源的访问,以防止数据竞争和不一致的问题。C++ 标准库提供了几种用于线程同步的锁机制,主要包括互斥锁 (std::mutex)、递归互斥锁 ()、读写锁 ()、以及条件变量 () 等。
2024-08-01 17:24:44 270
原创 C++线程同步
线程同步是指确保多个线程按特定顺序执行或访问共享资源时不会发生冲突的技术。线程同步的主要目的是避免数据竞争和保证操作的原子性,以确保程序的正确性和一致性。1.互斥量用于保护对共享资源的访问,以确保同一时间只有一个线程可以访问该资源。C++中提供了std::mutex类来实现互斥量。2.条件变量用于让线程等待某个条件成立后再继续执行。它通常与互斥量一起使用,线程可以在条件变量上等待,直到另一个线程通知它条件已满足。3.读写锁允许多个线程同时读取共享资源,但在写入资源时会阻止其他线程的读取和写入。
2024-07-30 14:35:02 217
原创 超详细进程间通信
进程间通信(Inter-Process Communication, IPC)是指不同进程之间进行数据交换和同步的机制。常见的进程间通信方法包括:下方有附代码示例每种方法都有其适用的场景和特点,选择合适的进程间通信方法取决于应用程序的需求和设计。
2024-07-30 11:43:44 587
原创 深入理解FFmpeg--软/硬件解码流程
FFmpeg是一款强大的多媒体处理工具,支持软件和硬件解码。软件解码利用CPU执行解码过程,适用于各种平台,但可能对性能要求较高。硬件解码则利用GPU或其他专用硬件加速解码,能显著降低CPU负载,提升解码效率和能效。FFmpeg结合这两种解码方式,提供了灵活的多媒体解决方案,适合于视频处理、流媒体和多媒体应用开发。1、FFmpeg支持多种硬件加速类型,用于编解码视频,以提升性能和效率。这些硬件加速类型使FFmpeg在处理高分辨率视频时更加高效,减少了CPU负载,提高了多媒体处理的整体性能。
2024-07-19 16:11:08 1370 1
原创 GB35114管理平台间认证-双向认证注册
_osip_quoted_string_set()函数,提取Sip中带引号的字符串-CSDN博客。管理平台间认证分为互联认证和级联认证,下面以信令安全路由网关1向信令安全路由网关2发。起认证为例进行说明。
2024-07-16 10:38:16 406
原创 GB35114国密算法-GMSSL
C++有个三方库-GMSSL是可以进行GB35114所需要的SM2、SM3、SM4等加解密算法的,但是使用国密算法是需要申请报备的GmSSL是由北京大学自主开发的国产商用密码开源库,实现了对国密算法、标准和安全通信协议的全面功能覆盖,支持包括移动端在内的主流操作系统和处理器,支持密码钥匙、密码卡等典型国产密码硬件,提供功能丰富的命令行工具及多种编译语言编程接口。
2024-07-16 10:25:15 646
原创 __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 235
原创 深入理解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 545
原创 (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 1391
原创 time_t类型unix时间戳转换
反之可以使用 localtime_r 函数将unix时间戳转换为结构体;所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数(头文件中有一个结构体,可以保存所有的年、月、日、时、分、秒等相关信息。),发生错误时返回-1。
2024-06-21 11:38:36 348
原创 对PCM数据进行重采样
其实重采样的真正原因是这样的,在我们进行音视频开发中,遇到的很多设备的对于音频的格式要求是不一样的。为何需要进行重采样呢?
2024-05-16 15:41:10 304
原创 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 439
原创 解决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 3721
原创 SRS报错serve error code=1028(StreamBusy)(Stream already exists or busy)
此报错是因已经有这个RTMP客户端在往SRS推流了,只要关闭多余的推流RTMP客户端即可。
2024-02-27 09:51:37 443
原创 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 535
原创 SRS关闭无人观看的流
要做到关闭无人观看的SRS流的话,需要一个http_server端来接收SRS所发出的http请求,并及时回复code:200, 否则SRS无法进行下一步的操作(放流或断流), 回复了SRS以后我们对信息进行解析即可获取到是用户断开了播放还是开始播放
2024-02-21 15:31:51 748
原创 htonl()、htons()、ntohl()、ntohs()四个函数
htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。这些函数在不同的操作系统上可能会有一些细微的差别,但它们的目的都是为了处理网络数据的字节顺序转换,以确保在不同的主机上进行网络通信时能够正确解释数据的顺序。主机字节顺序指的是在特定主机体系结构上整数的字节表示方式,而网络字节顺序是一种固定的大端字节顺序,用于在不同主机之间进行通信。
2024-01-03 10:25:06 2520 5
原创 SIP(Session Initiation Protocol,会话初始协议)
SIP(Session Initiation Protocol,会话初始协议)
2023-12-21 10:52:39 542
原创 jsoncpp库输出浮点型值精度错误
这是因为 21/100 没有精确的浮点表示,默认情况下,我们使用17位数字,因为这是将double的任何值明确表示为字符串所需的数字。这与15==DBL_DIG==std::numeric_limits<double>::digitals10不同,后者是可以在不失真的情况下从字符串解析到double并返回的最大位数。我们选择了足够多的数字来完美地表示每一个可能的双精度值。所以只需要15位数字的精度,因为15位数字可以在不失真的情况下解析和重新打印,但这会牺牲对double数据类型的完整尾数的访问。
2023-12-13 15:17:48 756
原创 GB28181开发------录像查询(设备视音频文件检索)
传送结果的 Message消息可以发送多条,应支持附录 N 多响应消息传输 的要求。文件检索请求和应答命令采用 MANSCDP协议格式定义,详细描述见 A.2.4文件目录检索请 求和 A.2.6文件目录检索应答。收到请求,解析请求中对应的参数,例如:起始时间,截止时间,目标设备,是否模糊查询等必要字段。进行查询,查询完成后,构造相应的响应字段,例如文件总数、设备编码、文件列表等。构造完成后,将查询到的结果返回给查询方即可。
2023-08-25 15:51:09 554
原创 string转int函数(stoi)
而 atoi 是一个传统的 C 函数,它不会抛出异常,而是在转换失败时返回 0。另外,atoi 并不支持处理带有正负号的字符串,需要额外的处理逻辑来应对这种情况。,除非在非常频繁地进行字符串到整数的转换,在大规模数据处理或性能要求非常高的场景下,可以考虑使用 atoi 作为一种性能优化的选择。但是需要注意的是,优化性能的同时也要考虑到可靠性和安全性的因素,及时处理转换错误和异常情况。异常,这样我们可以在代码中捕获并处理这些异常。而且,stoi 还能处理带有正负号的字符串,能够更方便地转换带有符号的整数。
2023-08-25 15:37:35 771
原创 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 682
原创 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 1644
原创 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 1300
翻译 (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 1052
原创 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 1978
原创 CentOS修改系统库libdl.so.10软连接导致Linux命令失效!
如果不小心重启了,可以使用救援模式对坏掉的Centos进行修复,使用救援模式(用新的操作系统镜像暂时进入坏掉的操作系统,然后去将重命名或删掉的软连接重新命名回去或重新创建软连接即可将无法启动的操作系统启起来!我修改了libdl.so.10软连接导致linux命令全部失效,例如ls ll vim 等命令均失效,这个时候千万不能重启操作系统,重启无法解决此问题还会导致服务器无法起起来!LD_PRELOAD 这个命令可以恢复删除或重命名导致失效的软连接!Linux系统动态库软连接切勿修改或重命名!
2023-04-13 10:55:18 363
编译好的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关注的人