没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
实时消息协议流的分块
实时消息协议---流的分块
版权声明:
版权() 系统有限公司。全权所有。
摘要:
本备忘录描述实时消息协议块流。块流是一种应用层协议,主要用于通过一种合适的
传输层协议(例如 )复用、打包多媒体数据流(音频,视频和交互数据)。
目录:
简介
术语
定义
字节序、对齐和时间格式
消息格式
握手
握手序列
和 格式
和 格式
和 格式
握手示意图
块
块格式
块基本头
块消息头
类型
类型
类型
类型
扩展时间格式
示例
示例
示例
协议控制消息
设置块的大小
关于消息
参考
规范参考
信息参考
确认(致谢)
实时消息协议流的分块
1. 简介
本文档规定实时消息协议块流(块流)。分块为更高层的多媒体流协议提供
复用和分组服务。
虽然 块流是为协同 协议工作而设计的,但是它任然可以处理任何发送
消息流的协议。每个消息包含时间戳和负载类型标志。 块流和 共同适用于
各种形式的音视频应用,从点到点和点到多的实时直播,到 服务,到交互式视频
会议。
当配合像!"这样的可靠传输协议使用时, 块流保证跨流的所有消息按时间
戳序列一个接一个地传输。 块流不提供优先级或类似的控制,但是可以通过更高
层的协议提供类似的服务。例如,视频直播服务可以基于每个消息的发送时间和答复
时间选择丢弃视频消息,使慢的客户端能及时接受到音频消息。
块流包含自己的带内协议控制消息,并且提供了让更高层的协议嵌入用户控
制消息的机制。
1.1 术语
本文档中的关键词”必须”、”一定不”、”要求”、”可以”、”不可以”、”应该”、”不应
该”、”建议”、”可能”和”可选”的解释参考文档!#"!$"。
2. 定义
负载:
分组中所包含的数据。例如音频样本和压缩视频数据。负载格式和解释不在本文
档的描述范围之内。
分组%
一个数据分组由固定的头和负载数据组成。一些底层协议可能需要定义分组的封
装。
端口%
在一个给定计算机中区分不同目标的抽象。在 & 协议中用一个小的整数来表
示端口。' 中的传输选择器等同于端口的概念。
传输地址%
用于表示一个传输层终端的网络地址和端口的组合。例如 地址和 端口。分组
从源地址传输到目标地址。
消息流%
允许消息流动的逻辑上的通讯通道。
消息流 (%
每个消息所关联的 (,用于区分其所在的消息流。
块%
一个消息片段。消息通常在被放到网络上传输之前被分成小的部分并且被交错存取。
分块确保跨流的所有消息按时间戳顺序被不断的传输。
块流%
允许块按照某一方向流动的逻辑上的通讯通道。块流可以从客户端流向服务端,也
可以从服务端流向客户端。
块流 (%
每个块所关联的用于区分其所在块流的 (。
实时消息协议流的分块
复用%
把分开的音视频数据整合到一个数据流,让多个音视频流可以同步地传输的过程。
解复用%
复用的反向过程。交互的音视频数据被收集成原始的音频数据和视频数据。
3. 字节序、对齐和时间格式
所有完整的字段都是按网络字节序被承载的,即,零字节是第一个字节,零位是一个
字或字段中最显著的位。这种字节序就是所谓的”)*)+,。这种传输顺序的详细描
述见!("。除非另行说明,本文档中的数字都是十进制数。
在没有特别说明的情况下 块流中的所有数据都是按字节对齐的。例如,一个
位字段可能在奇数字节偏移的位置。在标有延拓的地方,延拓字节应赋予零值。
块流中的时间戳是用整数表示的,以毫秒为单位的相对时间,相对于一个未规定
的起始时间。一般,每个块流的时间戳都从 开始,但是只要通讯的双方用统一的起
始时间,可以不使用这种方法。要注意的是,这样跨多个块流(特别是不同主机之
间)的同步需要用另外的机制来实现。
时间戳必须是单调递增的,并且是线性增长的。这样可以使应用程序处理同步,测量
带宽,注入检测和进行流控制。
因为时间戳只有 位长,所以只能在 天以内循环。但是,因为流是可以不断的运行
的,潜在地可以多年才结束?,所以 块流应用程序必须对减法和比较使用模运
算,并且能够处理这种回绕。只要通讯双方一致,任何合理的方法都可使用。例如,
一个应用程序可以假设,相邻的时间戳是 - 毫秒,那么 在 之后,
在 之前。
时间戳增量也是以毫秒为单位的无符号整数。时间戳增量可以是 位或 位长。
4. 消息格式(可以参考消息格式文档的第 4 节)
消息格式依赖于上层协议,可以被分成多个块以支持复用。但是消息格式必须包含下
面这些创建块所必须的字段。
时间戳:
消息时间戳,占 个字节。
长度:
消息负载的长度,如果消息头无法被消减的话,应该包含在长度里,这个字段在
块头中占 个字节。
类型 (:
一些类型 ( 是为消息控制协议保留的。这些 ( 繁衍供 块流协议和高层协议使用
的信息。所有其他的 ( 都用于更高层协议。 块流协议对这些 ( 做不透明处理。
事实上, 块流协议不需要用本字段的值来区分类型;所有消息可以是同类型的 ,
或者应用可以使用本字段来区分同步轨道而不是区分类型。本字段占一个字节。
消息流 (:
消息流 ( 可以是任何的值。被复用到相同的块流的消息流依靠其消息 ( 来解复用。除
此之外,对于 块流协议来说,这个值是不透明的。这个值在块头中占 个字节,
并且使用小字节序。
5.握手
一个 连接以握手开始。这里的握手和其他协议的握手不一样。这里的握手由三个
固定大小的块组成,而不是可变大小的块加上头。
客户端(发起连接的一方)和服务端各自发送三个相同的块。这些块如果是客户端发
送的话记为 , 和 ,如果是服务端发送的话记为 , 和 。
实时消息协议流的分块
5.1 握手队列
握手开始于客户端发送 , 块。
在发送 之前客户端必须等待接收 。
在发送任何数据之前客户端必须等待接收 。
服务端在发送 和 之前必须等待接收 ,也可以等待接收 。
服务端在发送 之前必须等待接收 。
服务端在发送任何数据之前必须等待接收 。
5.2 C0 和 S0 消息格式
和 是单独的一个字节 。
下面是 和 包的字段说明。
版本: 位
在 中这个字段表示客户端要求的 版本 。在 中这个字段表示服务器
选择的 版本。本规范所定义的版本是 ; 是早期产品所用的,已被丢弃;
保留在未来使用 ; 不允许使用 (为了区分其他以某一字符开始的文本
协议)。如果服务无法识别客户端请求的版本,应该返回 。客户端可以选择减到
版本 或选择取消握手。
5.3 C1 和 S1 消息格式
和 消息有 字节长,由下列字段组成。
时间: 字节
本字段包含时间戳。该时间戳应该是发送这个数据块的端点的后续块的时间起始点。
可以是 ,或其他的任何值。为了同步多个流,端点可能发送其块流的当前值。
零: 字节
本字段必须是全零。
随机数据: 字节。
本字段可以包含任何值。因为每个端点必须用自己初始化的握手和对端初始化的
握手来区分身份,所以这个数据应有充分的随机性。但是并不需要加密安全的随机值,
或者动态值。
实时消息协议流的分块
5.4 C2 和 S2 消息格式
和 消息有 字节长。只是 和 的回复。本消息由下列字段组成。
时间: 字节
本字段必须包含对等段发送的时间(对 来说是 ,对 来说是 )。
时间 : 字节
本字段必须包含先前发送的并被对端读取的包的时间戳。
随机回复: 字节
本字段必须包含对端发送的随机数据字段(对 来说是 ,对 来说是 )。
每个对等端可以用时间和时间 字段中的时间戳来快速地估计带宽和延迟。但这样做
可能并不实用。
5.5 握手示意图
$)*./)/)+01/+234+5+6
下表描述握手中的状态机。
剩余32页未读,继续阅读
雷霄骅
- 粉丝: 4w+
- 资源: 141
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- springboot-mavenBaseDemo 内容包含:springboot的maven基础状态,1.8JDK可以直接运行
- otis rsl远程串行接口协议标准.pdf
- buildx构建镜像时所需的镜像文件
- F103-霸道开发板2.8寸电阻触摸屏例程.rar
- Google(高德)地图瓦片python代码下载
- Python实现输出杨辉三角形
- polsarpro官方教程、操作说明 PolSARpro v5.0 Software Training Course
- STM32 TouchGFX的使用二图片显示
- buildx镜像文件,也可以通过网上其他方式获取
- 【中级软件设计师】上午题12-软件工程(2):单元测试、黑盒测试、白盒测试、软件运行与维护
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页