- 博客(150)
- 收藏
- 关注
原创 css入门
bold;text-align;.box;padding;</</</</</style.css<link></内联样式)Inline style > (内部样式)Internal style sheet >(外部样式)External style sheet > 浏览器默认样式标签名p { }<p>
2025-06-12 17:58:46
247
原创 html入门知识
HTML是创建网页的标准标记语言,通过标签描述网页结构和内容。基础HTML文档包含<html>根元素、<head>头部(存放元数据)和<body>主体(显示内容)。常见标签包括:<p>段落、<br>换行、<div>块级元素、<span>内联元素、<img>图片和<a>超链接。表格使用<table>、<tr>行和<td>单元格,列表用<ol>有序列表。Flex布局可实现响应式页面结构,如垂直/水平排列元素。表单<form>包含文本/密码输入框、单选/复选框、下拉菜单和提交按钮,用于收集用户数据。这些基础元素共
2025-06-12 16:01:19
256
原创 从sdp开始到webrtc的通信过程
一、信令阶段(SDP 协商:Offer/Answer 模型)核心目标:交换双方媒体能力(编码、分辨率等)和网络协商参数(ICE 策略、DTLS 安全配置),为后续连接做准备。Client 生成 Offer(SDP)Client(如浏览器)先构建 SDP Offer,包含:会话元信息v=0(协议版本)、o=(会话 ID/发起者)、s=-(会话名)、t=0 0(会话时长)。媒体描述m=video(视频流)、(支持 VP8 编码)、a=rtcp-fb(拥塞控制反馈策略)。网络与安全a=ice-pwd。
2025-06-11 10:02:54
681
原创 WebRTC 中 ICE 流程优化:SRS 轻量级部署与 NAT 类型检测实战
STUN(Session Traversal Utilities for NAT ,NAT 会话遍历实用程序 )是一套网络协议,最初由 RFC3489 定义,后因局限性多,迭代出。
2025-06-10 16:59:01
1112
原创 从基础到实战-rmpt to webrtc
fill:#333;color:#333;color:#333;fill:none;TCP视频音频WebSocketICE候选从Stream拉取帧UDPRTCP反馈RTMP推流SrsRtmpProtocol解析ChunkSrsRtmpConn处理Message消息类型SrsH264Parser解析NAL单元SrsAacParser解析ADTS帧SrsStream存储视频帧WebRTC客户端SrsRtcServer接收OfferSrsSdpParser解析SDP。
2025-06-10 11:25:57
1185
原创 janus客户端源码分析
Janus客户端框架摘要(150字):Janus WebRTC客户端开发流程包含7个关键步骤:加载janus.js库→初始化配置→创建会话→绑定插件→信令交互→资源释放→销毁会话。核心通过Janus.create()建立WebSocket连接生成session_id,使用janus.attach()绑定视频会议等插件,handle.send()实现信令交互,结合createOffer/Answer完成WebRTC媒体协商。最后需按序销毁handle和session释放资源。该框架封装了底层复杂度,开发者
2025-06-06 16:09:14
660
原创 从信令到janus的信令刨析
结合文档《31-04web客户端信令分析2-4.pdf》内容,针对publish(发布)和subscribe(订阅)一、publish 的“自动性”本质是信令驱动与 WebRTC 协商的封装信令触发是前提publish需通过信令显式调用,携带SDP Offer完成媒体协商(如文档中jsep字段的使用,)。示例信令:{"handle_id": "插件句柄ID",表明发布需主动发送信令并提供协商参数,非“自动”行为。WebRTC 流程的自动化浏览器通过。
2025-06-06 11:52:04
591
原创 从webrtc到janus简介
以下是对核心原理对比方案数据流向服务器角色媒体处理方式终端负载Mesh终端 ↔ 终端仅信令中转无(直连)极高(发送 N-1 路,接收 N-1 路)SFU终端 → 服务器 → 终端选择性转发原始流不解码、不混流高(渲染多路流)MCU终端 → 服务器 → 终端解码、混流、重编码集中处理为单路流低(仅接收单路混流)关键指标对比维度MeshSFUMCU延迟最低(直连)低(转发延迟)高(编解码延迟)服务器带宽无(终端直连)中(单流 × 参与人数)
2025-06-06 09:42:51
1210
原创 webrtc初了解
Web Real-Time Communication(网页实时通信),是浏览器原生支持的实时音视频通信技术,无需安装插件或客户端,可直接在浏览器之间实现点对点(P2P)通信。核心目标:让浏览器具备实时数据传输能力(音视频、文本、文件等),常用于视频会议、直播连麦、在线教育等场景。核心在客户端(浏览器)(如 getUserMedia、RTCPeerConnection 等),用于在 客户端之间直接建立实时连接(如音视频流、数据传输)。
2025-05-29 10:32:13
1153
原创 万字详解RTR RTSP SDP RTCP
一、RTSP 是什么?(定义与定位)RTSP(Real Time Streaming Protocol) 是一个应用层协议,用于控制流媒体的播放行为。类比生活场景:如果把流媒体比作 “自来水”,RTSP 就像是 “水龙头开关”,负责开启 / 暂停 / 调节水流,但不负责 “运输水”(数据传输由 RTP 负责)。二、RTSP 的核心功能是什么?(四大控制命令)建立会话(SETUP)客户端告诉服务器:“我要播放这个视频,用 RTP/UDP 协议,我的接收端口是 5000-5001”。
2025-05-28 15:52:46
1118
原创 直播框架:基础知识点
本文介绍了直播系统的基本架构和关键技术点。系统主要包含SRS直播集群、Nginx反向代理和CDN三部分,SRS负责流媒体处理,支持RTMP、HLS等协议;Nginx实现负载均衡和缓存加速;CDN通过边缘节点提升内容分发效率。直播流程包括采集、处理、编码、推流、服务器中转、拉流和解码播放等环节。技术细节方面,重点分析了推流和拉流过程中的音视频处理、编码、同步、缓冲等技术难点,以及延迟、抗丢包等关键指标。整体架构通过业务服务器、流媒体服务器和客户端的协同配合,实现高效的直播服务。
2025-05-28 14:58:30
780
原创 详解srs流媒体服务器的集群
SRS集群通过Forward和Edge两种模式实现直播流分发。Forward模式下,Master节点主动推送流至Slave节点,适合小型集群但存在带宽浪费问题;Edge模式采用"推源站+拉边缘"架构,边缘节点按需回源拉流,降低带宽压力,适用于大型分布式场景。两种模式均支持负载均衡和容灾,但Edge模式通过缓存机制优化资源利用率,更适合高并发场景。配置时需区分源站与边缘节点角色,并针对性调整RTMP/HTTP参数。
2025-05-27 17:44:00
814
原创 万字讲清srs流媒体服务器基础
SRS流媒体服务器是一个开源的高性能实时音视频传输解决方案,支持RTMP、HTTP-FLV、HLS、WebRTC等多种协议,适用于直播、在线教育等场景。其核心特点包括:基于C++开发的异步IO和协程技术实现低延迟(WebRTC模式500ms内)和高并发(单机万级);支持集群部署、流录制、实时转码等丰富功能。目录结构清晰,核心代码位于trunk/src目录,主要源文件涵盖网络连接处理、协议实现、媒体流管理等模块。配置文件可灵活调整监听端口、并发数、协议开关等参数,如默认开启RTMP(1935端口)、HTTP-
2025-05-27 10:10:54
1042
原创 一文详解 HLS
HLS(HTTP Live Streaming)是一种基于HTTP协议的流媒体传输技术,旨在解决传统直播协议(如RTMP)在浏览器支持、移动端普及和防火墙兼容性等方面的不足。HLS通过将直播流分割为小尺寸的媒体片段(如TS文件),并利用HTTP协议进行传输,实现了跨平台、无插件播放的直播体验。其核心设计包括分段传输、无状态协议和动态码率调整,以适应不同网络条件。然而,HLS的延迟问题较为显著,通常在5-30秒之间,主要源于文件分块和客户端缓冲机制。HLS的工作原理包括音视频采集、编码、流分段、索引文件生成和
2025-05-23 18:02:38
844
原创 一文详解RTMP协议
RTMP(实时消息传输协议)是一种应用层协议,依赖TCP等可靠传输层协议进行数据传输。其核心流程包括:建立传输层连接、通过握手初始化RTMP Connection连接、创建Stream流连接以传输音视频数据,以及将消息(Message)分块为Chunk进行传输与重组。RTMP协议通过SetChunkSize和SetACKWindowSize等命令优化数据传输效率与流量控制。Chunk的默认大小为128字节,但可根据网络状况灵活调整,以平衡CPU占用率与带宽利用率。RTMP的消息由时间戳、长度、类型ID和消息
2025-05-23 16:30:13
681
原创 一文读懂测试单元gtest
gtest 是 Google 开发的 C++ 单元测试框架,提供了丰富的断言、测试夹具和测试运行器等功能,帮助开发者编写高效、可维护的测试代码。好的测试单元应具备独立性、结构化组织、跨平台兼容性、丰富的失败信息、低维护成本和高执行效率等特点。gtest 通过自动注册机制、参数化测试和并行执行等特性,减少了测试代码的重复性,提升了测试效率。安装 gtest 可以通过克隆 GitHub 仓库并使用 CMake 进行编译和安装。gtest 的断言分为非致命断言(EXPECT_)和致命断言(ASSERT_),支持布
2025-05-22 17:01:49
1073
原创 一文读懂GRPC
一、什么是 Protobuf?Protobuf 是 Google 开发的二进制序列化协议,用于结构化数据的高效存储和传输。它与 HTTP/2 结合后,能进一步提升网络通信的性能。核心特点强类型定义:通过.proto文件定义数据结构,类似接口描述语言(IDL)。二进制格式:数据被序列化为二进制,比文本格式(XML/JSON)更小、更快。高性能:序列化和反序列化速度极快(比 JSON 快 3-10 倍)。向后兼容:支持版本演进,旧代码能解析新数据格式。
2025-05-22 16:55:06
864
原创 火焰图简介
火焰图(Flame Graph) 是软件开发领域高效的性能分析可视化工具,核心价值在于通过直观的图形结构,精。其名称源于图形呈现时层级分明、形似火焰升腾的视觉特征。:用于存储局部变量(如 localVar、stackArray)、函数参数、返回地址等,由编译器自动管理,遵循 “后进先出” 原则。火焰图采用随机暖色调(如红、橙、黄)填充格子,仅用于区分不同函数,无实际数据含义。这种设计避免颜色干扰对宽度和层级的判断,聚焦核心性能指标。
2025-05-21 10:38:36
592
原创 ffplay实现功能大全
ffplay 是一个基于 SDL 和 FFmpeg 的简单播放器,支持多种播放控制功能。通过键盘事件,用户可以实现播放、暂停、静音、音量调节、全屏切换、逐帧播放等操作。播放器启动时自动播放,暂停时通过 p 或空格键恢复。暂停状态下,视频停止解码并停留在最后一帧,音频则通过填充静音数据或停止解码来处理。时钟同步机制确保暂停和恢复时的音视频同步,暂停时时钟停止更新,恢复时通过计算暂停时间差来修正时钟。数据读取线程在暂停时停止读取新数据包,恢复时重新唤醒解码线程继续处理数据。
2025-05-16 08:44:07
1006
原创 Docker 从入门到实战全攻略:镜像、Dockerfile、数据卷与网络详解
Docker镜像是只读的容器模板,包含启动容器所需的所有资源,如文件系统和配置信息。其特点包括分层结构、写时复制、内容寻址和联合挂载,这些特性使得镜像在存储和运行时更加高效。Dockerfile则是构建镜像的“菜谱”,通过一系列指令描述镜像的制作步骤,如拉取基础镜像、安装软件等。Dockerfile的分层构建和缓存机制可以显著提升构建效率。常用指令包括FROM(指定基础镜像)、RUN(执行命令)、CMD(设置容器启动命令)等。通过合理使用这些指令,可以高效地构建和管理Docker镜像。
2025-05-15 22:40:19
650
原创 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
776
原创 FFplay 音视频同步机制解析:以音频为基准的时间校准与动态帧调整策略
音视频同步是确保视频播放时声音和画面一致的关键技术。由于音频和视频数据通常在不同的线程中处理,且时间戳(PTS)可能不连续或错误,因此需要通过同步策略来调整播放速度和时刻。常见的同步策略包括以音频为基准同步视频、以视频为基准同步音频、以外部时钟为基准同步以及结合外部时钟调整播放速度。这些策略通过动态调整音频或视频的播放速度,确保音画同步。在ffplay中,音频和视频分别有自己的输出线程,通过时间戳(PTS)和时钟(Clock)等机制实现同步。时间戳用于标记帧的显示时间,时钟则用于估算和校准播放时间,确保音视
2025-05-14 20:44:55
1060
原创 《ffplay 读线程与解码线程分析:从初始化到 seek 操作,对比视频与音频解码的差异》
文章摘要:本文详细介绍了使用FFmpeg库进行媒体文件读取和解码的初始化过程。首先,通过avformat_alloc_context创建上下文,并设置中断回调函数。接着,使用avformat_open_input打开文件并探测协议类型。通过avformat_find_stream_info进一步获取流信息,并检测是否指定播放起始时间。随后,选择播放流并设置窗口大小。最后,初始化解码器并启动解码线程,创建packet队列以处理数据读取和解码。整个过程涵盖了从文件打开到解码器启动的关键步骤,为后续的媒体播放奠定
2025-05-13 19:52:13
1240
原创 FFplay 播放器架构解析:从代码到原理的全面剖析(1)
AVPacket 内存管理AVPacket 的内存分为两部分:结构体本身内存:这部分内存与 MyAVPacketList 节点紧密关联,随 MyAVPacketList 节点的创建而分配,销毁而释放。也就是说,当 MyAVPacketList 节点在 packet_queue_get 操作中被释放时,其包含的 AVPacket 结构体内存也一同被释放。字段指向的内存:通常通过 av_packet_unref 函数来释放。
2025-05-12 10:54:08
958
原创 音视频同步知识
基于时间戳同步:这是最常见的方法。在播放过程中,系统会不断获取音频和视频帧的时间戳,并根据时间戳来调整播放进度。例如,如果发现视频帧的时间戳比音频帧的时间戳大,说明视频播放进度落后于音频,此时可以适当加快视频的播放速度,或者暂停音频的播放,直到两者的时间戳接近。
2025-05-09 17:41:28
463
原创 一文让你nginx入门
概述Nginx(engine x)作为一款开源软件,在网络服务领域占据着举足轻重的地位。它集成了HTTP服务器、反向代理服务器以及电子邮件(IMAP/POP3/SMTP)代理服务器的功能,以其卓越的性能、高度的稳定性和丰富的功能特性,成为全球众多企业和开发者构建高效网络应用的首选方案。起源与发展Nginx的诞生源于对解决高并发访问难题的迫切需求。俄罗斯工程师伊戈尔·赛索耶夫在为访问量位居俄罗斯第二的Rambler.ru站点提供技术支持时,深刻认识到传统服务器软件在处理大规模并发连接时的局限性。
2025-05-09 16:27:45
1079
原创 剖析 FFmpeg:从基本功能到过滤器,实现音视频处理的灵活性
文档聚焦 FFmpeg 在音视频处理方面的应用,详细介绍了从解复用到过滤器的处理流程。解复用阶段,从媒体文件中分离出音频和视频流,为后续处理做准备。解码环节,将编码后的音视频数据还原成硬件设备可处理的格式,音频和视频解码各自有特定流程和操作。修饰部分,AVIO 模块在文件读取和网络流处理中发挥关键作用,重采样则解决了音频输出设备适配等问题。过滤器是重点内容,它能提升播放质量、实现格式转换,文中介绍了相关结构体,列举了常见过滤器,还通过实例讲解了简单和复杂滤镜图的使用,展示了 FFmpeg 在音视频处理上的强
2025-05-08 20:46:39
1153
原创 MySQL vs Redis 终极对决:从存储原理到实战优化,这篇让你彻底搞懂数据存储的 “最优解”
在数据存储的江湖里,MySQL 稳坐关系型数据库 “老大哥” 宝座,Redis 则是内存数据库 “极速先锋”,二者看似对立,实则在业务场景中互补共生。本文从底层架构到上层应用,深度拆解两者在数据存储、客户端架构、安全权限、性能优化等六大核心领域的异同:存储本质差异:MySQL 用表结构锁定制约化数据,Redis 靠灵活键值对驰骋非结构化场景,磁盘与内存的碰撞如何催生 “MySQL 存核心 + Redis 加速读” 的黄金组合?性能突围之道:MySQL 靠索引优化复杂查询,Redis 用内存计算秒杀高频
2025-05-07 09:41:40
844
原创 redis大全
启动Redis 默认是没有设置用户和密码的,即可以无密码访问设置密码的方法:可以通过修改 Redis 的配置文件redis.conf来设置密码。打开配置文件,找到requirepass这一行,将其后面的值设置为你想要的密码,例如requirepass mypassword。保存配置文件后,重启 Redis 服务使设置生效。通过命令行设置密码:也可以在 Redis 运行时通过命令行动态设置密码。
2025-05-06 21:27:39
964
原创 探索MySQL InnoDB:事务、日志与锁的奥秘
本文深入探讨了 MySQL InnoDB 存储引擎中的事务管理、日志机制和锁的使用。从事务的基本概念和 ACID 特性出发,详细介绍了 InnoDB 支持的四种隔离级别及其应用场景。进一步阐释了多版本并发控制(MVCC)机制如何通过 Read View 实现一致性非锁定读,并分析了不同隔离级别下的幻读问题及解决方案。此外,文章详细解读了 InnoDB 的锁机制,包括共享锁、排他锁、意向锁、记录锁、间隙锁和临键锁的工作原理和适用场景。同时,深入剖析了 undolog 和 redolog 的功能、工作原理及其在
2025-04-30 11:18:03
1024
原创 数据库基础与核心操作:从概念到实战的全面解析
本文系统阐述数据库相关知识,先介绍数据库、关系型数据库等基本概念,剖析 OLTP、OLAP 工作模式与 SQL 语言构成。接着围绕数据库基本操作展开,涵盖 DCL(用户权限管理)、DDL(数据库与表结构定义)、DML(数据增删改)、DQL(高级查询)。同时深入讲解视图、存储过程、触发器等高级功能及主键、外键等约束机制,最后详细介绍索引的类型、实现原理与失效场景,助力读者掌握数据库管理与操作核心要点。
2025-04-28 11:21:36
1051
原创 一些有关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
1151
原创 揭秘 Linux 并发编程:从线程进程博弈到原子操作 “黑科技”,一文击穿性能优化密码
线程与进程的 “爱恨纠葛” 如何影响系统效率?互斥锁、自旋锁谁才是高并发场景的 “锁王”?看似神秘的原子操作,究竟藏着哪些硬件级 “开挂” 原理?本文深度拆解 Linux 并发编程的核心技术,从 task_struct 结构体剖析线程与进程的底层关联,通过大量实测数据对比不同锁机制的优劣,还原原子操作的硬核实现逻辑。更有进程亲缘性 “神技”,教你如何让进程精准绑定 CPU 核心,实现缓存命中率飙升。无论你是想攻克并发难题的开发者,还是渴望窥探系统底层奥秘的技术探索者,这份 “避坑指南 + 实战秘籍”,都将颠
2025-04-22 09:45:15
1005
原创 基于 FFmpeg 的音视频处理基础原理与实验探究
本文围绕音视频处理的基本知识展开,详细阐述了解封装、AAC 和 ADTS、H.264 等关键概念。解封装作为封装的逆向操作,可将视频文件按规则拆分为音频流、视频流、字幕流等成分,并通过流索引标识进行区分。AAC 作为一种有损音频压缩格式,其 ADTS 封装格式包含固定头和可变头信息,用于解码器解析音频数据。H.264 则是常用的视频编码标准,通过对视频帧图像进行相似比较和压缩编码,以及 I 帧、P 帧、B 帧的设置实现高效压缩。同时介绍了 IDR、GOP、NALU 等 H.264 编码结构和相关概念,以及
2025-04-21 11:08:31
1153
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人