- 博客(30)
- 资源 (8)
- 收藏
- 关注
原创 PeerConnection 深度解析四:CreateAnswer
W3C 规范对的定义是:在收到远端 Offer 并调用之后, 生成一个与该 Offer 兼容的 SDP Answer,描述本端接受的媒体配置。与Answer 不是自由发挥,而是对 Offer 的响应和协商。规范要求实现方必须:必须在或状态下才能调用Answer 中每个 m= section 必须与 Offer 一一对应,顺序和数量不能变每个 m= section 的编解码器必须是 Offer 中的子集(取交集)direction 必须是 Offer direction 的协商结果。
2026-04-20 15:20:31
270
原创 PeerConnection 深度解析三:SetRemoteDescription
W3C 规范对的核心要求:将对端的 SDP 描述设置为远端描述,根据描述内容驱动本端 Transceiver 状态更新、Track 创建/移除、信令状态机推进。与相比,多了一项关键职责: 触发OnTrackOnAddTrack回调,通知应用层对端的媒体轨道已就绪。同样必须通过串行执行设置成功后信令状态按规则推进Offer 时创建/更新 Transceiver,并触发ontrack事件Answer 时确认方向,绑定 DtlsTransport支持。
2026-04-17 17:26:47
270
原创 PeerConnection 深度解析二:SetLocalDescription
W3C 规范对的核心要求是:将一个 SDP 描述设置为本端的本地描述,并根据描述类型(Offer/Answer)驱动信令状态机的状态转移。规范还要求:必须通过串行执行设置成功后,信令状态()必须按规则更新如果是 Offer,被更新如果是 Answer,被更新,协商完成设置成功后,ICE 候选收集必须立即启动这最后一点非常关键,也是与CreateOffer 只生产 SDP 文本,SetLocalDescription 才真正触发底层动作。
2026-04-16 15:21:12
308
原创 PeerConnection深度解析一:CreateOffer
W3C 规范对的定义非常简洁:生成一个 SDP Offer,包含本端支持的媒体能力配置,用于发起一次新的 WebRTC 会话,或者修改一个已建立的会话。但"简洁"的背后,规范要求实现方必须处理相当多的细节:收集当前所有的媒体描述根据决定 m= section 的方向携带本端的 ICE 凭据(ufrag / pwd)携带 DTLS 证书指纹(处理 ICE Restart 逻辑整个操作必须串行化,不能与其他信令操作并发这些细节,在 libwebrtc 里都有对应的实现,我们一层一层来看。应用层。
2026-04-15 16:18:37
247
原创 PeerConnection 一切通话的起点
PeerConnectionDependencies 是 libwebrtc 的依赖注入结构, 允许外部注入 ICE transport、证书生成器、DNS 解析器等组件, 这也是 libwebrtc 可扩展性的核心设计。整个过程中,PeerConnection 是总调度者: 它不直接发数据,但驱动 RTP 发送 它不直接连接网络,但驱动 ICE 和 DTLS 它不直接回调业务,但通过 Observer 通知上层每一个关键事件。SDP 协商完成后,双端需要交换网络候选地址,才能找到一条可通的路径。
2026-04-14 15:48:16
654
原创 Track、Source、Sink介绍
概念W3C 定义libwebrtc 接口核心职责Source媒体来源(内部槽)生产帧,管理 Sink 列表,分发 OnFrameTrack代理层:控制 enable/disable,透传 Sink 注册到 SourceSink消费者(隐式)被动接收帧,实现 OnFrame()一个 Source 可以被多个 Track 共享(代码注释第 55 行:"A source can be shared by multiple tracks"),每个 Track 又可以有多个 Sink。
2026-04-13 14:57:11
195
原创 WebRTC 概述
WebRTC(Web Real-Time Communication)是一个开源项目,旨在让浏览器和移动应用通过简单的 API 实现实时音视频通信和数据传输。
2026-04-09 11:31:26
227
原创 WebRTC 完全解析系列文章目录
14.2 第三方封装:Flutter WebRTC、React Native WebRTC。15.2 Mediasoup(Node.js):高性能 SFU,TypeScript 实现。第二部分:WebRTC 源码解析篇(深入理解) 6. WebRTC 代码结构与编译。第三部分:开源库与生态篇(扩展应用) 14. WebRTC 客户端 SDK。6.3 关键模块介绍:api、pc、media、p2p、rtc_base。15.1 Pion WebRTC(Go):纯 Go 实现,轻量级 SFU。
2026-04-09 11:29:21
179
原创 ffmpeg录制转发mediasoup的音视频流
在上一篇章讲述了,如何使用ffmpeg推送本地流到mediasoup(https://blog.csdn.net/qq_15559817/article/details/115698060?spm=1001.2014.3001.5501)本章讲述下如何使用ffmpeg录制mediasoup产生的音视频
2021-08-26 10:39:58
2576
16
原创 ffmpeg推流到mediasoup
0、前言mediasoup提供了PlainTransport可以接收裸RTP数据,可以通过ffmpeg.sh脚本推本地文件到mediasoup(ffmpeg.sh推流介绍脚本路径:mediasoup-demo/broadcasters/ffmpeg.sh)1、PlainTransport 分析( mediasoup.version >= 3.5.0 )PlainTransport 主要用于 RTP/RTCP (或者采用安全的srtp)以及 SCTP(DataChannel)的通讯连接。
2021-04-14 15:08:22
2515
2
原创 Jenkins+GitLab+SonarQube实现自动化代码检测(以C++代码为例)
一、安装SonarQube查看之前的博客https://blog.csdn.net/qq_15559817/article/details/100736498?spm=1001.2014.3001.5501二、安装Jenkins1、安装java jdk环境(1)更新软件包列表sudo apt-get update(2)安装openjdk-8-jdk(不要安装java11,不然之后jenkins会遇到各种问题)sudo apt-get install openjdk-8-.
2021-04-08 20:06:56
3679
原创 RTP载荷PS流全面分析
1、PS流封包格式视频关键帧的封装:RTP|PS header|PS system header|PS system Map|PES header|H264 data 视频非关键帧的封装:RTP|PS header|PES header|H264data 音频帧的封装:RTP|PES header|G7112、服务端PS流接收组包和解析以海康DS-IPC-B12H2-I为例(1)rtp over udp80 60 00 00 00 00 00 00 00 00 04 00 00 0.
2020-09-24 13:49:57
2914
原创 nginx部署mediasoup
0、服务器环境Centos7Node.js v14.0.0GCC >= 4.9(CentOS7默认的gcc版本是v4.8.5,mediasoup由于使用了大量c++11特性,要求>= 4.9)Python 2.7.5(3也没问题,不过要注意编译脚本需要的python的命令,对python3做个软链接好了)root权限1、node.js安装通过nvm安装的node.js开发运行环境 (这里获取最新的nvm install script)curl -o- https
2020-08-29 16:06:04
2770
5
原创 RTP载荷h264码流的解包与封包
一、H264介绍1.1 h264概述h264是一种视频压缩标准。经过压缩后的帧分为:I帧,P帧和B帧:I帧:关键帧,采用帧内压缩技术。(自身可以通过视频解压算法解压成一张单独的完整的图片) P帧:向前参考帧,在压缩时,只参考前面已经处理的帧(只需要参考前面的I帧或P帧)。采用帧音压缩技术。 B帧:双向参考帧,在压缩时,它即参考前而的帧,又参考它后面的帧(需要同时参考前面和后面的I帧或P帧)。采用帧间压缩技术。除了I/P/B帧外,还有图像序列GOP。GOP:两个I帧之间是一个图像序列
2020-05-15 11:06:53
6190
1
转载 AAC文件格式解析
OUTLINE: * AAC概述 * AAC规格简述 * AAC特点 * AAC音频文件解析 ——ADIF&ADTS格式 ——ADIF&ADTS头信息 ——ADIF&ADTS数据信息 ——AAC文件处理流程 * AAC解码流程 ——技术解析 * 术语说明...
2020-05-14 09:28:50
499
原创 IP协议首部详解
1、IP协议概述 IP是TCP/IP协议中最为核心的协议,所有的tcp、udp、icmp、igmp等都是以IP数据报格式传输的,但它提供的是不可靠、无连接的数据包传输服务。不可靠表示它不能保证IP数据包能成功的到达目的地 无连接 表示ip并不维护任何关于后续数据报的状态信息,每个数据报的处理是相互独立的。 普通的IP首部长为20个字节,除非含有选项字段。2、IPv4首...
2020-02-24 15:43:15
16397
原创 国标GB28181平台对接接口详解
1.1 平台注册下级平台主动向上级平台注册; 注册鉴权信息(用户名和密码)由上级提供; 举例说明:下级--->上级REGISTER sip:62010000002000000001@10.130.140.82:7100 SIP/2.0 // 62010000002000000001为上级平台IDCall-ID: c82dee890ea56d9d332fe4a5dbd277...
2019-12-25 16:58:14
15895
6
原创 sip协议的超时机制
0、前言:在讲解sip协议的超时机制之前,先简单地介绍一下sip协议中的message、dialog、session 和 transaction(1)Messages(消息) 消息是在服务器和客户端之间交换的独立文本,有两种类型的消息,分别是请求(Requests)和响应(Responses)。(2)Dialog(对话) 对话是两个UAs(use...
2019-12-19 11:04:07
6102
原创 C++11智能指针之unique_ptr
0、前言针对内存泄露的问题,先提下C语言中该怎么办?有几点建议:编写时尽量遵循函数内申请,函数内释放的原则 注意成对编写malloc和free 使用静态扫描工具,如pclint、cppcheck等 使用内存检测工具,如valgrind1、unique_ptr介绍(1)一个unique_ptr持有所指对象的独有权,即同一时刻只能有一个unique_ptr指向同一个对象。当这个u...
2019-11-26 19:54:11
645
原创 C++ STL之Vector介绍
0.前言在讲解vector之前,先简单的介绍下STL。C++ STL是(Standard Template Library标准模板库)是通用类模板和算法的结合,它提供给程序员一些标准的数据结构的实现如queue(队列),list(链表),和stacks(栈)等。C++ STL提供了三类数据结构的实现:(1)顺序容器vector 从后面快读的插入和删除,直接访问任何元素deq...
2019-11-26 19:06:39
507
原创 SonarQube+cppcheck实现C++代码扫描
背景最近接收到C++代码检测的需求,一开始上网找了很久,sonar的检测都是扫描java、web等,很少有C++的,现将自己调研结果记录于此。工具准备SonarQube工具:展示扫描报告,版本6.7以上 sonar_scanner工具:代码扫描工具 Cppcheck工具:Cppcheck是一种C/C++代码缺陷静态检查工具,不同于C/C++编译器及其它分析工具,Cppcheck只检...
2019-09-11 16:57:04
20319
15
原创 C++中如何调用C接口
前言如何在C++代码中调用写好的C接口?你可能会奇怪,C++不是兼容C吗?直接调用不就可以了?这里我们先按下不表,先看看C++如何调用C代码接口。C++如何调用C接口为什么会有这样的情况呢?想象一下,有些接口是用C实现的,并提供了库,那么C++中该如何使用呢?我们先不做任何区别对待,看看普通情况下会发生什么意想不到的事情。首先提供一个C接口://test.c#include...
2019-08-28 17:18:30
1319
原创 Centos yum安装MySQL8.0详解
在此之前写过centos6.5 yum安装MySQL6.5版本的文章,有需要的可以去了解下:https://blog.csdn.net/qq_15559817/article/details/830388371、卸载系统自带的MySQL版本,可以使用以下命令查看yum list installed | grep mysql然后,使用rpm命令卸载Mysql(根据自己的list...
2019-07-25 18:21:05
443
原创 mysql 报错This function has none of DETERMINISTIC解决方案
出错信息:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_func...
2018-12-17 15:37:22
449
原创 MySQL主从复制
一、复制概述 MySQL内建的复制功能是构建大型、高性能应用程序的基础。将MySQL的数据分布到多个系统上,这种分布的机制,是通过MySQL的某一台主机的数据复制到其他主机(slave)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器...
2018-12-13 11:03:08
193
转载 MySQL数据库备份与还原(基于binlog的增量备份)
一、简介1.1 增量备份简介 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,如此类推。这种备份方式最显著的优点就是:没有重复的备份数据,因此备份的数据量不大,备份所需的时间很短。但增量备...
2018-12-04 16:01:25
656
原创 Centos6.5 yum安装MySQL5.6版本
1.新开的云服务器,需要检测系统是否自带安装mysql[root@cpk src]# yum list installed | grep mysqlmysql-libs.x86_64 5.1.71-1.el6 @anaconda-CentOS-201311272149.x86_64/6.52.如若系统自带mysql,需要先移除掉已安装的版本yum -y re...
2018-10-13 15:47:58
858
转载 MYSQL的COMMIT和ROLLBACK使用讲解
MYSQL的COMMIT和ROLLBACK从功能上划分,SQL 语言可以分为DDL,DML和DCL三大类。1. DDL(Data Definition Language)数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ;CREATE---创建表ALTER---修改表DROP---删除表2. DML(Data Manipulation Language)...
2018-08-06 10:18:37
5330
1
原创 Linux安装mini-xml依赖库
1、从官网下载源码安装包https://github.com/michaelrsweet/mxml/releases直接下载.tar.gz包解压安装,下载版本看个人喜好,建议下载2.10版本。2、解压mxml-2.10.tar.gz文件: 先使用su root命令切换到root权限(否则后续的编译安装会出现权限不够) tar -xzvf mxml-2.10.ta...
2018-02-07 10:27:04
1144
RTSP实时流协议(RFC2326中文版).pdf
2019-11-13
LuaStudio9.2.7.zip
2019-09-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅