- 博客(85)
- 资源 (3)
- 收藏
- 关注

原创 SRS搭建webrtc直播一条龙教学!!!!!!
SRS对直播和RTC这两种能力的抽象,是流(Stream),一个流会有多个消费者(Consumer),流之间没有关联。基于这些业务能力,我们提供了各种场景下的DEMO,比如低延迟直播、一对一通话、多人通话、连麦等等。WebRTC是通信的能力,从技术上看是两个或多个客户端,让用户具备互动的能力。人对于延迟的感知是400ms,也就是一般的对话能顺利进行,这是RTC的核心指标。直播和RTC的协议或能力,是SRS的核心能力,新的音视频开发者,将不会区分直播和RTC,因为都是互联网视频能力。启动srs成功后,我们。
2022-11-22 11:36:44
5357
14
原创 FFmpeg播放Hls录像控制解码速度
进行hls录像文件播放,播放速度很快,并未按照正常1秒25帧的帧率进行播放;播放速度过快的原因是因为代码中没有根据视频的帧率(Frame Rate)来控制帧的显示时间。HLS 视频通常有一个固定的帧率(例如 25 FPS),而代码在解码后立即显示每一帧,没有考虑帧之间的时间间隔,导致播放速度过快。要解决这个问题,需要在显示每一帧时,根据帧率或帧的时间戳(PTS,Presentation Time Stamp)来控制帧的显示时间。
2025-03-11 13:56:55
422
原创 Qt通过FFmpeg打开RTSP并截图一帧作为背景
整体来看,该代码逻辑清晰、模块分明,结合了 Qt 的 UI 渲染能力和 FFmpeg 的视频解码能力,实现了高效的 RTSP 视频帧截取与显示。该代码基于 Qt 和 FFmpeg 实现了从 RTSP 视频流中截取一帧图像,并将其渲染到。方法负责使用 FFmpeg 解析 RTSP 地址,获取视频帧,并将其转换为。随后,遍历流列表,查找视频流的索引。同时,为了将解码后的 YUV 图像转换为 RGB,代码使用。逐帧读取数据包,检查是否属于视频流,并调用。,用于显示截取的图像,并将其添加到。
2025-02-10 20:10:59
392
原创 H.264工作原理解析
H.264,也称为MPEG-4 Part 10或AVC(Advanced Video Coding),是一种广泛使用的视频压缩标准,由ITU-T视频编码专家组(VCEG)和ISO/IEC运动图像专家组(MPEG)联合开发。在 H.264 编码过程中,帧内预测(Intra Prediction)用于减少空间冗余,它只利用当前帧的已编码像素进行预测,而不依赖于其他帧。H.264 主要支持。视频被分割成多个帧(Frame),分为I帧(关键帧)、P帧(前向参考帧)、B帧(双向参考帧),以减少数据冗余。
2025-02-10 19:43:41
889
原创 Qt窗口交由海康SDK渲染,画面被遮挡
经排查,海康SDK渲染时,似乎是js窗口有透明属性,连带着SDK渲染的遇见白色会被遮挡,纯黑可以显示,在Qt色域(0,0,0)纯黑到(255,255,255)纯白之间,会从能显示画面到逐渐被遮挡,越靠近纯白,遮挡越严重,中间值表现为画面上方有一层灰白色的窗口。简记一下Qt开发海康SDK实时预览、远程回放对接时,我将Qt的OpenGL窗口句柄传给海康SDK进行渲染画面,但GL窗口的父窗口嵌入到了另一个由js开发的窗口中,该js窗口是透明窗口,Qt嵌入后,js将其底色绘制为白色。
2025-01-20 11:18:34
180
原创 解决GB28181对接RTSP倍速播放导致FFmpeg缓冲区满导致花屏问题
为了避免这一问题,我通过调整每一帧的时间戳,使其与倍速播放的速率相匹配。具体来说,在接收到每一帧数据时,重新计算该帧的显示时间,确保帧与帧之间的时间间隔按照倍速播放的设定进行压缩或扩展,从而实现流畅的播放效果。此外,我还优化了缓冲区管理策略,在播放过程中适时清空已处理的帧,并控制缓冲区的最大填充量,避免过多的帧数据堆积造成溢出。这种方式有效避免了由于帧积压而导致的渲染问题,使得倍速播放时FFmpeg能够顺利地处理高吞吐量的数据流,减少了花屏和卡顿现象,确保了视频播放的稳定性和流畅性。
2025-01-20 11:07:30
688
原创 如何使用Windows的API设置/删除窗口的属性
在 Windows 应用程序开发中,使用 Windows API 修改窗口属性是一种常见的操作,尤其是在调整窗口外观或行为时。例如,可以通过修改窗口样式来改变其是否可拖动、是否显示标题栏等。使用 Windows API 来修改窗口属性,通常涉及到和函数,分别用于获取和设置窗口的样式。
2024-10-29 19:38:29
680
6
原创 用QWebSocketServer写websocket服务端
2. 定义 WebSocketServer 类。信号触发时调用,处理新的客户端连接。:当客户端发送文本消息时被调用。3. 构造函数和析构函数。6. 处理客户端断开连接。:在客户端断开连接时调用。1. 引入必要的头文件。4. 处理新客户端连接。5. 处理客户端消息。7. 处理服务端关闭。
2024-10-28 15:31:43
685
翻译 Qt开发----如何打包/发布Release版本
只有一个exe是不能发布的,除非其它的电脑上也安装了Qt,并且添加了环境变量,因此我们需要一些dll以及其它库文件。4. Windows10的电脑可以按下Windows + S,然后搜索Qt,会得到一个cmd的图标的文件,点击运行它。1. 编译完成后到程序的输出文件夹中,一般在项目目录的上一层目录的一个build文件夹中。5. 在终端里找到exe文件所在的目录,同时使用windeployqt命令生成所需要的库。找到release文件夹,选择生成的exe文件,放到一个空白目录中。输入:G: 进入G盘。
2024-10-21 20:49:49
427
原创 浏览器嵌入Qt播放器窗口,无法显示/显示为透明
在最初的调试阶段,我通过各种方式检查了Qt窗口和浏览器之间的关系,尝试修改窗口样式、重设窗口位置,甚至利用Windows API来控制窗口的行为。总结来说,这一解决方案不仅使我克服了Qt窗口嵌入浏览器的难题,也让我更加深入地理解了Windows窗口管理的细节。明白了这一点后,我开始尝试将我的Qt窗口的父窗口设置为浏览器的Intermediate D3D Window,并为其添加。因为我发现海康的网页播放器的Qt窗口可以显示,我使用Spy++查看了打开了海康网页的浏览器子窗口属性里有这个。
2024-10-21 13:55:42
831
15
原创 Qt设置浏览器为父窗口,嵌入播放器窗口
本项目旨在利用Qt框架实现一个创新的用户界面,允许将Qt窗口作为子窗口嵌入到浏览器中,增强用户体验并实现更丰富的交互功能。随着Web技术的不断发展,越来越多的应用程序希望结合桌面应用程序和Web浏览器的优势,以便更好地满足用户的需求。通过将Qt窗口嵌入到浏览器中,用户能够在熟悉的浏览器环境中享受桌面应用的强大功能。
2024-10-21 13:42:34
704
原创 由于找不到Qt5Core.dll等库,无法继续执行代码。重新安装程序可能会解决此问题。
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。将Qt安装目录下的Qt Creator的bin目录和mingw的bin目录添加至环境变量Path里即可;6.添加环境变量所在路径,点击确定即可。1.右击此电脑(我的电脑),选择属性。4.点击Path选项,并进行编辑。2.点击高级系统设置。
2024-10-12 14:43:00
526
原创 如何获取谷歌浏览器窗口句柄并将其设置为Qt的父窗口
用来调整 Qt 窗口的位置和大小,使其嵌入到谷歌浏览器窗口内,符合你希望的布局。返回的是 Qt 窗口的句柄,我们将其作为目标子窗口。将 Qt 窗口的父窗口设置为谷歌浏览器的窗口。的窗口,该类名一般对应于谷歌浏览器主窗口。1、首先,确保你在项目的。
2024-10-12 08:50:30
614
原创 使用FFmpeg实现简单的拉流、推流、视频解码Demo
使用FFmpeg实现一个RTSP拉流、RTMP推流及视频解码的Demo可以分为几个主要步骤。该Demo展示了如何通过FFmpeg处理多媒体流,实现从RTSP拉流到RTMP推流的功能,创建RTMP推流上下文,并配置输出流参数。将解码后的帧编码为RTMP流格式后,通过。同时,为了实现RTMP推流,需要创建一个新的RTMP输出上下文,通过。循环读取每一帧数据,判断是否为视频帧,如果是,则调用。首先是头文件--------Streamer.h。进行解码,得到原始的YUV数据。找到合适的解码器,使用。
2024-09-04 14:34:58
1569
原创 使用FFmpeg的AVFilter转换YUV到RGB
AVFilter是 FFmpeg 提供的一个模块化框架,允许用户将多个滤镜(filters)串联起来,形成一个滤镜图(filter graph),以对音视频数据进行逐步处理。滤镜图定义了数据流的处理路径,每个滤镜节点负责特定的处理任务。
2024-09-04 14:18:42
1338
原创 排查C++程序CPU异常占用方法
2、多线程服务排查时,需要排查对应线程的情况,为了确定高CPU占用的线程ID 首先,使用top -H -p 命令已经可以帮助你识别出哪些线程在消耗最多的CPU资源。命令来列出GDB当前调试的程序中的所有线程。这个命令会显示每个线程的GDB编号(通常是一个从1开始的数字),以及该线程的一些其他信息,比如它正在执行的函数(如果可用)和线程的操作系统ID(如LWP #);5、进入到指定线程后,使用bt 可以查看线程调用堆栈信息,可以看到该线程是具体处理什么业务,从而定位代码中占用CPU最高的地方。
2024-08-30 14:14:49
429
原创 Lambda表达式
lambda 表达式是一种在代码中直接创建匿名函数(即没有名称的函数)的方法。它们特别适用于需要传递给算法或事件处理器的简短、一次性使用的函数。
2024-08-23 17:07:32
519
原创 C++20特性-------std::span
std::span是一个轻量级的视图类型,用于表示一段连续的内存区域。它不拥有数据,而是提供对现有数组、容器或内存区域的非拥有(non-owning)视图。允许你在不复制数据的情况下处理这些数据。std::span是一个非常有用的工具,特别是在需要处理连续内存块而又不想复制数据的情况下。它提供了更好的安全性和代码可读性,使得处理数组和容器变得更加方便和直观。
2024-08-23 17:01:48
461
翻译 【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
582
原创 C++锁(互斥、递归、读写、条件)
在 C++ 中,锁是用于同步线程对共享资源的访问,以防止数据竞争和不一致的问题。C++ 标准库提供了几种用于线程同步的锁机制,主要包括互斥锁 (std::mutex)、递归互斥锁 ()、读写锁 ()、以及条件变量 () 等。
2024-08-01 17:24:44
342
原创 C++线程同步
线程同步是指确保多个线程按特定顺序执行或访问共享资源时不会发生冲突的技术。线程同步的主要目的是避免数据竞争和保证操作的原子性,以确保程序的正确性和一致性。1.互斥量用于保护对共享资源的访问,以确保同一时间只有一个线程可以访问该资源。C++中提供了std::mutex类来实现互斥量。2.条件变量用于让线程等待某个条件成立后再继续执行。它通常与互斥量一起使用,线程可以在条件变量上等待,直到另一个线程通知它条件已满足。3.读写锁允许多个线程同时读取共享资源,但在写入资源时会阻止其他线程的读取和写入。
2024-07-30 14:35:02
255
原创 超详细进程间通信
进程间通信(Inter-Process Communication, IPC)是指不同进程之间进行数据交换和同步的机制。常见的进程间通信方法包括:下方有附代码示例每种方法都有其适用的场景和特点,选择合适的进程间通信方法取决于应用程序的需求和设计。
2024-07-30 11:43:44
671
原创 深入理解FFmpeg--软/硬件解码流程
FFmpeg是一款强大的多媒体处理工具,支持软件和硬件解码。软件解码利用CPU执行解码过程,适用于各种平台,但可能对性能要求较高。硬件解码则利用GPU或其他专用硬件加速解码,能显著降低CPU负载,提升解码效率和能效。FFmpeg结合这两种解码方式,提供了灵活的多媒体解决方案,适合于视频处理、流媒体和多媒体应用开发。1、FFmpeg支持多种硬件加速类型,用于编解码视频,以提升性能和效率。这些硬件加速类型使FFmpeg在处理高分辨率视频时更加高效,减少了CPU负载,提高了多媒体处理的整体性能。
2024-07-19 16:11:08
2475
1
原创 GB35114管理平台间认证-双向认证注册
_osip_quoted_string_set()函数,提取Sip中带引号的字符串-优快云博客。管理平台间认证分为互联认证和级联认证,下面以信令安全路由网关1向信令安全路由网关2发。起认证为例进行说明。
2024-07-16 10:38:16
659
原创 GB35114国密算法-GMSSL
C++有个三方库-GMSSL是可以进行GB35114所需要的SM2、SM3、SM4等加解密算法的,但是使用国密算法是需要申请报备的GmSSL是由北京大学自主开发的国产商用密码开源库,实现了对国密算法、标准和安全通信协议的全面功能覆盖,支持包括移动端在内的主流操作系统和处理器,支持密码钥匙、密码卡等典型国产密码硬件,提供功能丰富的命令行工具及多种编译语言编程接口。
2024-07-16 10:25:15
1004
原创 __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
293
原创 深入理解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
732
原创 (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
1712
原创 time_t类型unix时间戳转换
反之可以使用 localtime_r 函数将unix时间戳转换为结构体;所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数(头文件中有一个结构体,可以保存所有的年、月、日、时、分、秒等相关信息。),发生错误时返回-1。
2024-06-21 11:38:36
428
原创 对PCM数据进行重采样
其实重采样的真正原因是这样的,在我们进行音视频开发中,遇到的很多设备的对于音频的格式要求是不一样的。为何需要进行重采样呢?
2024-05-16 15:41:10
417
脚本一键打包linux服务ldd依赖库
2023-03-01
ffmpeg+SDL2的简易流媒体播放器,仅供大家参考学习。缺少dll库,在我资源里面下载ffmpeg+SDL2较新发布那个有。
2022-05-07
将Qt窗口嵌入到谷歌浏览器窗口你实现了吗?
2024-10-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人