RTMP 和 WebRTC

ops/2025/2/6 6:10:14/

WebRTC(Web Real-Time Communication)和 RTMP(Real-Time Messaging Protocol)是两种完全不同的流媒体协议,设计目标、协议栈、交互流程和应用场景均有显著差异。以下是两者的详细对比,涵盖协议字段、交互流程及核心设计思想。


一、协议栈与设计目标对比

特性RTMPWebRTC
传输层基于 TCP(可靠传输)基于 UDP(低延迟,支持 NAT 穿透)
主要用途低延迟直播(单向流)实时音视频通信(双向 P2P/SFU)
协议层级应用层协议(私有协议)协议族(集成 ICE/DTLS/SRTP 等)
延迟1-5 秒(受 TCP 重传影响)100-500 毫秒(UDP + 抗丢包算法)
加密可选(RTMPE 或 TLS)强制加密(DTLS + SRTP)
浏览器支持需 Flash(已淘汰)原生支持(Chrome/Firefox/Safari)

二、RTMP 协议详解

1. 协议栈结构

RTMP Message → Chunk (分块传输) → TCP

2. 关键字段与消息类型

RTMP 握手(Handshake)
  • 3 次握手(C0/C1/C2 和 S0/S1/S2),验证双方协议版本和随机数。
  • C0/S0:1 字节协议版本(例如 0x03)。
  • C1/S1:1536 字节时间戳 + 随机数。
  • C2/S2:回显对方的随机数。
RTMP Chunk 分块
  • 数据分块传输,头部字段:
    • Basic Header(1-3 字节):Chunk Stream ID(CSID)和格式类型。
    • Messag

http://www.ppmy.cn/ops/156070.html

相关文章

2.5寒假作业

web:[HNCTF 2022 Week1]easy_html 打开环境提示饼干里面有什么,就是cookie cookie是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可…

数仓ETL测试

提取,转换和加载有助于组织使数据在不同的数据系统中可访问,有意义且可用。ETL工具是用于提取,转换和加载数据的软件。在当今数据驱动的世界中,无论大小如何,都会从各种组织,机器和小工具中生成大量数据。 …

[x86 ubuntu22.04]进入S4失败

目录 1 问题描述 2 解决过程 2.1 查看内核日志 2.2 新建一个交换分区 2.3 指定交换分区的位置 1 问题描述 CPU:G6900E OS:ubuntu22.04 Kernel:6.8.0-49-generic 使用“echo disk > /sys/power/state”命令进入 S4,但是无法…

Python实现CAN FD 通信(基于PCAN开发CAN FD测试工具)

目录 一.背景 二. 硬件环境 1.CAN通信设备之PCAN 2.物理架构图 三. 资料分析 四. 二次开发 五. 应用 六. 总结 一.背景 在汽车电子领域中CAN是一种被广泛应用的通信协议,CAN 是controller area network 的缩写(以下称为can),是iso国际标准化的串行通信协议。 关于…

【大模型LLM面试合集】大语言模型架构_MHA_MQA_GQA

MHA_MQA_GQA 1.总结 在 MHA(Multi Head Attention) 中,每个头有自己单独的 key-value 对;标准的多头注意力机制,h个Query、Key 和 Value 矩阵。在 MQA(Multi Query Attention) 中只会有一组 k…

JavaScript原型链与继承:优化与扩展的深度探索

在 JavaScript 的世界里,万物皆对象,而每个对象都有一个与之关联的原型对象,这就构成了原型链的基础。原型链,简单来说,是一个由对象的原型相互连接形成的链式结构 。每个对象都有一个内部属性[[Prototype]]&#xff0…

QMK启用摇杆和鼠标按键功能

虽然选择了触摸屏,我仍选择为机械键盘嵌入摇杆模块,这本质上是对"操作连续性"的执着。   值得深思的是,本次开发过程中借助DeepSeek的代码生成与逻辑推理,其展现的能力已然颠覆传统编程范式,需求描述可自动…

C基础寒假练习(8)

一、终端输入10个学生成绩&#xff0c;使用冒泡排序对学生成绩从低到高排序 #include <stdio.h> int main(int argc, const char *argv[]) {int arr[10]; // 定义一个长度为10的整型数组&#xff0c;用于存储学生成绩int len sizeof(arr) / sizeof(arr[0]); // 计算数组…