自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2022-11-22 11:36:44 4675 14

原创 CentOS 7安装Cmake步骤!

代码】CentOS 7安装Cmake步骤!

2022-08-09 10:54:12 7741

原创 使用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

原创 GB35114控制信令认证流程

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

2024-07-16 10:04:06 512

原创 __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

原创 libsndfile使用示例

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

2024-05-23 16:09:10 499

原创 对PCM数据进行重采样

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

2024-05-16 15:41:10 304

原创 Google 开源项目风格指南

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

2024-05-07 14:45:21 215

原创 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

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

添加osipparser2/ 与osip2/再编译。

2023-04-14 11:35:32 529

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

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

2023-04-13 10:55:18 363

翻译 Windows10专业版svn没图标

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

2023-03-15 17:10:11 352

GB28181/GB35114

GB28181/GB35114

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关注的人

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