自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(140)
  • 收藏
  • 关注

原创 webrtc初了解

Web Real-Time Communication(网页实时通信),是浏览器原生支持的实时音视频通信技术,无需安装插件或客户端,可直接在浏览器之间实现点对点(P2P)通信。核心目标:让浏览器具备实时数据传输能力(音视频、文本、文件等),常用于视频会议、直播连麦、在线教育等场景。核心在客户端(浏览器)(如 getUserMedia、RTCPeerConnection 等),用于在 客户端之间直接建立实时连接(如音视频流、数据传输)。

2025-05-29 10:32:13 747

原创 万字详解RTR RTSP SDP RTCP

一、RTSP 是什么?(定义与定位)RTSP(Real Time Streaming Protocol) 是一个应用层协议,用于控制流媒体的播放行为。类比生活场景:如果把流媒体比作 “自来水”,RTSP 就像是 “水龙头开关”,负责开启 / 暂停 / 调节水流,但不负责 “运输水”(数据传输由 RTP 负责)。二、RTSP 的核心功能是什么?(四大控制命令)建立会话(SETUP)客户端告诉服务器:“我要播放这个视频,用 RTP/UDP 协议,我的接收端口是 5000-5001”。

2025-05-28 15:52:46 931

原创 直播框架:基础知识点

本文介绍了直播系统的基本架构和关键技术点。系统主要包含SRS直播集群、Nginx反向代理和CDN三部分,SRS负责流媒体处理,支持RTMP、HLS等协议;Nginx实现负载均衡和缓存加速;CDN通过边缘节点提升内容分发效率。直播流程包括采集、处理、编码、推流、服务器中转、拉流和解码播放等环节。技术细节方面,重点分析了推流和拉流过程中的音视频处理、编码、同步、缓冲等技术难点,以及延迟、抗丢包等关键指标。整体架构通过业务服务器、流媒体服务器和客户端的协同配合,实现高效的直播服务。

2025-05-28 14:58:30 758

原创 详解srs流媒体服务器的集群

SRS集群通过Forward和Edge两种模式实现直播流分发。Forward模式下,Master节点主动推送流至Slave节点,适合小型集群但存在带宽浪费问题;Edge模式采用"推源站+拉边缘"架构,边缘节点按需回源拉流,降低带宽压力,适用于大型分布式场景。两种模式均支持负载均衡和容灾,但Edge模式通过缓存机制优化资源利用率,更适合高并发场景。配置时需区分源站与边缘节点角色,并针对性调整RTMP/HTTP参数。

2025-05-27 17:44:00 794

原创 万字讲清srs流媒体服务器基础

SRS流媒体服务器是一个开源的高性能实时音视频传输解决方案,支持RTMP、HTTP-FLV、HLS、WebRTC等多种协议,适用于直播、在线教育等场景。其核心特点包括:基于C++开发的异步IO和协程技术实现低延迟(WebRTC模式500ms内)和高并发(单机万级);支持集群部署、流录制、实时转码等丰富功能。目录结构清晰,核心代码位于trunk/src目录,主要源文件涵盖网络连接处理、协议实现、媒体流管理等模块。配置文件可灵活调整监听端口、并发数、协议开关等参数,如默认开启RTMP(1935端口)、HTTP-

2025-05-27 10:10:54 1019

原创 一文详解 HLS

HLS(HTTP Live Streaming)是一种基于HTTP协议的流媒体传输技术,旨在解决传统直播协议(如RTMP)在浏览器支持、移动端普及和防火墙兼容性等方面的不足。HLS通过将直播流分割为小尺寸的媒体片段(如TS文件),并利用HTTP协议进行传输,实现了跨平台、无插件播放的直播体验。其核心设计包括分段传输、无状态协议和动态码率调整,以适应不同网络条件。然而,HLS的延迟问题较为显著,通常在5-30秒之间,主要源于文件分块和客户端缓冲机制。HLS的工作原理包括音视频采集、编码、流分段、索引文件生成和

2025-05-23 18:02:38 827

原创 一文详解RTMP协议

RTMP(实时消息传输协议)是一种应用层协议,依赖TCP等可靠传输层协议进行数据传输。其核心流程包括:建立传输层连接、通过握手初始化RTMP Connection连接、创建Stream流连接以传输音视频数据,以及将消息(Message)分块为Chunk进行传输与重组。RTMP协议通过SetChunkSize和SetACKWindowSize等命令优化数据传输效率与流量控制。Chunk的默认大小为128字节,但可根据网络状况灵活调整,以平衡CPU占用率与带宽利用率。RTMP的消息由时间戳、长度、类型ID和消息

2025-05-23 16:30:13 589

原创 一文读懂测试单元gtest

gtest 是 Google 开发的 C++ 单元测试框架,提供了丰富的断言、测试夹具和测试运行器等功能,帮助开发者编写高效、可维护的测试代码。好的测试单元应具备独立性、结构化组织、跨平台兼容性、丰富的失败信息、低维护成本和高执行效率等特点。gtest 通过自动注册机制、参数化测试和并行执行等特性,减少了测试代码的重复性,提升了测试效率。安装 gtest 可以通过克隆 GitHub 仓库并使用 CMake 进行编译和安装。gtest 的断言分为非致命断言(EXPECT_)和致命断言(ASSERT_),支持布

2025-05-22 17:01:49 989

原创 一文读懂GRPC

一、什么是 Protobuf?Protobuf 是 Google 开发的二进制序列化协议,用于结构化数据的高效存储和传输。它与 HTTP/2 结合后,能进一步提升网络通信的性能。核心特点强类型定义:通过.proto文件定义数据结构,类似接口描述语言(IDL)。二进制格式:数据被序列化为二进制,比文本格式(XML/JSON)更小、更快。高性能:序列化和反序列化速度极快(比 JSON 快 3-10 倍)。向后兼容:支持版本演进,旧代码能解析新数据格式。

2025-05-22 16:55:06 833

原创 火焰图简介

火焰图(Flame Graph) 是软件开发领域高效的性能分析可视化工具,核心价值在于通过直观的图形结构,精。其名称源于图形呈现时层级分明、形似火焰升腾的视觉特征。:用于存储局部变量(如 localVar、stackArray)、函数参数、返回地址等,由编译器自动管理,遵循 “后进先出” 原则。火焰图采用随机暖色调(如红、橙、黄)填充格子,仅用于区分不同函数,无实际数据含义。这种设计避免颜色干扰对宽度和层级的判断,聚焦核心性能指标。

2025-05-21 10:38:36 571

原创 ffplay实现功能大全

ffplay 是一个基于 SDL 和 FFmpeg 的简单播放器,支持多种播放控制功能。通过键盘事件,用户可以实现播放、暂停、静音、音量调节、全屏切换、逐帧播放等操作。播放器启动时自动播放,暂停时通过 p 或空格键恢复。暂停状态下,视频停止解码并停留在最后一帧,音频则通过填充静音数据或停止解码来处理。时钟同步机制确保暂停和恢复时的音视频同步,暂停时时钟停止更新,恢复时通过计算暂停时间差来修正时钟。数据读取线程在暂停时停止读取新数据包,恢复时重新唤醒解码线程继续处理数据。

2025-05-16 08:44:07 1002

原创 Docker 从入门到实战全攻略:镜像、Dockerfile、数据卷与网络详解

Docker镜像是只读的容器模板,包含启动容器所需的所有资源,如文件系统和配置信息。其特点包括分层结构、写时复制、内容寻址和联合挂载,这些特性使得镜像在存储和运行时更加高效。Dockerfile则是构建镜像的“菜谱”,通过一系列指令描述镜像的制作步骤,如拉取基础镜像、安装软件等。Dockerfile的分层构建和缓存机制可以显著提升构建效率。常用指令包括FROM(指定基础镜像)、RUN(执行命令)、CMD(设置容器启动命令)等。通过合理使用这些指令,可以高效地构建和管理Docker镜像。

2025-05-15 22:40:19 642

原创 docker 命令操作大全

本文介绍了Docker的基本使用方法和命令。首先,通过docker run ubuntu:15.10 /bin/echo "Hello world"命令展示了如何启动一个容器并执行简单命令。接着,解释了/bin路径在Linux系统中的作用,并强调了在Docker命令中使用完整路径的重要性。进阶命令docker run -it ubuntu:15.10 /bin/bash允许用户与容器进行交互,进入容器的bash环境。此外,还介绍了如何在后台运行容器,并通过docker ps查看正在运行的容器状态。docke

2025-05-15 15:32:39 763

原创 FFplay 音视频同步机制解析:以音频为基准的时间校准与动态帧调整策略

音视频同步是确保视频播放时声音和画面一致的关键技术。由于音频和视频数据通常在不同的线程中处理,且时间戳(PTS)可能不连续或错误,因此需要通过同步策略来调整播放速度和时刻。常见的同步策略包括以音频为基准同步视频、以视频为基准同步音频、以外部时钟为基准同步以及结合外部时钟调整播放速度。这些策略通过动态调整音频或视频的播放速度,确保音画同步。在ffplay中,音频和视频分别有自己的输出线程,通过时间戳(PTS)和时钟(Clock)等机制实现同步。时间戳用于标记帧的显示时间,时钟则用于估算和校准播放时间,确保音视

2025-05-14 20:44:55 1034

原创 《ffplay 读线程与解码线程分析:从初始化到 seek 操作,对比视频与音频解码的差异》

文章摘要:本文详细介绍了使用FFmpeg库进行媒体文件读取和解码的初始化过程。首先,通过avformat_alloc_context创建上下文,并设置中断回调函数。接着,使用avformat_open_input打开文件并探测协议类型。通过avformat_find_stream_info进一步获取流信息,并检测是否指定播放起始时间。随后,选择播放流并设置窗口大小。最后,初始化解码器并启动解码线程,创建packet队列以处理数据读取和解码。整个过程涵盖了从文件打开到解码器启动的关键步骤,为后续的媒体播放奠定

2025-05-13 19:52:13 1207

原创 《Docker 入门与进阶:架构剖析、隔离原理及安装实操》

Docker 的隔离机制通过。

2025-05-13 19:50:40 2640

原创 定时器设计

*红黑树建议了解一下 **

2025-05-12 15:45:18 807

原创 FFplay 播放器架构解析:从代码到原理的全面剖析(1)

AVPacket 内存管理AVPacket 的内存分为两部分:结构体本身内存:这部分内存与 MyAVPacketList 节点紧密关联,随 MyAVPacketList 节点的创建而分配,销毁而释放。也就是说,当 MyAVPacketList 节点在 packet_queue_get 操作中被释放时,其包含的 AVPacket 结构体内存也一同被释放。字段指向的内存:通常通过 av_packet_unref 函数来释放。

2025-05-12 10:54:08 941

原创 音视频同步知识

基于时间戳同步:这是最常见的方法。在播放过程中,系统会不断获取音频和视频帧的时间戳,并根据时间戳来调整播放进度。例如,如果发现视频帧的时间戳比音频帧的时间戳大,说明视频播放进度落后于音频,此时可以适当加快视频的播放速度,或者暂停音频的播放,直到两者的时间戳接近。

2025-05-09 17:41:28 458

原创 一文让你nginx入门

概述Nginx(engine x)作为一款开源软件,在网络服务领域占据着举足轻重的地位。它集成了HTTP服务器、反向代理服务器以及电子邮件(IMAP/POP3/SMTP)代理服务器的功能,以其卓越的性能、高度的稳定性和丰富的功能特性,成为全球众多企业和开发者构建高效网络应用的首选方案。起源与发展Nginx的诞生源于对解决高并发访问难题的迫切需求。俄罗斯工程师伊戈尔·赛索耶夫在为访问量位居俄罗斯第二的Rambler.ru站点提供技术支持时,深刻认识到传统服务器软件在处理大规模并发连接时的局限性。

2025-05-09 16:27:45 1063

原创 剖析 FFmpeg:从基本功能到过滤器,实现音视频处理的灵活性

文档聚焦 FFmpeg 在音视频处理方面的应用,详细介绍了从解复用到过滤器的处理流程。解复用阶段,从媒体文件中分离出音频和视频流,为后续处理做准备。解码环节,将编码后的音视频数据还原成硬件设备可处理的格式,音频和视频解码各自有特定流程和操作。修饰部分,AVIO 模块在文件读取和网络流处理中发挥关键作用,重采样则解决了音频输出设备适配等问题。过滤器是重点内容,它能提升播放质量、实现格式转换,文中介绍了相关结构体,列举了常见过滤器,还通过实例讲解了简单和复杂滤镜图的使用,展示了 FFmpeg 在音视频处理上的强

2025-05-08 20:46:39 1135

原创 MySQL vs Redis 终极对决:从存储原理到实战优化,这篇让你彻底搞懂数据存储的 “最优解”

在数据存储的江湖里,MySQL 稳坐关系型数据库 “老大哥” 宝座,Redis 则是内存数据库 “极速先锋”,二者看似对立,实则在业务场景中互补共生。本文从底层架构到上层应用,深度拆解两者在数据存储、客户端架构、安全权限、性能优化等六大核心领域的异同:存储本质差异:MySQL 用表结构锁定制约化数据,Redis 靠灵活键值对驰骋非结构化场景,磁盘与内存的碰撞如何催生 “MySQL 存核心 + Redis 加速读” 的黄金组合?性能突围之道:MySQL 靠索引优化复杂查询,Redis 用内存计算秒杀高频

2025-05-07 09:41:40 836

原创 redis大全

启动Redis 默认是没有设置用户和密码的,即可以无密码访问设置密码的方法:可以通过修改 Redis 的配置文件redis.conf来设置密码。打开配置文件,找到requirepass这一行,将其后面的值设置为你想要的密码,例如requirepass mypassword。保存配置文件后,重启 Redis 服务使设置生效。通过命令行设置密码:也可以在 Redis 运行时通过命令行动态设置密码。

2025-05-06 21:27:39 959

原创 探索MySQL InnoDB:事务、日志与锁的奥秘

本文深入探讨了 MySQL InnoDB 存储引擎中的事务管理、日志机制和锁的使用。从事务的基本概念和 ACID 特性出发,详细介绍了 InnoDB 支持的四种隔离级别及其应用场景。进一步阐释了多版本并发控制(MVCC)机制如何通过 Read View 实现一致性非锁定读,并分析了不同隔离级别下的幻读问题及解决方案。此外,文章详细解读了 InnoDB 的锁机制,包括共享锁、排他锁、意向锁、记录锁、间隙锁和临键锁的工作原理和适用场景。同时,深入剖析了 undolog 和 redolog 的功能、工作原理及其在

2025-04-30 11:18:03 1019

原创 基于ffmpeg的音视频编码

视频码率是视频数据(包含视频⾊彩量、亮度量、像素量)每秒输出的位数。⼀般⽤的单位是kbps。

2025-04-28 16:18:49 841

原创 数据库基础与核心操作:从概念到实战的全面解析

本文系统阐述数据库相关知识,先介绍数据库、关系型数据库等基本概念,剖析 OLTP、OLAP 工作模式与 SQL 语言构成。接着围绕数据库基本操作展开,涵盖 DCL(用户权限管理)、DDL(数据库与表结构定义)、DML(数据增删改)、DQL(高级查询)。同时深入讲解视图、存储过程、触发器等高级功能及主键、外键等约束机制,最后详细介绍索引的类型、实现原理与失效场景,助力读者掌握数据库管理与操作核心要点。

2025-04-28 11:21:36 1045

原创 一些有关ffmpeg 使用(1)

指向预先分配好的缓冲区的指针,该缓冲区用于存储从数据源读取的数据(读取模式)或要写入数据源的数据(写入模式)。在调用此函数之前,你需要使用 av_malloc 等内存分配函数为其分配足够的内存空间。缓冲区的大小,以字节为单位。该值指定了 buffer 所指向的内存区域的大小。一个布尔值,用于指示 AVIOContext 的操作模式。0 表示只读模式,即 AVIOContext 仅用于从数据源读取数据。非零值(通常为 1)表示可写模式,即 AVIOContext 用于向数据源写入数据。

2025-04-25 11:05:13 889

原创 FLV 与 MP4 格式深度剖析:结构、原理

本文聚焦于互联网常用的 FLV 与 MP4 多媒体格式,深入解析其内部结构与工作原理。FLV 格式以 “文件头 + 文件体” 为基础,通过独特的 Previous Tag Size 字段串联数据,实现高效逆向读取;MP4 格式则采用 Box 嵌套体系,将各类媒体元素整合于 moov、trak 等关键 Box 中,凭借强大的兼容性与灵活的结构管理多种音视频轨道。文章通过详细拆解各部分组成,结合示例对比两种格式在音视频数据存储、时间戳处理、样本管理等方面的差异,帮助读者全面理解其技术特性,为音视频处理、格式转换

2025-04-22 20:55:12 1130

原创 揭秘 Linux 并发编程:从线程进程博弈到原子操作 “黑科技”,一文击穿性能优化密码

线程与进程的 “爱恨纠葛” 如何影响系统效率?互斥锁、自旋锁谁才是高并发场景的 “锁王”?看似神秘的原子操作,究竟藏着哪些硬件级 “开挂” 原理?本文深度拆解 Linux 并发编程的核心技术,从 task_struct 结构体剖析线程与进程的底层关联,通过大量实测数据对比不同锁机制的优劣,还原原子操作的硬核实现逻辑。更有进程亲缘性 “神技”,教你如何让进程精准绑定 CPU 核心,实现缓存命中率飙升。无论你是想攻克并发难题的开发者,还是渴望窥探系统底层奥秘的技术探索者,这份 “避坑指南 + 实战秘籍”,都将颠

2025-04-22 09:45:15 1003

原创 基于 FFmpeg 的音视频处理基础原理与实验探究

本文围绕音视频处理的基本知识展开,详细阐述了解封装、AAC 和 ADTS、H.264 等关键概念。解封装作为封装的逆向操作,可将视频文件按规则拆分为音频流、视频流、字幕流等成分,并通过流索引标识进行区分。AAC 作为一种有损音频压缩格式,其 ADTS 封装格式包含固定头和可变头信息,用于解码器解析音频数据。H.264 则是常用的视频编码标准,通过对视频帧图像进行相似比较和压缩编码,以及 I 帧、P 帧、B 帧的设置实现高效压缩。同时介绍了 IDR、GOP、NALU 等 H.264 编码结构和相关概念,以及

2025-04-21 11:08:31 1146

原创 探秘 C++ 内存管理:从虚拟内存到内存池的深度解析与实战应用

本文深入剖析了计算机内存管理的核心知识,特别是 C++ 程序中的内存运用。首先,详细介绍了虚拟内存与物理内存的概念,阐述了虚拟内存解决内存资源浪费、进程数据安全和程序运行地址错误等问题的原理,以及通过 MMU、页表和内存映射文件实现虚拟到物理内存的映射方式。接着,讲解了关键的内存概念,如 Swap、Buffers 和 Cache,以及它们在数据处理中的重要作用。在 C++ 程序内存方面,全面阐述了内存布局、操作方法、对齐规则、内存泄漏问题及智能指针的使用。最后,着重介绍了内存池的基本概念、实现原理、代码实现

2025-04-19 19:56:13 1626

原创 FFmpeg 硬核指南:从底层架构到播放器全链路开发实战 基础

还在为音视频开发发愁?一文吃透 FFmpeg 核心!本指南深度剖析 FFmpeg 七大核心模块(AVFormat、AVCodec、AVFilter 等)功能与应用场景,手把手教学播放器 API 全流程:从解复用阶段的文件格式探测、流信息获取,到编解码阶段的上下文配置、数据传输,再到内存管理中 AVPacket 与 AVFrame 的引用计数原理及操作技巧,配合详细代码示例与流程图解,助你快速掌握 FFmpeg 从基础到高阶的开发技能,轻松应对音视频处理、播放器开发等实际项目需求,开启音视频开发的进阶之路!

2025-04-18 18:24:08 1153

原创 SDL基础

在实验一中,介绍了如何创建SDL窗口,并解释了窗口创建过程中的关键参数。实验二深入探讨了渲染器和纹理器的使用方法,包括如何创建纹理、设置渲染目标和绘制纹理。实验三展示了如何使用SDL的事件系统来处理用户输入和系统事件,如键盘按键、鼠标移动和窗口调整大小等。实验四则聚焦于SDL的多线程支持,详细介绍了如何创建线程、使用互斥锁和条件变量进行线程同步。通过一个具体的多线程示例,展示了线程间的通信和同步机制,包括线程的创建、等待、互斥锁的锁定与解锁、条件变量的等待与通知。最后,结合SDL的窗口和渲染功能以及FF

2025-04-17 21:04:30 832

原创 Linux 系统 CPU、内存及文件 I/O 性能监控详解

本文全面介绍了 Linux 系统中 CPU、内存及文件 I/O 性能监控的相关知识。在 CPU 性能监控方面,阐述了进程的多种状态(运行、睡眠、停止等)、平均负载的含义、CPU 使用率与平均负载的关系,以及 stress、mpstat、pidstat 等监测命令的使用和原理,还深入讲解了 CPU 上下文切换的类型(系统调用、进程、线程)及原因。内存性能监控部分,剖析了虚拟内存与物理内存的概念,包括进程虚拟内存的分配与映射,Swap 空间、Buffers 和 Cached 的作用,以及 free 命令查看内存

2025-04-17 09:45:15 1020

原创 协程从原理到最新的c++协程特性

void *arg;char cEnd;协程结构体调度器结构体。

2025-04-15 21:15:11 791

原创 神经网络复习

你可以理解为一种。

2025-04-15 17:43:22 1031

原创 linux基础命令和工具

linux

2025-04-15 10:54:11 800

原创 make 与 cmake:软件开发中的编译构建工具详解

:本文详细介绍了软件开发中常用的编译构建工具make与cmake。首先阐述了make的重要性,深入解析了 Makefile 的三要素(目标、依赖、命令)及其工作原理,通过多个实验展示了make的运行机制、依赖机制和变量机制等基本语法。随后介绍了cmake的诞生背景,因其能解决make在跨平台编译时的局限性,是一个跨平台的自动构建工具。通过不同实验,包括最简单的 CMakeLists.txt 示例、内部库源码编译、生成静态库和动态库以及寻找外部库等,详细讲解了cmake的语法和使用方法,帮助开发者更高效地进行

2025-04-14 19:38:50 859

原创 GCC和GDB基础知识

优化编译是指在编译过程中,编译器对源代码进行一系列分析和转换,以生成执行效率更高、占用资源更少的目标代码的过程。

2025-04-14 18:08:32 932

原创 从红黑树到哈希表:原理对比与典型场景应用解析(分布式以及布隆过滤器)

摘要本文围绕数据结构在高效查找与大规模数据处理中的应用,对比分析了红黑树与哈希表的核心特性,并扩展介绍了布隆过滤器与分布式一致性哈希的原理及实践。1. 红黑树:平衡有序的经典方案红黑树作为自平衡二叉查找树,通过严格的节点颜色规则(根黑、叶黑、红节点无子红、黑高平衡)维持树的平衡,确保插入、删除、查找的时间复杂度稳定在 \(O(\log n)\),适用于需要范围查询(如数据库索引、优先级队列)的有序数据场景。但其路径依赖的比较式搜索和平衡调整开销,在单键快速查找场景中存在冗余,有序性反而成为负担。2. 哈希表

2025-04-13 21:59:34 902

空空如也

空空如也

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

TA关注的人

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