rtp协议分析

2023-11-13

感谢原作者:http://blog.csdn.net/rootusers/article/details/41864387

网络模型:

网络通信分为7层(OSI),是一个理论模型,由高到低分别是:

应用层:文件传输,电邮,文件服务等。HTTP,Telnet,DNS, FTP等协议

表示层:数据格式化,代码转换,数据加密等

会话层:解除或建立与别的接点的联系

传输层:提供端到端的接口   TCP UDP  RTP

网络层:为数据包选择路由    IP ICMP RIP

数据链路层:传输有地址的帧以及错误检测功能     

物理层:以二进制数据形式在物理媒体上传输数据 


TCP/IP五层模型:应用层,传输层,网络层,数据链路层,物理层。


TCP/IP与低层次的数据链路层和物理层无关,这是其重要特点。


流媒体:

在Internet上传输音频和视频有两种方式:下载和流式传输。下载就是将文件下载到本地,才能播放,这是有延迟的,不能实现直播。流式传输是实现流媒体的关键,使用流式传输可以边下载边观看视频。由于Internet是基于分组传输的,所以客户端接收到的数据包会有延迟和乱序。为了降低延迟,在发送端往往采用降低质量或者高效压缩的方式进行处理,在接收端为了恢复时序,往往采用接收缓冲。

接收缓冲的意思就是先将接收到的数据缓存起来,然后根据数据包的封装信息,如包序号或者时间戳等,将乱序的包重新排序,然后将重新排序的包放入播放缓存进行播放。


RTP:全名实时传输协议(Real-time Transport protocol),顾名思义就是用来进行流媒体传输的,因而可以看成传输层的一个子层。

一个典型的协议体系结构如图一:


RTP建立在UDP之上,应用层之下,RTP用来为端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP保证。

RTP与其他协议的关系:


应用层的一部分:

但是也有人讲RTP看做应用层的协议,这是站在了开发者的角度。TCP/IP提供的是我们最常用的服务,但是RTP需要应用者自己去开发,从开发者的角度讲,

RTP的实现和应用层的协议的实现没不同,所以可以将RTP看成是应用层的协议。


RTP的封装:

一个协议的封装满足协议的功能的需求,RTP的封装如图所示:



版本号(V):2比特,用来标志使用RTP版本。

填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含填充的附加字节。

扩展位(X):1比特,如果该位置位,则该RTP包的固定头部后面就跟着一个扩展头部。

CSRC技术器(CC):4比特,含有固定头部后面跟着的CSRC的数据

标记位(M):1比特,该位的解释由配置文档来承担。

载荷类型(PT):7比特,标识了RTP载荷的类型。

序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增加1,可以由该域检测包的丢失及恢复包的序列。序列号的初始值是随机的。

时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化为一个初始值。即使

在没有信号发送时,时间戳的值也要随时间的不断的增加而增加。时间戳是去除抖动和实现同步不可缺少的。

同步源标识符(SSRC):32比特,同步源就是RTP包源的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是

随机获取的RFC1889推荐了MD5随机算法

贡献源列表(CSRC List):0-15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。


RTCP的封装:

RTP需要RTCP为其服务提供保证。

RTCP的主要功能是:服务质量的监视与反馈,媒体间的同步,以及多播组中成员的标志。在RTP会话期间,各参与者周期性的发送

RTCP包。RTCP包中含有以发送的数据包的数量、丢失的数据包的数量等统计信息,因此各参与者可以根据这些信息动态的

改变传输速率,甚至可以改变有效载荷类型。

RTCP也是用UDP来传输的。但是RTCP封装的仅是一些控制信息,因而分组很短,所以可以将多个RTCP包分组封装在

一个UDP包中。RTCP中有如下5组分组



以上5组封装大同小异。比如:SR

发送端报告分组SR用来使发送端以多播方式向所有接收端报告发送情况。SR分组的主要内容有:

相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。

SR包的封装如下。

版本(V):同RTP包头域。

填充(P):同RTP包头域。

接收报告计数器(RC):5比特,该SR包中的接收报告块的数目,可以为零。

包类型(PT):8比特,SR包是200

长度域(Length):16比特,其中存放的是该SR包以32比特为单位的总长度减一。

同步源(SSRC):SR包发送者的同步源标识符。与对应RTP包中的SSRC一样。

NTP TimestampNetwork time protocolSR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。

RTP Timestamp:与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。

Senders packet count:从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。

Sender`s octet count:从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。

同步源nSSRC标识符:该报告块中包含的是从该源接收到的包的统计信息。

丢失率(Fraction Lost):表明从上一个SRRR包发出以来从同步源n(SSRC_n)来的RTP数据包的丢失率。

累计的包丢失数目:从开始接收到SSRC_n的包到发送SR,SSRC_n传过来的RTP数据包的丢失总数。

收到的扩展最大序列号:从SSRC_n收到的RTP数据包中最大的序列号。

接收抖动(Interarrival jitter):RTP数据包接受时间的统计方差估。

上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。

上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。

RTP会话的建立:

当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口号组成,有两个端口,一个给RTP包,一个给

RTCP包,使得RTP/RTCP能正确的发送。RTP数据发向对应的UD端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1)。这样构成一个UDP端口对。

RTP的发送过程如下,接收过程相反:

1>RTP协议从上层接收流媒体信息码流(如H.263),封装成RTP数据包;RTCP从上层接收控制信息,封装成RTCP包。

2>RTP将RTP数据包发往UDP端口对中偶数端口,RTCP将RTCP包发往UDP端口的接收端口。


RTP的基础知识差不多就这么多,如果想深入研究RTP协议,推荐一个开源项目:jrtplib




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rtp协议分析 的相关文章

  • RTP分析

    参考 RTP xff08 A Transport Protocol for Real Time Applications 实时传输协议 xff0c rfc3550 xff09 RTP Payload Format for H 264 Vid
  • rtp载荷H264解包过程分析,ffmpeg解码qt展示

    网络抽象层单元 NALU NALU头 NALU 头 由1个byte组成 它的语法如下 43 43 0 1 2 3 4 5 6 7 43 43 43 43 43 43 43 43 43 F NRI Type 43 43 F 1 个比特 for
  • android udp rtp播放器,在Android上显示实时UDP或RTP流(多播)

    我几周以来一直是 Android开发的新手 我需要编写一个可以向用户显示UDP或RDP多播的实时流的应用程序 该流位于诸如 rtp xff1a 230 0 0 11 xff1a 1234 的地址 由于此模块 WIFI将发出该流 xff1a
  • H264码流RTP封装方式详解

    H264码流RTP封装方式详解 文章目录 H264码流RTP封装方式详解 1 H264基本概念 2 NALU Header介绍 3 RTP封装H264码流 3 1 单一NALU模式 3 2 组合帧封装模式 3 3 分片封装模式 4 代码解析
  • H.264 视频的 RTP 载荷格式

    本文是 IETF 的规范 RFC 6184 的一部分的翻译 该规范 地址 翻译这份文档 主要是为了编写一段用 RTP 传输 H 264 流的代码 本想在网上找一些文章完成任务了事的 但由于个人之前音视频编解码相关的知识比较匮乏 网上找的文章
  • wireshark分析tcp,rtp

    要添加过滤器 也很简单 首先要搞清楚 要过滤的条件在那一层协议 比如ip地址 那他就是在ip层 所以 ip 就会有提示 ip addr ip dst ip src 注意不要在ip dst port上纠结了 ip层哪里有端口 端口应该是在tc
  • adb命令——基础系统类命令 ——adb shell input命令01

    adb做为android的调试桥 在做app自动化中有着巨大的用处 可以帮助我们解决问题 今天主要认识adb shell input adb shell input 我们首先通过cmd输入adb shell input有哪些内容 adb s
  • 使用 FFMPEG 从 IP 摄像机读取 RTCP 数据包

    我正在使用 ffmpeg C 库 我需要拦截来自摄像头的 RTCP 数据包 以便从发送者报告中获取时间戳 ffmpeg 中是否有任何方法或结构可以为我提供此信息 我完全陷入困境 但我无法解决这个问题 任何帮助将不胜感激 提前致谢 最后我不得
  • 使用 Scapy 解码基于 UDP 的 RTP

    如何使用 Scapy 2 3 2 解码 和操作 基于 UDP 的 RTP 我有一个名为 rtp pcap 的捕获文件 其中包含到 224 0 1 11 5016 的 RTP 音频流 当您启用 RTP over UDP 协议时 默认关闭 Wi
  • Kurento Media WebRTC 转 RTP

    我正在使用 kurento 的主 git 来制作 WebRTC 到 RTP 的桥接器 MediaPipeline pipeline kurento createMediaPipeline WebRtcEndpoint webRtcEndpo
  • 在 libav 中读取 dumepd RTP 流

    嗨 我需要一些帮助 指导 因为我陷入了我的研究之中 问题 如何在 API 通过编程 或控制台版本中使用 gstreamer 或 avlib ffmpeg 转换 RTP 数据 Data 我有来自 TCP 上的 RTP RTCP 的 RTP 转
  • 从 QuickTime MOV 文件解析 h.264 NAL 单元

    我正在尝试从 iPhone 上的 MOV 文件获取 h 264 NAL 单位 以便将 RTP h 264 视频从 iPhone 摄像头传输到服务器 Apple 的 API 不允许直接访问来自相机输出的编码比特流 因此我只能在写入 MOV 文
  • 如何计算音频流中每个数据包的 RTP 时间戳

    我阅读了 RTP 规范 但似乎无法理解 RTP 数据包时间戳 我尝试在我的服务器中以不同的方式实现它 但我无法让玩家正确播放它 我在这里的 错误 行为是 我使用 VLC 播放器播放 RTSP url 到我的服务器 我发现玩家的日志说 缓冲太
  • 如何将 pcap 文件流式传输到 RTP/RTCP 流?

    我已经捕获了三个不同的流作为带有元数据的 pcap 文件 如何流回 RTP RTCP 流 如果我理解正确的话 你有 pcap 但你想从他们那里得到 RTP 吗 Wireshark 用户界面 您可以使用 Wireshark 的 UI 通过菜单
  • ffmpeg创建RTP流

    我正在尝试使用 ffmpeg 进行编码和流式传输 libavcodec libavformat MSVC x64 with Zeranoe builds 这是我的代码 很大程度上改编自编码示例 删除了错误处理 include stdafx
  • Websocket 连接失败并显示星号 11

    我正在尝试将 websocket 配置为与 asterisk 11 一起使用 但是存在一些问题 我遵循的步骤是 在 http conf 中启用以下内容 enabled yes bindaddr 0 0 0 0 bindport 8088 我
  • C# - 捕获 RTP 流并发送到语音识别

    我正在努力实现的目标 在 C 中捕获 RTP 流 将该流转发到 System Speech SpeechRecognitionEngine 我正在创建一个基于 Linux 的机器人 它将接受麦克风输入 将其发送给 Windows 机器 Wi
  • 如何使用Java将h.264直播流编码为RTP数据包

    我正在为 Android 操作系统开发一个应用程序 我需要来自摄像机的实时解码视频流 该视频流使用 h 264 编解码器进行编码 将帧数据转换为 RTP 数据包并将数据包发送到服务器 首先 可以尝试在 PC 上实现从 HDD 中预先录制的视
  • 在 Ubuntu 中使用 Gstreamer 通过 RTP 协议流式传输 Mp4 视频

    我正在尝试从本地目录获取视频文件 启用来自服务器的流并从客户端捕获这些帧 我使用了以下管道 服务器端 gst launch v filesrc location home gokul Videos Econ TestVideo radioa
  • 使用webrtc时可以关闭SRTP吗

    现在我测试webrtc与SIP客户端 sx20 的通信 我使用 webrtc sdp 发送邀请消息 但 sip 客户端答案没有指纹 并且 sip 客户端的答案不是 SRTP 只是 RTP 所以我需要关闭WEBRTC中的SRTP 我可以做吗

随机推荐

  • 简单sql注入

    报错注入找列数 确定为16 联合查询找回显点 查询数据库和数据库版本 版本为5 0以上 需要对查询的内容加密否则报错 结果不是需要的 查询所有的表 获得表名cms users 获得字段usename password 得到账号密码
  • 用java代码验证char类型数据占几个字节

    char为字符型数据 储存单个字符 但阿拉伯数字 英文字母 标点符号等皆为字符型数据 占用字节看似错综复杂 但是char也为脱离计算机基本 二进制储存机制 char本质上内存中皆存储字符编码 1 127为ASCII码 也就是常用的字符 但在
  • 关于iOS9中的App Transport Security(ATS)相关说明及适配

    iOS9中新增App Transport Security 简称ATS 特性 主要使到原来请求的时候用到的HTTP 都转向TLS1 2协议进行传输 这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输 原文如下 App Trans
  • VS2010:error C2061: 语法错误

    实例 类名 类中包含的头文件 point iostream line point flat flat line 输出错误 error C2061 语法错误 标识符 flat 解决办法 前置声明 line h class flat
  • 区块链读书笔记04 - 以太坊

    区块链读书笔记04 以太坊 以太坊 Ethereum 以太坊关键概念 账户 Account 交易 Transaction 消息 Messsage Gas 合约 contract 以太坊虚拟机 EVM DApp 去中心化应用 以太坊架构 以太
  • 网站域名服务器加密,网站域名利用https防劫持方法

    原标题 网站域名利用https防劫持方法 公共 DNS HttpDNS 的部署成本过高 并且具有一定的技术门槛 在面对无孔不入的 DNS 劫持时有时候其实有点力不从心 那么如何简单有效低成本的加强域名防劫持呢 只需要给网站开启 HTTPS
  • mysql jdbc 多数据源_springboot多数据源(oracle、mysql)

    1 application properties配置 server port 8085 server tomcat uri encoding utf 8 MySQL spring datasource primary driver clas
  • java基于BufferedImage进行图片数字识别预处理

    参考文章链接 1 https blog csdn net kobesdu article details 8142068 2 https blog csdn net fjssharpsword article details 5265184
  • 从此刻开始走进HTML的大门!!!

    文章目录 什么是HTML呢 HTML的结构又是怎么样的呢 学习HTML的标签 标题标签 段落标签 文本格式化标签 换行标签 字符实体 容器标签 图片标签 超链接标签 列表标签 什么是HTML呢 HTML 英文全称是 Hyper Text M
  • kmeans算法和kmeans++

    kmeans算法及其优化改进 kmeans聚类算法 算法原理 kmeans的算法原理其实很简单 我用一个最简单的二维散点图来做解释 如上图 我们直观的看到该图可聚成两个分类 我们分别用红点和蓝点表示 下面我们模拟一下Kmeans是怎么对原始
  • 桌面研究-数据源

    文章目录 1 各国每年人口统计表 2 各国年龄结构表 3 国家简介 4 城镇化率 5 美国房屋统计数据 6 各国教育水平 7 住房类型 8 家庭结构 家庭人数 9 恩格尔系数 10 IMF 人均GDP PPP人均GDP 1 各国每年人口统计
  • 自动化测试需要学什么?二十八岁功能想转自动化现实吗?

    先回答一下后面那个问答 二十八岁还能从功能转自动化吗 很多接触软件测试都是从功能测试开始的 但是功能测试的薪资会比自动化少很多 所以就想要要学习自动化 从功能测试转到做自动化 其实这是完全来的及的 花上几个月时间学习自动化测试 造福以后 这
  • 智能化里面计算机网络设计思路,浅谈云机房网络的建设和维护及思路分析

    徐振宇 张欣 摘要 现代机房网络管理过程中 云技术的应用效果非常的显著 该文先对机房中的云技术应用实践中进行分析 并在此基础上就云机房网络的建设及其维护和设计思路 谈一下个人的观点和认识 以供参考 关键词 机房 云技术 网络建设 维护 设计
  • Blob 文件下载对应的常见 MIME 类型列表

    Blob 对象表示一个不可变 原始数据的类文件对象 它的数据可以按文本或二进制的格式进行读取 也可以转换成 ReadableStream 来用于数据操作 在 JS 中通常使用 Blob 进行文件下载保存 new 转换过程中需要指定下载文件
  • BurpSuite Proxy 给代理设置上层代理

    1 简单描述 正常情况而言 使用BurpSuite时数据包的经过流程为 浏览器 BurpSuite Repeater Intruder gt BurpSuite Proxy gt 目标服务器 这个时候其实还是本机发出的流量 我们想让流量由其
  • vue环境变量配置——process.env(详细)

    目录 一 背景 二 配置环境的实现原理 三 使用步骤 3 1安装依赖 3 2创建 env dev 和 env prod两个文件 3 3设置项目启动时默认的环境 3 4查看环境是否配置成功 一 背景 在用vue框架时 经常用到两种环境 一种是
  • 智能指针auto_ptr

    智能指针 auto ptr 这个名字听起来很酷是不是 其实auto ptr 只是C 标准库提供的一个类模板 它与传统的new delete控制内存相比有一定优势 但也有其局限 本文总结的8个问题足以涵盖auto ptr的大部分内容 1 au
  • DVWA-Brute Force

    Brute force 暴力破解 是一种试图通过尝试所有可能的组合 通常是密码 来获取敏感信息或破解加密的技术或方法 这种攻击方法通常被用来破解密码 对系统进行入侵或访问受限资源 暴力破解攻击的原理是通过迭代尝试各种可能的组合 例如密码字典
  • 2023前端面试题------JS 面试题(1)

    2023前端面试题 JS面试题 三 JS高频面试题 1 介绍JS有哪些内置对象 2 如何最小化重绘 repaint 和回流 reflow 3 Javascript作用域链 4 数据请求 5 跨域和同源策略 6 面向对象 7 闭包 8 数组去
  • rtp协议分析

    感谢原作者 http blog csdn net rootusers article details 41864387 网络模型 网络通信分为7层 OSI 是一个理论模型 由高到低分别是 应用层 文件传输 电邮 文件服务等 HTTP Tel