RTSP服务器测试文档

合集下载

RTSP协议培训文档

RTSP协议培训文档

价值观:客户第一 | 阳光沟通 | 团队协作 | 拥抱变化 | 学习成长
心跳检测 :
在STB与VS已经建立了会话的过程中,可能 会出现STB及VS掉电或重启等异常情况,为了能 检测这些异常,STB采用定期向VS发送 GET_PARAMETER 命令的方式形象的称之为心跳检测。下面的消息 定义用于处理异常,即进行心跳检测.
心跳检测描述: 心跳检测
GET_PARAMETER rtsp://ip:port/5^63^0^600?&startTime=20060820181000 &endTime=20060820183000 &areaCode=111&resgroupId=10&userId=xxx&viewUrl=x xx&sessionId=xxx&sessionSign =xxx&userSign =xxx RTSP/1.0\r\n CSeq: 9\r\n Session: 12345678\r\n \r\n
行为准则:尊重·简单·重用·检查·并行·勇气·反馈·认真·责任
价值观:客户第一 | 阳光沟通 | 团队协作 | 拥抱变化 | 学习成长
DESCRIBE状态 返回STB的信息 DESCRIBE状态VS返回STB的信息 状态VS
(CC)VS -> STB: ) :
RTSP/1.0 200 OK\r\n AspectRatio="0“StartTime="20330.839089" Duration="735.862967" ParentDuration="735.862967"
SETUP响应 发送PLAY请求
PLAY响应

openRTSP测试范例

openRTSP测试范例

openRTSP执行流程如下:E:\live\testProgs>openRTSP rtsp://192.168.1.103/slamtv60.264(1)创建TaskScheduler和BasicUsageEnvironment类(2)命令行解析,获取流媒体地址和其他选项Opening connection to 192.168.1.103, port 554......remote connection opened(3)创建RTSPClient对象(4)RTSPClient对象发送OPTIONS命令,并解析服务端响应,获取可以使用命令集Sending request: OPTIONS rtsp://192.168.1.103/slamtv60.264 RTSP/1.0CSeq: 2User-Agent: openRTSP (LIVE555 Streaming Media v2012.05.17)------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Received 152 new bytes of response data.Received a complete OPTIONS response:RTSP/1.0 200 OKCSeq: 2Date: Tue, Jun 05 2012 06:00:17 GMTPublic: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------(5)RTSPClient对象发送DESCRIBE命令,并从服务端反馈中获取流媒体相关描述SDP字串Sending request: DESCRIBE rtsp://192.168.1.103/slamtv60.264 RTSP/1.0CSeq: 3User-Agent: openRTSP (LIVE555 Streaming Media v2012.05.17)Accept: application/sdp---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Received 692 new bytes of response data.Received a complete DESCRIBE response:RTSP/1.0 200 OKCSeq: 3Date: Tue, Jun 05 2012 06:00:17 GMTContent-Base: rtsp://192.168.1.103/slamtv60.264/Content-Type: application/sdpContent-Length: 525---------------------------------------------------------------------------------------------------以下为SDP字串描述v=0o=- 1338876016229935 1 IN IP4 192.168.1.103s=H.264 Video, streamed by the LIVE555 Media Serveri=slamtv60.264t=0 0a=tool:LIVE555 Streaming Media v2012.05.17a=type:broadcasta=control:*a=range:npt=0-a=x-qt-text-nam:H.264 Video, streamed by the LIVE555 Media Servera=x-qt-text-inf:slamtv60.264m=video 0 RTP/AVP 96c=IN IP4 0.0.0.0b=AS:500a=rtpmap:96 H264/90000a=fmtp:96packetization-mode=1;profile-level-id=4D4033;sprop-parameter-sets=Z01AM5JUDAS0IAAAAwBAAAAM0eMGVA==,aO48gA==a=control:track1--------------------------------------------------------------------------------------------------------- Opened URL "rtsp://192.168.1.103/slamtv60.264", returning a SDP description:v=0o=- 1338876016229935 1 IN IP4 192.168.1.103s=H.264 Video, streamed by the LIVE555 Media Serveri=slamtv60.264t=0 0a=tool:LIVE555 Streaming Media v2012.05.17a=type:broadcasta=control:*a=range:npt=0-a=x-qt-text-nam:H.264 Video, streamed by the LIVE555 Media Servera=x-qt-text-inf:slamtv60.264m=video 0 RTP/AVP 96c=IN IP4 0.0.0.0b=AS:500a=rtpmap:96 H264/90000a=fmtp:96packetization-mode=1;profile-level-id=4D4033;sprop-parameter-sets=Z01AM5JUDAS0IAAAAwBAAAAM0eMGVA==,aO48gA==a=control:track1------------------------------------------------------------------------------------------------(6)创建MediaSession对象(根据SDPDescription在MediaSession中创建和初始化MediaSubSession子会话对象),一个MediaSession包含多个子会话(MediaSunSession),完成rtp和rtcp通信使用的GroupSock对象的创建,包括协议和端口的选择。

实时流协议rtsp样本

实时流协议rtsp样本

实时流协议rtsp样本实时流协议rtsp1.实时流协议RTSP RTSP[3]协议以客户服务器方式工作,它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制,如::暂停//继续、后退、前进等。

因此RTSP又称为“因特网录像机遥控协议”。

..P RTSP协议简介要实现RTSP的控制功能,不仅要有协议,而且要有专门的媒体播放器(media player)和媒体服务器(media server)。

媒体服务器与媒体播放器的关系是服务器与客户的关系。

媒体服务器与普通的万维网服务器的最大区别就是媒体服务器支持流式音频和视频的传送,因而在客户端的媒体播放器能够边下载边播放(需要先缓存一小段时间的节目)。

但从普通万维网服务器下载多媒体节目时,是先将整个文件下载完毕,然后再进行播放。

本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。

文档如有不当之处,请联系本人或网站删除。

图图P1RTSP与与P RTP和和P RTCP的关系RTSP仅仅是使媒体播放器能控制多媒体流的传送。

因此,RTSP又称为带外协议,而多媒体流是使用RTP在带内传送的。

..P RTSP的报文结构P RTSP有两类报文::请求报文和响应报文。

请求报文是指从客户向服务器发送请求报文,响应报文是指从服务器到客户的回答。

由于RTSP是面向正文的(text--oriented),因此在报文中的每一个字段都是一些ASCII码串,因而每个字段的长度都是不确定的。

P RTSP报文由三部分组成,即开始行、首部行和实体主体。

在请求报文中,开始行就是请求行,P RTSP请求报文的结构如图22所示。

本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。

文档如有不当之处,请联系本人或网站删除。

图图P2RTSP请求报文的结构P RTSP请求报文的方法包括:OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、RGET_PARAMETER和和SET_PARAMETER。

RFC2326(中文版)-实时流协议(RTSP)

RFC2326(中文版)-实时流协议(RTSP)

RFC2326(中文版)-实时流协议(RTSP).txt我的人生有A 面也有B面,你的人生有S面也有B 面。

失败不可怕,关键看是不是成功他妈。

现在的大学生太没素质了!过来拷毛片,居然用剪切!有空学风水去,死后占个好墓也算弥补了生前买不起好房的遗憾。

实时流协议(RTSP) ( Real Time Streaming Protocol (RTSP) )备忘录的状态:本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和建议以得到改进。

请参考最新版的“Internet正式协议标准”(STD1)来获得本协议的标准化程度和状态。

本备忘录的发布不受任何限制。

版权声明:版权为The Internet Society 所有。

所有权利保留。

摘要:实时流协议(RTSP)是应用层协议,控制实时数据的传送。

RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控、点播成为可能。

数据源包括现场数据与存储在剪辑中数据。

该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP(RFC1889)上传送机制提供方法。

目录:1 绪论 51.1 目的 51.2 要求 61.3 术语 61.4 协议特点 71.5 RTSP扩展 81.6 操作模式 91.7 RTSP状态 91.8 与其他协议关系 102 符号协定 103 协议参数 103.1 RTSP版本 103.2 RTSP URL 113.3 会议标识 133.4 会话标识 133.5 SMPTE 相对时间戳 133.6正常播放时间 143.7 绝对时间 153.8 选择标签 153.8.1 用IANA注册新的选择标签 154 RTSP消息 154.1 消息类型 164.2 消息标题 174.3 消息主体 174.4 消息长度 185 普通标题域 186 请求 196.1 请求队列 196.2 请求标题域 197 回应 207.1 状态行 207.1.1 状态代码和原因分析 207.1.2 回应标题域 238 实体 238.1 实体标题域 248.2 实体主体 249 连接 259.1 流水线操作 259.2 可靠性及确认 2510 方法定义 2510.1 选择 2610.2 描述 2610.3 通告 2610.4 建立 2610.5 播放 2710.6 暂停 2710.7 断开 2710.8 获取参数 2810.9 设置参数 2810.10 重定向 2810.11 录制 2910.12 嵌入二进制数据 2911状态代码定义(Status Code Definitions) 29 11.1成功2xx(Success 2xx) 3011.1.1 存储空间低 250 3011.2 重定向(Redirection 3xx) 3111.3 客户端错误(Client Error )4xx 3111.3.1方法不允许 3211.3.2参数不能理解 3211.3.3会议未找到 3311.3.4 带宽不足 3311.3.5 会话未找到 3411.3.6 本状态下该方法无效 3411.3.7 标题域对资源无效 3411.3.8 无效范围 3511.3.9 参数只读 3511.3.10 不允许合操作 3611.3.11 只允许合操作 3611.3.12 不支持的传输 3611.3.13 目标不可达 3711.3.14 选择不支持 3712 标题域定义(Header Field Definitions) 38 12.1 接受 3812.2 接受编码 3812.3 接受语言 3912.4 允许(Allow) 3912.5 授权(Authorization) 4012.6 带宽 4012.7 块大小 4012.8 缓存控制 4112.9 会议 4112.10 连接 4112.11 基本内容 4212.12 内容编码(Content-Encoding) 4212.13 内容语言 4312.14 内容长度(Content-Length) 4312.15 内容位置 4312.16 内容类型(Content-Type) 4412.17 序列号 4412.18 日期(Date) 4412.19 过期(Expires) 4512.20 来自(From) 4512.21 主机 4512.22 如果匹配 4512.23 从何时更改(If-Modified-Since) 46 12.24 最近更改(Last-Modified) 4612.25 位置(Location) 4612.26 代理授权 4712.27 代理要求 4712.28 公用性 4712.29 范围 4912.30 提交方(Referer) 4912.31 稍后再试 4912.32 要求 4912.33 RTP信息 4912.34 比例 4912.35 速度 4912.36 服务器(Server) 4912.37 会话 4912.38 时间戳 4912.39 传输 4912.40 不支持 4912.41 用户代理(User-Agent) 4912.42 变化 4912.43 通过 4912.44 WWW-授权(WWW-Authenticate) 5013 缓存 5014 实例 5014.1 要求媒体(单播) 5014.2 容器文件的流 5114.3 单个流容器文件 5114.4 组播现场媒体表示 5114.5 在存在的会话中播放媒体 5114.6 录制 5215 语法 5215.1 基本语法 5216 安全考虑(Security Considerations) 52 附录A RTSP协议状态机 53A.1 客户端状态机 53A.2 服务器端状态机 53附录B 同RTP协议的交互 53附录C 使用SDP进行RTSP会话描述 54C.1 定义 54C.1.1 控制URL 55C.1.2 媒体流 55C.1.3 有效载荷类型 55C.1.4 详细格式参数 55C.1.5 表示的范围 56C.1.6 有效时间 56C.1.7 连接信息 56C.1.8 实体标签 57C.2 合控制不可用 57C.3 合控制可用 57附录D 最简单的RTSP实现 58D.1 客户端 58D.1.1回放 58D.1.2 授权 58D.2 服务器 59D.2.1回放 59D.2.2授权 59附录E 作者地址 60附录F 致谢 60参考书目 60版权申明 611 绪论1.1 目的实时流协议(RTSP)建立并控制一个或几个时间同步的连续流媒体。

《RTSP协议介绍》课件

《RTSP协议介绍》课件

要点二
DASH(Dynamic Adaptive Strea…
DASH是一种基于HTTP的流媒体传输协议,用于在网络中 传输实时音视频流。与HLS类似,DASH也通过将音视频 流分割成多个小的HTTP流,实现了对音视频流的动态调整 和流媒体的分发。DASH和HLS都是为了解决音视频流的 动态调整和分发问题而提出的解决方案,而RTSP则更侧重 于对音视频流的远程控制和管理。
Part
06
RTSP协议安全性
RTSP协议的安全性挑战
未加密的通信
RTSP协议默认使用明文传输,容易受到中间人 攻击和窃听。
身份验证和授权不足
RTSP协议缺乏强有力的身份验证和授权机制, 容易遭受非法访问和恶意攻击。
缺乏数据完整性和加密
RTSP协议缺乏数据完整性和加密机制,无法保证数据传输的安全性。
RTSP响应
状态码
RTSP协议使用状态码来标识请求的处理 结果,例如200表示成功,404表示未找 到媒体资源等。
VS
描述信息
服务器在响应中返回相关的描述信息,例 如SDP描述、会话标识等。
SDP协议
• SDP协议:会话描述协议(SDP)用于描述多媒体会话的邀请信息和属性,如媒体类型、编解码器、传输协议等。 RTSP协议通过SDP协议来描述和协商媒体会话的参数。
会话控制
RTSP协议支持会话控制,客户端和服务器之间通过交换会话元数据来建立和管理会话。会话元数据包括 会话标识符、参与者和媒体属性等。
播放媒体流
01
02
03
播放
记录
选择
客户端在获取媒体流描述信息后,可 以通过RTSP协议的播放命令开始播放 媒体流。客户端可以控制播放过程, 如暂停、快进、快退等。

RTSP流媒体服务器压力并发

RTSP流媒体服务器压力并发
2、这个步骤其实很深,要根据实际客户需求、系统运行方式仔细考虑策略。Load runner中给出的场景配置不同于Silk Performer,可能Load runner更适合有较深经验的性能测试人员。而Silk Performer却有很多的向导,有很多的配置项目可调谐。施压策略是很重要的东东,不要以为用Load runner的controller随便把场景一设置,咱就等着看结果了。可能更多时候,需要不断的改变Load runner的施压策略,执行更多的测试方案,才能把测试做的彻底、有效去啊啊。
注意要点
1、录制脚本时尽量将整个业务合理的拆分为若干步骤
2、仔细去设置“运行时设置”,通过比较每种设置导致的测试结果的不同,一次只改变一个参数或设置,否则测试没有可比性。
2.3.
操作内容
配置场景,定制施压策略
解释说明
直接把我认为最好的施压策略教程copy到这里好了,因为实在太经典了。
注意要点
1、并发数不要一下就50,100,应该慢慢增大。同一个功能点,测试的方案却多,得到的“并发VS响应时间曲线”越准。
3.运行时设置:一些施展、控制压力的策略
step,开始新迭代的策略。如下图,
think time,模拟用户思考时间。如下图
网速模拟,模拟带宽。如下图
多线程,下面有解释。如下图
7.8中文版自带帮助:Controller将使用驱动程序(例如mdrv.exe、r3vuser.exe)运行Vuser。如果按进程运行每个Vuser,则对于每个Vuser实例,都将反复启动同一驱动程序并将其加载到内存中。将同一驱动程序加载到内存中会占用大量RAM(随机存取存储器)及其他系统资源。这就限制了可以在任一负载生成器上运行的Vuser的数量。或者,如果按线程运行每个Vuser,Controller为每50个Vuser(默认情况下)仅启动驱动程序(如mdrv.exe)的一个实例。该驱动进程/程序将启动几个Vuser,每个Vuser都按线程运行。这些线程Vuser将共享父驱动进程的内存段。这就消除了多次重新加载驱动程序/进程的需要,节省了大量内存空间,从而可以在一个负载生成器上运行更多的Vuser。按进程运行VUSER难道没有意义?还得多请教一下大家。

RFC2326(中文版)

RFC2326(中文版)
D.2.2授权 59
附录E 作者地址 60
附录F 致谢 60
参考书目 60
版权申明 61
1 绪论
1.1 目的
实时流协议(RTSP)建立并控制一个或几个时间同步的连续流媒体。尽管连续媒体流与控制流有可能交叉,但RTSP本身通常并不发送连续媒体流。换言之,RTSP充当多媒体服务器的网络远程控制。
12.24 最近更改(Last-Modified) 46
12.25 位置(Location) 46
12.26 代理授权 47
12.27 代理要求 47
12.28 公用性 47
12.29 范围 49
12.30 提交方(Referer) 49
15.1 基本语法 52
16 安全考虑(Security Considerations) 52
附录A RTSP协议状态机 53
A.1 客户端状态机 53
A.2 服务器端状态机 53
附录B 同RTP协议的交互 53
附录C 使用SDP进行RTSP会话描述 54
本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和建议以得到改进。请参考最新版的“Internet正式协议标准”(STD1)来获得本协议的标准化程度和状态。本备忘录的发布不受任何限制。
版权声明:
版权为The Internet Society 所有。所有权利保留。
11.1.1 存储空间低 250 30
11.2 重定向(Redirection 3xx) 31
11.3 客户端错误(Client Error )4xx 31
11.3.1方法不允许 32
11.3.2参数不能理解 32

思博伦网络测试培训11-应用层及安全测试方案

思博伦网络测试培训11-应用层及安全测试方案

思博伦应用层及安全解决方案为什么测试4-7层?基于内容的设备加速了www 迅速增长 对于内容网络(4-7层)而言,增加产品数量并不是很好 的途径,不如加强对这些设备的测试网络的边缘部分已经成为瓶颈 需要进行4-7层测试的设备包括:防火墙 入侵检测系统(IDS) VPN网关 SSL加速器 负载均衡器和Web交换机 Web cache ……Page 2提供安全的、无 漏洞的网络快速地传送内容 给用户为什么测试4-7层?即使设备不是基于4-7层的,当处理7层数据流时,负载 特征的改变也会造成明显的功能和性能问题 传统的2-3层数据流压力测试是好的,但总是不够充分的 需要将“真实性”引入实验室测试中- 协议(HTTP、FTP、SMTP、POP、SSL、…) - 环境(数据包丢失、延迟、连接速度、…)Page 3安全及应用层测试 — 4-7层测试技术测试技术发展情况业界没有形成系统的测试方法学 测试内容包括功能测试、性能测试、协 议分析、网络监控等内容 又分为设备测试、服务器、网络服务测 试 有许多厂商都在研究新的测试方法 RFC 2647/RFC 3511 Light Reading SSL VPN测试技术发展趋势所有的网络都需要进行高层业务测试 网络/设备/服务器 网络安全测试的在多个方面发展 DoS/病毒/垃圾邮件/系统监控/… 应用层QoS测试 Trip Play测试技术目前可行的解决方案应用层性能测试工具 协议分析软件 应用层仿真工具 2-7层集成测试技术面临的挑战测试方法学的统一和标准化 网络安全测试与实际网络安全 如何准确评估具有复合业务的网络系统 可靠性测试与系统故障分离 大量新兴应用的出现为测试增加了难度Page 4问题:应用和网络结构非常复杂评估系统的容量 非常困难防火墙负载均衡器路由器SSL 设备 Web 服务器 应用 服务器 数据库 服务器Page 5应用性能评估需要仿真用户和Internet现实中用户应用的交互 现实中用户应用的交互 不同的浏览器类型 不同的浏览器类型 用户思考时间 用户思考时间 用户放弃(HTTP abort) 用户放弃(HTTP abort) DDoS攻击 DDoS攻击 病毒附件/垃圾邮件 病毒附件/垃圾邮件每个用户都有IP地址 每个用户都有IP地址 线路速率 线路速率 延迟 延迟 丢包 丢包Page 6传统的实验室评估实验室环境 实验室环境• •有限的数量: 有限的数量:• • • • • • 用户/客户端 用户/客户端 协议(ftp, http) 协议(ftp, http) 服务器/应用 服务器/应用••有限的网络影响 有限的网络影响 延迟、丢包 •• 延迟、丢包 分片,等 •• 分片,等 网络设计影响 网络设计影响 单个DUT 单个DUT 单个厂商仿真 单个厂商仿真Device•• •• ••Page 7思博伦解决方案 — Avalanche/ThreatExPage 8系统测试Spirent Avalanche• 安全:检验对于病毒和攻击的防护 • 可用性:在低于峰值负载和超过峰值负载情况下测试 • 降低成本:精确测量得出系统所需规模Page 9网络基础架构测试Spirent AvalancheSpirent Reflector• 安全:检验在极端负载情况下的防护 • 可用性:测试设备软件的新版本 • 降低成本:评估来自多个厂商的设备Page 10测试方案的拓朴结构SSL ScalerRouterFirewallLoad Balancer Database ServerFile ServerApplication ServerWeb Server模拟核心网络丢包Internet模拟用户接入速率(56K, 512K, 等.)用户的个人行为:(思考时间, 超时放弃浏览,等)模拟众多子网地址流量真实流量: HTTP1.0/1.1, FTP,SMTP/PoP 3, 视频, 攻击, SOAP, 等.)测试仪表模拟所有客户端功能测试仪表:模拟服务器群“真实环境”测试L4-L7网络连接设备Avalanche产品概述Avalanche产品系列是目前业内先进的4-7层(应用层)仿真及性能测试工具。

RTSP

RTSP

RTSP实例解析Real Time Streaming Protocol或者RTSP(实时流媒体协议),是由Real network 和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。

RTSP提供一种可扩展的框架,使能够提供能控制的,按需传输实时数据,比如音频和视频文件。

源数据可以包括现场数据的反馈和存贮的文件。

rtsp 对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,rtsp作用相当于流媒体服务器的远程控制。

传输数据可以通过传输层的tcp,udp协议,rtsp也提供了基于rtp传输机制的一些有效的方法。

一. 参考资料1. 《RTSP简单命令》:/feidragon319/archive/2007/08/14/1742357.aspx2. /dispbbs.asp?boardid=15&Id=229483. 《RTSP客户端的Java实现》:/ssyuan/blog/item/566df6defac1dc5094ee37eb.html二. RTSP的常用命令与解释其中C是客户端,S是服务端。

2.1 OPTIONSC->S: OPTION request //询问S有哪些方法可用S->C: OPTION response //S回应信息中包括提供的所有可用方法使用举例:客户端到服务端:OPTIONS rtsp://218.207.101.236:554/mobile/3/67A451E937422331 RTSP/1.0Cseq: 1服务端对OPTIONS的回应:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 1Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD2.2 DESCRIBEC->S: DESCRIBE request //要求得到S提供的媒体初始化描述信息S->C: DESCRIBE response //S回应媒体初始化描述信息,主要是sdp使用举例:客户端到服务端:DESCRIBE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp RTSP/1.0Cseq: 2服务端对OPTIONS的回应:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 2Content-length: 421Date: Mon, 03 Aug 2009 08:21:33 GMTExpires: Mon, 03 Aug 2009 08:21:33 GMTContent-Type: application/sdpx-Accept-Retransmit: our-retransmitx-Accept-Dynamic-Rate: 1Content-Base: rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QP U5GWS07Ugn.sdp/v=0o=MediaBox 127992 137813 IN IP4 0.0.0.0s=RTSP Sessioni=Starv Box Live Castc=IN IP4 218.207.101.236t=0 0a=range:npt=now-a=control:*m=video 0 RTP/AVP 96b=AS:20a=rtpmap:96 MP4V-ES/1000a=fmtp:96 profile-level-id=8; config=000001b008000001b5090000010000000120 008440fa282c2090a31f; decode_buf=12586a=range:npt=now-a=framerate:5a=framesize:96 176-144a=cliprect:0,0,144,176a=control:trackID=12.3 SETUPC->S: SETUP request //设置会话的属性,以及传输模式,提醒S建立会话S->C: SETUP response //S建立会话,返回会话标识符,以及会话相关信息客户端到服务端的请求举例:SETUP rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07U gn.sdp/trackID=1RTSP/1.0Cseq: 3Transport: RTP/AVP;UNICAST;client_port=16264-16265;mode=play服务端对客户端的回应举例:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 3Session: 26633092229589Date: Mon, 03 Aug 2009 08:21:33 GMTExpires: Mon, 03 Aug 2009 08:21:33 GMTTransport: RTP/AVP;UNICAST;mode=play;client_port=16264-16265;server_port= 20026-200272.4 PLAYC->S: PLAY request //C请求播放S->C: PLAY response //S回应该请求的信息客户端到服务端的请求举例:PLAY rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ug n.sdp RTSP/1.0Session: 26633092229589Cseq: 4服务端对客户端的回应举例:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 4Session: 26633092229589RTP-Info: url=rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QP U5GWS07Ugn.sdp/trackID=1;seq=0;rtptime=02.5 PAUSEC->S: PAUSE request //C请求暂停播放S->C: PAUSE response //S回应该请求的信息客户端到服务端的请求举例:PAUSE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07U gn.sdp/ RTSP/1.0Cseq: 5Session: 26633092229589服务端对客户端的回应举例:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 5Session: 266330922295892.6 TEARDOWNC->S: TEARDOWN request //C请求关闭会话S->C: TEARDOWN response //S回应该请求客户端到服务端的请求举例:TEARDOWN rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS 07Ugn.sdp/ RTSP/1.0Cseq: 6User-Agent: RealMedia Player HelixDNAClient/10.0.0.11279 (win32)Session: 26633092229589服务端对客户端的回应举例:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 6Session: 26633092229589Connection: Close三. RTSP客户端的Java实现3.1 接口IEvent.java接口IEvent.java的代码如下:package com.amigo.rtsp;import java.io.IOException;import java.nio.channels.SelectionKey;/*** IEvent.java 网络事件处理器,当Selector可以进行操作时,调用这个接口中的方法.* 2007-3-22 下午03:35:51* @author sycheng* @version 1.0*/public interface IEvent {/*** 当channel得到connect事件时调用这个方法.* @param key* @throws IOException*/void connect(SelectionKey key) throws IOException;/*** 当channel可读时调用这个方法.* @param key* @throws IOException*/void read(SelectionKey key) throws IOException;/*** 当channel可写时调用这个方法.* @throws IOException*/void write() throws IOException;/*** 当channel发生错误时调用.* @param e*/void error(Exception e);}3.2 RTSP的测试类:RTSPClient.javaRTSP的测试类RTSPClient.java类的代码如下所示:package com.amigo.rtsp;import java.io.IOException;import .InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.SocketChannel;import java.util.Iterator;import java.util.concurrent.atomic.AtomicBoolean;public class RTSPClient extends Thread implements IEvent {private static final String VERSION = " RTSP/1.0\r\n";private static final String RTSP_OK = "RTSP/1.0 200 OK";/** 远程地址 */private final InetSocketAddress remoteAddress;/** * 本地地址 */private final InetSocketAddress localAddress;/** * 连接通道 */private SocketChannel socketChannel;/** 发送缓冲区 */private final ByteBuffer sendBuf;/** 接收缓冲区 */private final ByteBuffer receiveBuf;private static final int BUFFER_SIZE = 8192;/** 端口选择器 */private Selector selector;private String address;private Status sysStatus;private String sessionid;/** 线程是否结束的标志 */private AtomicBoolean shutdown;private int seq=1;private boolean isSended;private String trackInfo;private enum Status {init, options, describe, setup, play, pause, teardown}public RTSPClient(InetSocketAddress remoteAddress,InetSocketAddress localAddress, String address) {this.remoteAddress = remoteAddress;this.localAddress = localAddress;this.address = address;// 初始化缓冲区sendBuf = ByteBuffer.allocateDirect(BUFFER_SIZE);receiveBuf = ByteBuffer.allocateDirect(BUFFER_SIZE);if (selector == null) {// 创建新的Selectortry {selector = Selector.open();} catch (final IOException e) {e.printStackTrace();}}startup();sysStatus = Status.init;shutdown=new AtomicBoolean(false);isSended=false;}public void startup() {try {// 打开通道socketChannel = SocketChannel.open();// 绑定到本地端口socketChannel.socket().setSoTimeout(30000);socketChannel.configureBlocking(false);socketChannel.socket().bind(localAddress);if (socketChannel.connect(remoteAddress)) {System.out.println("开始建立连接:" + remoteAddress);}socketChannel.register(selector, SelectionKey.OP_CONNECT| SelectionKey.OP_READ | SelectionKey.OP_WRITE, this);System.out.println("端口打开成功");} catch (final IOException e1) {e1.printStackTrace();}}public void send(byte[] out) {if (out == null || out.length < 1) {return;}synchronized (sendBuf) {sendBuf.clear();sendBuf.put(out);sendBuf.flip();}// 发送出去try {write();isSended=true;} catch (final IOException e) {e.printStackTrace();}}public void write() throws IOException {if (isConnected()) {try {socketChannel.write(sendBuf);} catch (final IOException e) {}} else {System.out.println("通道为空或者没有连接上");}}public byte[] recieve() {if (isConnected()) {try {int len = 0;int readBytes = 0;synchronized (receiveBuf) {receiveBuf.clear();try {while ((len = socketChannel.read(receiveBuf)) > 0) {readBytes += len;}} finally {receiveBuf.flip();}if (readBytes > 0) {final byte[] tmp = new byte[readBytes];receiveBuf.get(tmp);return tmp;} else {System.out.println("接收到数据为空,重新启动连接");return null;}}} catch (final IOException e) {System.out.println("接收消息错误:");}} else {System.out.println("端口没有连接");}return null;}public boolean isConnected() {return socketChannel != null && socketChannel.isConnected();}private void select() {int n = 0;try {if (selector == null) {return;}n = selector.select(1000);} catch (final Exception e) {e.printStackTrace();}// 如果select返回大于0,处理事件if (n > 0) {for (final Iterator<SelectionKey> i = selector.selectedKeys().iterator(); i.hasNext();) {// 得到下一个Keyfinal SelectionKey sk = i.next();i.remove();// 检查其是否还有效if (!sk.isValid()) {continue;}// 处理事件final IEvent handler = (IEvent) sk.attachment();try {if (sk.isConnectable()) {handler.connect(sk);} else if (sk.isReadable()) {handler.read(sk);} else {// System.err.println("Ooops");}} catch (final Exception e) {handler.error(e);sk.cancel();}}}}public void shutdown() {if (isConnected()) {try {socketChannel.close();System.out.println("端口关闭成功");} catch (final IOException e) {System.out.println("端口关闭错误:");} finally {socketChannel = null;}} else {System.out.println("通道为空或者没有连接");}}@Overridepublic void run() {// 启动主循环流程while (!shutdown.get()) {try {if (isConnected()&&(!isSended)) {switch (sysStatus) {case init:doOption();break;case options:doDescribe();break;case describe:doSetup();break;case setup:if(sessionid==null&&sessionid.length()>0){System.out.println("setup还没有正常返回");}else{doPlay();}break;case play:doPause();break;case pause:doTeardown();break;default:break;}}// do selectselect();try {Thread.sleep(1000);} catch (final Exception e) {}} catch (final Exception e) {e.printStackTrace();}}shutdown();}public void connect(SelectionKey key) throws IOException {if (isConnected()) {return;}// 完成SocketChannel的连接socketChannel.finishConnect();while (!socketChannel.isConnected()) {try {Thread.sleep(300);} catch (final InterruptedException e) {e.printStackTrace();}socketChannel.finishConnect();}}public void error(Exception e) {e.printStackTrace();}public void read(SelectionKey key) throws IOException {// 接收消息final byte[] msg = recieve();if (msg != null) {handle(msg);} else {key.cancel();}}private void handle(byte[] msg) {String tmp = new String(msg);System.out.println("返回内容:");System.out.println(tmp);if (tmp.startsWith(RTSP_OK)) {switch (sysStatus) {case init:sysStatus = Status.options;break;case options:sysStatus = Status.describe;trackInfo=tmp.substring(tmp.indexOf("trackID"));break;case describe:sessionid = tmp.substring(tmp.indexOf("Session: ") + 9, t mp.indexOf("Date:"));if(sessionid!=null&&sessionid.length()>0){sysStatus = Status.setup;}break;case setup:sysStatus = Status.play;break;case play:sysStatus = Status.pause;break;case pause:sysStatus = Status.teardown;shutdown.set(true);break;case teardown:sysStatus = Status.init;break;default:break;}isSended=false;} else {System.out.println("返回错误:" + tmp);}}private void doTeardown() {StringBuilder sb = new StringBuilder();sb.append("TEARDOWN ");sb.append(this.address);sb.append("/");sb.append(VERSION);sb.append("Cseq: ");sb.append(seq++);sb.append("\r\n");sb.append("User-Agent: RealMedia Player HelixDNAClient/10.0.0.112 79 (win32)\r\n");sb.append("Session: ");sb.append(sessionid);sb.append("\r\n");send(sb.toString().getBytes());System.out.println(sb.toString());}private void doPlay() {StringBuilder sb = new StringBuilder();sb.append("PLAY ");sb.append(this.address);sb.append(VERSION);sb.append("Session: ");sb.append(sessionid);sb.append("Cseq: ");sb.append(seq++);sb.append("\r\n");sb.append("\r\n");System.out.println(sb.toString());}private void doSetup() {StringBuilder sb = new StringBuilder();sb.append("SETUP ");sb.append(this.address);sb.append("/");sb.append(trackInfo);sb.append(VERSION);sb.append("Cseq: ");sb.append(seq++);sb.append("\r\n");sb.append("Transport: RTP/AVP;UNICAST;client_port=16264-16265;mod e=play\r\n");sb.append("\r\n");System.out.println(sb.toString());send(sb.toString().getBytes());}private void doOption() {StringBuilder sb = new StringBuilder();sb.append("OPTIONS ");sb.append(this.address.substring(0, stIndexOf("/")));sb.append(VERSION);sb.append("Cseq: ");sb.append(seq++);sb.append("\r\n");sb.append("\r\n");System.out.println(sb.toString());send(sb.toString().getBytes());}private void doDescribe() {StringBuilder sb = new StringBuilder();sb.append("DESCRIBE ");sb.append(this.address);sb.append(VERSION);sb.append("Cseq: ");sb.append(seq++);sb.append("\r\n");sb.append("\r\n");System.out.println(sb.toString());}private void doPause() {StringBuilder sb = new StringBuilder();sb.append("PAUSE ");sb.append(this.address);sb.append("/");sb.append(VERSION);sb.append("Cseq: ");sb.append(seq++);sb.append("\r\n");sb.append("Session: ");sb.append(sessionid);sb.append("\r\n");send(sb.toString().getBytes());System.out.println(sb.toString());}public static void main(String[] args) {try {// RTSPClient(InetSocketAddress remoteAddress,// InetSocketAddress localAddress, String address)RTSPClient client = new RTSPClient(new InetSocketAddress("218.207.101.236", 554),new InetSocketAddress("192.168.2.28", 0),"rtsp://218.207.101.236:554/mobile/3/67A451E937422331 /8jH5QPU5GWS07Ugn.sdp");client.start();} catch (Exception e) {e.printStackTrace();}}}其中:rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.sdp为我在网上找到的一个rtsp的sdp地址,读者可自行更换,RTSP的默认端口为554.3.3 运行结果运行RTSPClient.java,运行结果如下所示:端口打开成功OPTIONS rtsp://218.207.101.236:554/mobile/3/67A451E937422331 RTSP/1.0Cseq: 1返回内容:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 1Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORDDESCRIBE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS 07Ugn.sdp RTSP/1.0Cseq: 2返回内容:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 2Content-length: 421Date: Mon, 03 Aug 2009 08:50:36 GMTExpires: Mon, 03 Aug 2009 08:50:36 GMTContent-Type: application/sdpx-Accept-Retransmit: our-retransmitx-Accept-Dynamic-Rate: 1Content-Base: rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QP U5GWS07Ugn.sdp/v=0o=MediaBox 127992 137813 IN IP4 0.0.0.0s=RTSP Sessioni=Starv Box Live Castc=IN IP4 218.207.101.236t=0 0a=range:npt=now-a=control:*m=video 0 RTP/AVP 96b=AS:20a=rtpmap:96 MP4V-ES/1000a=fmtp:96 profile-level-id=8; config=000001b008000001b5090000010000000120 008440fa282c2090a31f; decode_buf=12586a=range:npt=now-a=framerate:5a=framesize:96 176-144a=cliprect:0,0,144,176a=control:trackID=1SETUP rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07U gn.sdp/trackID=1RTSP/1.0Cseq: 3Transport: RTP/AVP;UNICAST;client_port=16264-16265;mode=play返回内容:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 3Session: 15470472221769Date: Mon, 03 Aug 2009 08:50:36 GMTExpires: Mon, 03 Aug 2009 08:50:36 GMTTransport: RTP/AVP;UNICAST;mode=play;client_port=16264-16265;server_port= 20080-20081PLAY rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ug n.sdp RTSP/1.0Session: 15470472221769Cseq: 4返回内容:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 4Session: 15470472221769RTP-Info: url=rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QP U5GWS07Ugn.sdp/trackID=1;seq=0;rtptime=0PAUSE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07U gn.sdp/ RTSP/1.0Cseq: 5Session: 15470472221769返回内容:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 5Session: 15470472221769TEARDOWN rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS 07Ugn.sdp/ RTSP/1.0Cseq: 6User-Agent: RealMedia Player HelixDNAClient/10.0.0.11279 (win32) Session: 15470472221769返回内容:RTSP/1.0 200 OKServer: PVSS/1.4.8 (Build/20090111; Platform/Win32; Release/StarValley; )Cseq: 6Session: 15470472221769Connection: Close端口关闭成功对照运行结果,读者可以熟悉RTSP的常用命令.。

从零开始写一个RTSP服务器(一)RTSP协议讲解

从零开始写一个RTSP服务器(一)RTSP协议讲解

从零开始写一个RTSP服务器(一)RTSP协议讲解文章目录•从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解•o 3.1 RTP包格式o 3.2 RTP OVER TCPo 2.1 RTSP数据格式o 2.2 RTSP请求的常用方法o 2.3 RTSP交互过程o 2.4 sdp格式o前言o一、什么是RTSP协议?o二、RTSP协议详解oo三、RTP协议oo四、RTCP前言•为什么要写这个系列?因为我自己在学习rtsp协议想自己从零写一个rtsp服务器的时候,由于rtsp比较复杂,所以觉得这个过程非常的困难,网上许多相关文章或模棱两可,或是复制粘贴。

所以想写这样一个系列,来帮助想要学习rtsp协议或者想要从零写一个rtsp服务器的初学者•本系列的文章特点并系列文章实现追求精简,能够让人明白rtsp协议的实现过程,不追求复杂和完美如果想要实现一个比较完善的rtsp服务器,可以参考我的开源项目-RtspServer言归正传,下面开始本系列的文章一、什么是RTSP协议?RTSP是一个实时传输流协议,是一个应用层的协议通常说的RTSP包括RTSP协议、RTP协议、RTCP协议对于这些协议的作用简单的理解如下RTSP协议:负责服务器与客户端之间的请求与响应RTP协议:负责传输媒体数据RTCP协议:在RTP传输过程中提供传输信息rtsp承载与rtp和rtcp之上,rtsp并不会发送媒体数据,而是使用rtp协议传输rtp并没有规定发送方式,可以选择udp发送或者tcp发送二、RTSP协议详解rtsp的交互过程就是客户端请求,服务器响应,下面看一看请求和响应的数据格式2.1 RTSP数据格式RTSP协议格式与HTTP协议格式类似•RTSP客户端的请求格式•method url vesion\r\n•CSeq: x\r\n•xxx\r\n•...\r\nmethod:方法,表明这次请求的方法,rtsp定义了很多方法,稍后介绍url:格式一般为rtsp://ip:port/session,ip表主机ip,port表端口好,如果不写那么就是默认端口,rtsp的默认端口为554,session表明请求哪一个会话version:表示rtsp的版本,现在为RTSP/1.0CSeq:序列号,每个RTSP请求和响应都对应一个序列号,序列号是递增的•RTSP服务端的响应格式•vesion 200 OK\r\n•CSeq: x\r\n•xxx\r\n•...\r\nversion:表示rtsp的版本,现在为RTSP/1.0CSeq:序列号,这个必须与对应请求的序列号相同2.2 RTSP请求的常用方法方法描述OPTIONS 获取服务端提供的可用方法DESCRIBE 向服务端获取对应会话的媒体描述信息SETUP 向服务端发起建立请求,建立连接会话PLAY 向服务端发起播放请求TEARDOWN 向服务端发起关闭连接会话请求2.3 RTSP交互过程有了上述的知识,我们下面来讲解一个RTSP的交互过程OPTIONS•C–>S•OPTIONS rtsp://192.168.31.115:8554/live RTSP/1.0\r\n•CSeq: 2\r\n\r\n客户端向服务器请求可用方法•S–>C•RTSP/1.0 200 OK\r\n•CSeq: 2\r\n•Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY\r\ n\r\n服务端回复客户端,当前可用方法OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAYDESCRIBE•C–>S•DESCRIBE rtsp://192.168.31.115:8554/live RTSP/1.0\r\n•CSeq: 3\r\n•Accept: application/sdp\r\n\r\n客户端向服务器请求媒体描述文件,格式为sdp•S–>C•RTSP/1.0 200 OK\r\n•CSeq: 3\r\n•Content-length: 146\r\n•Content-type: application/sdp\r\n•\r\n••v=0\r\n•o=- 91565340853 1 in IP4 192.168.31.115\r\n•t=0 0\r\n•a=contol:*\r\n•m=video 0 RTP/AVP 96\r\n•a=rtpmap:96 H264/90000\r\n•a=framerate:25\r\na=control:track0\r\n服务器回复了sdp文件,这个文件告诉客户端当前服务器有哪些音视频流,有什么属性,具体稍后再讲解这里只需要直到客户端可以根据这些信息得知有哪些音视频流可以发送SETUP•C–>S•SETUP rtsp://192.168.31.115:8554/live/track0 RTSP/1.0\r\ n•CSeq: 4\r\n•Transport: RTP/AVP;unicast;client_port=54492-54493\r\n \r\n客户端发送建立请求,请求建立连接会话,准备接收音视频数据解析一下Transport: RTP/AVP;unicast;client_port=54492-54493\r\nRTP/AVP:表示RTP通过UDP发送,如果是RTP/AVP/TCP则表示RTP通过TCP发送unicast:表示单播,如果是multicast则表示多播client_port=54492-54493:由于这里希望采用的是RTP OVER UDP,所以客户端发送了两个用于传输数据的端口,客户端已经将这两个端口绑定到两个udp套接字上,54492表示是RTP端口,54493表示RTCP端口(RTP端口为某个偶数,RTCP端口为RTP端口+1)•S–>C•RTSP/1.0 200 OK\r\n•CSeq: 4\r\n•Transport: RTP/AVP;unicast;client_port=54492-54493;server_port=56400-56401\r\n•Session: 66334873\r\n\r\n服务端接收到请求之后,得知客户端要求采用RTP OVER UDP发送数据,单播,客户端用于传输RTP数据的端口为54492,RTCP的端口为54493服务器也有两个udp套接字,绑定好两个端口,一个用于传输RTP,一个用于传输RTCP,这里的端口号为56400-56401 之后客户端会使用54492-54493这两端口和服务器通过udp传输数据,服务器会使用56400-56401这两端口和这个客户端传输数据PLAY•C–>S•PLAY rtsp://192.168.31.115:8554/live RTSP/1.0\r\n•CSeq: 5\r\n•Session: 66334873\r\n•Range: npt=0.000-\r\n\r\n客户端请求播放媒体•S–>C•RTSP/1.0 200 OK\r\n•CSeq: 5\r\n•Range: npt=0.000-\r\n•Session: 66334873; timeout=60\r\n\r\n服务器回复之后,会开始使用RTP通过udp向客户端的54492端口发送数据TEARDOWN•C–>S•TEARDOWN rtsp://192.168.31.115:8554/live RTSP/1.0\r\n •CSeq: 6\r\n•Session: 66334873\r\n\r\n•S–>C•RTSP/1.0 200 OK\r\n•CSeq: 6\r\n\r\n2.4 sdp格式我们上面避开没有讲sdp文件,这里来好好补一补sdp格式由多行的type=value组成sdp会话描述由一个会话级描述和多个媒体级描述组成。

RTSP基础知识及测试方法课件

RTSP基础知识及测试方法课件

RTP数据封装
TCP/IP模型
应用层
应用程序
RTP 套接口
传输层
UDP
网络层
IP
链路层
物理层
(a) RTP在协议套中的位置
视听数据
RTP包头 RTP有效载荷(视听数据)
UDP包头 RTP包头
RTP有效载荷(视听数据) UDP有效载荷
IP包头 UDP包头 RTP包头 RTP有效载荷(视听数据) IP有效载荷
直播与点播的区别?
表面上看, 1、直播: 就是它放什么你看什么.比如它现在放一个电影..放到哪你就得从哪看..就 像电视一样; 2、点播: 就是你选什么然后从头开始放..这样对看电影的人来说无疑是方便了不少 ....好像你买盘看VCD一样..
实际上, 直播一般是采用IGMP协议,传输的是组播流(目的地址为组播地址); 点播一般采用RTSP协议,传输的是RTP流(点对点的UDP数据流)。
以太网包头 IP包头 UDP包头 RTP包头 RTP有效载荷(视听数据) 以太网有效载荷
RTSP交互过程(二)源自C表 示RTSP客户端,S表示RTSP服务端 ① C->S: OPTION request //询问S有 哪些方法可用
S->C: OPTION response //S回应信息中包括提供的所有可用方法
② C->S: DESCRIBE request //要求得到S提供 的媒体初始化描述信息 S->C: DESCRIBE response //S回应媒体初始化描述信息,主要是sdp
③ C->S: SETUP request //设置会话属性,以及传输模式,提醒S建立会话 S->C: SETUP response //S建立会话,返回会话标识符及会话相关信息

RTSP服务器实例

RTSP服务器实例

RTSP服务器实例1. RTSP连接的建⽴过程RTSPServer类⽤于构建⼀个RTSP服务器,该类同时在其内部定义了⼀个RTSPClientSession类,⽤于处理单独的客户会话。

⾸先创建RTSP服务器(具体实现类是DynamicRTSPServer),在创建过程中,先建⽴Socket(ourSocket)在TCP的554端⼝进⾏监听,然后把连接处理函数句柄(RTSPServer::incomingConnectionHandler)和socket句柄传给任务调度器(taskScheduler)。

任务调度器把socket句柄放⼊后⾯select调⽤中⽤到的socket句柄集(fReadSet)中,同时将socket句柄和incomingConnectionHandler句柄关联起来。

接着,主程序开始进⼊任务调度器的主循环(doEventLoop),在主循环中调⽤系统函数select阻塞,等待⽹络连接。

当RTSP客户端输⼊(rtsp://192.168.0.1/1.mpg)连接服务器时,select返回对应的socket,进⽽根据前⾯保存的对应关系,可找到对应处理函数句柄,这⾥就是前⾯提到的incomingConnectionHandler了。

在incomingConnectionHandler中创建了RTSPClientSession,开始对这个客户端的会话进⾏处理。

2. DESCRIBE请求消息处理过程RTSP服务器收到客户端的DESCRIBE请求后,根据请求URL(rtsp://192.168.0.1/1.mpg),找到对应的流媒体资源,返回响应消息。

live555中的ServerMediaSession类⽤来处理会话中描述,它包含多个(⾳频或视频)的⼦会话描述(ServerMediaSubsession)。

RTSP服务器收到客户端的连接请求,建⽴了RTSPClientSession类,处理单独的客户会话。

轻松架设RTSP流媒体代理服务器

轻松架设RTSP流媒体代理服务器

op en 毫our W 每r d : t・ I
维普资讯
企 业 级 应 用
( )根 据 实 际 情 况 修 改 Rtp 2 s Pr oxY 的 标 准 J va配 置 文 件 a

填 人 服 务 器 的 R t gP
P o yl r x P地 址 , 后 面 一 个 填 R S P 端 口 再 在 T “ HTTP选 项 ”里 选 中 “ 手
维普资讯
企 业 级 应 用
基 于 开 放 源 码 的 R s Po y软 件 , 不 仅 支 持 授 权 与 认 证 功 能 , 可 以 对 域 名 或 I地 ,p rx t P
址 进行 过 滤和 限制 , 能方 便地 在 局域 网和 目标 流媒 体 服 务 器之 间搭 建 起 基 于 L u 的 还 ix n
获 取 资源 时 ,可 以在 局 域 网和 目 标 流媒 体 服务 器 之 间搭 建 起基 于
作系统平 台之外 ,还支持 装有 Jv aa
环境 的 Wi( n幻 操作系统 。
Ln x的Se mig P o y( iu ta n rx 流媒 体
代理 服务器 ) 突破 限制 。 户 端 来 客
的计算机 好像 只是访 问 Se mig ta n P o y就 能顺 利地 获取 所需 的资 rx
源 , 而 实 际上 是 Se mig P o y ta n rx
的 免 费 电 影 来 吸 引 用 户 , 由 于 但
网络 带宽 不 足 等 问题 ,这些 站 点 都 会 采取 设 定 I 围 、 P范 大客 户 端 连 接 数 等 措施 对 用 户进 行 限制 。
P o y路 径 环境 变 量 。 rx
¥ ep r A H= A H: X ot T ; P ; / 皇

【6A文】RTSP协议详解中文版

【6A文】RTSP协议详解中文版

E-mail:bryanj@译者:Bryan.Wong(王晶,宁夏固原)译文版本:alpha0.80译文发布时间:20XX-7-25版权:本中文翻译文档之版权归王晶所有。

可于非商业用途前提下自由转载,但必须保留此翻译及版权信息。

/filedownload?user=bryanj&id=611206网络工作组H.Schulzrinne请求注释:2326哥伦比亚大学.类别:标准跟踪A.RaoNetscapenphierRealNetworks1998年4月实时流协议(RTSP)本备忘录状态本文为Internet社区描述了一种Internet标准跟踪协议,还需要讨论和建议以便进行改善。

请查看最新版本的"Internet正式协议标准"(STD1)了解本协议的标准化进程和状态。

本备忘录的传播不受限制。

版权声明:版权为TheInternetSociety所有。

所有权利保留。

摘要:实时流协议(RTSP)是应用层协议,控制实时数据的传送。

RTSP提供了一个可扩展框架,使受控、按需传输实时数据(如音频与视频)成为可能。

数据源包括现场数据与存储在剪辑中的数据。

本协议旨在于控制多个数据发送会话,提供了一种选择传送途径(如UDP、组播UDP与TCP)的方法,并提供了一种选择基于RTP(RFC1889)的传送机制的方法。

目录:1介绍1.2要求1.3术语1.4协议特性1.5RTSP扩展1.6整体运作1.7RTSP状态1.8与其他协议的关系2符号协定3协议参数3.1RTSP版本3.2RTSPURL3.3会议标识3.4会话标识3.5SMPTE相对时间戳3.6正常播放时间3.7绝对时间3.8选项标签3.8.1用IANA注册新的选项标签G4RTSP消息4.1消息类型4.2消息头4.3消息主体4.4消息长度G5普通头部段6.1请求行6.2请求消息头段G7响应7.1状态行7.1.1状态码和原因短语7.1.2响应头部段G8实体8.1实体头部域8.2实体主体24G9连接9.1流水线化259.2可靠性及确认25G10方法定义2510.1可选项2610.2描述2610.3通知2610.4建立2610.5播放2710.6暂停2710.7断开2710.8获取参数2810.9设置参数2810.10重定向2810.11录制2910.12嵌入(交织)的二进制数据29G11状态码定义2911.1成功2xx3011.1.1存储空间低2503011.2重定向3xx3111.3客户端错误4xx3111.3.1方法不允许3211.3.2无法理解参数3211.3.3会议未找到3311.3.4带宽不足3311.3.5会话未找到3411.3.6本状态下该方法无效3411.3.7头部域与资源不匹配3411.3.8无效范围3511.3.9参数为只读3511.3.10不允许合操作3611.3.11只允许合操作3611.3.12不支持的传输3611.3.13目标不可达3711.3.14不支持的选项3712头部段定义(HeaderFieldDefinitions)38 12.1接受3812.2接受-编码3812.3接受-语言3912.4允许(Allow)3912.5授权(Authorization)4012.6带宽4012.7块大小4012.8缓存控制4112.9会议4112.10连接4112.11内容-基础4212.12内容-编码(Content-Encoding)4212.13内容-语言4312.14内容-长度(Content-Length)4312.15内容-位置4312.16内容-类型(Content-Type)4412.17命令序列题头(CSeq)4412.18日期(Date)4412.19过期(Expires)4512.20来自(From)4512.21主机4512.22如果匹配4512.23如果-被修改-自从(If-Modified-Since)46 12.24最后修改(Last-Modified)4612.25位置(Location)4612.26代理认证4712.27代理要求4712.28公布4712.29范围4912.30提交方(Referer)4912.31稍后重试4912.32要求4912.33RTP信息4912.34倍速(Scale)12.35速度4912.36服务器(Server)4912.37会话4912.38时间戳4912.39传输4912.40不支持4912.41用户代理(User-Agent)4912.42变化4912.43通过4912.44WWW-认证(WWW-Authenticate)50 G13缓存50G14例子5014.1按需点播(单播)5014.2容器文件的流化5114.3单个流容器文件5114.4实况媒体表示的组播5114.5在存在的会话中播放媒体5114.6录制52G15语法5215.1基本语法5216安全考虑(SecurityConsiderations)52 G附录ARTSP协议状态机53GA.1客户端状态机53GA.2服务器端状态机53G附录B与RTP协议的交互53G附录C使用SDP进行RTSP会话描述54 +C.1定义54oC.1.1控制URL55oC.1.2媒体流55oC.1.3有效载荷类型55oC.1.4详细格式参数55oC.1.5表示的范围56oC.1.6有效时间56oC.1.7连接信息56oC.1.8实体标签57+C.2合控制不可用57+C.3合控制可用57G附录D最小RTSP实现58+D.1客户端58D.1.1基本回放58D.1.2认证enabled58+D.2服务器59D.2.1基本回放59D.2.2认证enabled59G附录E作者地址60G附录F致谢60G参考书目60G版权申明611介绍1.1目的实时流协议(RTSP)建立并控制一个或几个时间同步的连续流媒体,比如音频或视频。

RTSP简介以及常用方法使用实例

RTSP简介以及常用方法使用实例

RTSP简介以及常用方法使用实例实时流协议(RTSP),英文全称为Real Time Streaming Protocol。

它是一个用来获取所需要属性(编码方式、分辨率或者帧率等)实时流以及控制实时流的应用层协议。

RTSP是一个基于文本的协议,它与HTTP十分相似。

在RTSP中,保留了几乎所有的HTTP符号以及相关定义。

所以,RTSP十分利于扩展,并且容易使用程序进行解析。

RTSP虽然可以用来获取实时流,但是协议中并没有定义传输实时流的方式。

它通过与其它的传输机制配合,例如RTP,进行实时流传输。

在RTSP中,我们可以在SETUP方法中设置一些参数,以选择是用TCP还是用UDP作为RTP的底层传输协议。

RTSP通过以会话(Session)的方式描述一个连接的生命周期。

会话(Session)通过RTSP客户端使用RTSP的SETUP方法建立,然后RTSP客户端可以通过PLAY、PAUSE、RECORD等方法(Method)来控制实时流的播放、暂停以及回放等。

当不再需要实时流的时候,RTSP客户端通过TEARDOWN方法(Method)来结束这个会话(Session)。

RTSP通过与HTTP相似的方式来定义URL,RTSP完整的URL定义如下:rtsp URL = ( ”rtsp:” | ”rtspu:” | ”rtsps:” )”//” host [ ”:” port ] [ abs path ]rtsp = 使用可信的底层传输协议,例如TCPrtspu = 使用不可信的底层传输协议,例如UDPrtsps = 使用可信加密传输协议,例如TCP TLShost = 服务器的IP地址port = 服务器的端口,该字段在忽略的情况下默认与服务器的554端口进行连接abs path = 所申请实时流的地址一个简单的示例如下:rtsp://:554/twister/audiotrack让我们来看一下上面URL的abs path = twister/audiotrack。

05 - RTSP LB

05 - RTSP LB

• The rtspNAT option must be enabled on the
vserver
• RTSP services must be configured with the USIP
option enabled when NS rNATs the data streams
• Configure a host route for the client’s IP to flow thru
backup vserver when the number of connections to the vserver exceeds the configured threshold value. • NS maintains sourceIP-based persistence over primary vserver and backup vservers. • With RTSP vservers, NS uses only data connections for spillover. If the backup RTSP vserver is not available, the requests are redirected to an RTSP URL and RTSP redirect message is sent to the client.
Added parameters for monitors provided to evaluate the states of the RTSP services include: • RTSP service type for defining services and vservers • RTSPSID persistence type • rtspNAT parameter for vserver commands • rtspRequest parameter for load balancing monitor type • rtspSessionidRemap parameter for service commands

RTSP流媒体服务器性能测试工具

RTSP流媒体服务器性能测试工具

RTSP流媒体服务器性能测试工具①杜 彬1,2,王淑玲2,杨海波1,21(中国科学院研究生院,北京 100049)2(中国科学院沈阳计算技术研究所,沈阳 110171)摘 要:基于RTSP协议的流媒体应用日益增加,如何评测RTSP流媒体服务器的服务性能成为一个亟待解决的实际问题。

本文在分析流媒体业务性能指标的基础上,设计和实现了一种RTSP协议流媒体服务器性能的测试工具。

该工具通过读取测试用例脚本设定参数建立测试场景,利用多线程机制生成多实例伪终端向流媒体服务器发送RTSP信令、接收和解析RTP包,但不解码,最终测定服务器的相关性能指标值。

验证实验表明,该测试工具实用高效,能准确反映被测系统的整体性能。

关键词:RTSP流媒体服务器;性能测试;性能指标;媒体流;测试工具Performance Testing Tool for RTSP-Based Streaming ServerDU Bin1,2, WANG Shu-Ling2, YANG Hai-Bo1,21(Graduate University, Chinese Academy of Sciences, Beijing 100049, China)2(Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang 110171, China)Abstract: The attention on the streaming media applications based on RTSP protocol is growing, so the main issue we address in this paper is how to evaluate the serving performance of RTSP streaming media server. With comprehensive analysis of the performance metrics of streaming applications, we propose an approach to design and implement a Performance Testing Tool for RTSP-based Streaming Server. The tool creates the testing environment by obtaining parameters from the script of test case, utilizes multi-thread mechanism to create multiple pseudo-terminal instances to simulate a certain number of concurrent users for sending RTSP signals, receives media flow, analyzes RTP packets without decoding, and calculates the related performance metric values of the server finally. Experiments validate the efficiency and accuracy of the tool.Keywords: RTSP streaming media server; performance test; performance metrics; media flow; testing tool1引言随着3G移动通信网络在国内的全面启动和发展,各运营商也充分利用3G网络为客户提供丰富的个性化业务,流媒体成为其中重要内容。

服务器测试报告【范本模板】

服务器测试报告【范本模板】

服务器测试报告概述此次测试针对新的服务器进行性能测试,主要有5个方面的测试:服务器基本性能测试,InfoDB性能测试,BinaryDB性能测试,Apache性能测试,LINUX下MYSQL性能测试,此文档仅针对机器硬件基本性能和BinaryDB 的性能测试进行描述测试结果概述:基本硬件性能概要:(此部分数据使用互联网下载的相应测试工具测得)CPU浮点运算方面:服务器约是232服务器性能的238%CPU多核心间带宽:服务器约是232服务器性能的10倍高速缓存和内存间的带宽:服务器约是232服务器性能的300%内存带宽方面:服务器约是232服务器性能的87%内存随机访问性能:服务器的内存带宽约是232服务器性能的86%内部网络性能:服务器和232服务器几乎没有差别(同处一个交换机,性能不可能有差距……)硬盘读取性能:服务器约是232服务器性能的6倍。

硬盘写入性能:打开写入缓存前:服务器约是232服务器性能的10%。

(16KB数据包)打开写入缓存后:服务器约是232服务器性能的290%。

(16KB数据包) BinaryDB性能概要:写入效率方面(写入数据包为16KB)文件模式服务器约是232服务器性能的23%磁盘模式服务器约是232服务器性能的61%打开磁盘缓存后文件模式提高了1倍的速度,但效率也仅达到232的 50%磁盘模式并没有因为打开磁盘缓存而加快速度,仅达到了232的67%读取效率方面,服务器的速度稍好,但是和硬盘读取效率的比值还是有很大差距。

文件模式服务器约是232服务器性能的125%磁盘模式服务器约是232服务器性能的124%详细性能测试报告请看这里服务器BinaryDb性能测试报告目录第一部分:服务器基本性能数据 (3)一.服务器基本硬件资料: (3)二.CPU 测试 (4)三.内存测试 (4)四.网络性能 (5)五.硬盘性能测试 (6)第二部分,BinaryDB性能测试报告 (9)一,与232机器的性能对比 (10)二,为肖东提供部署量计算的数据 (10)三.附加测试,采用新的压力测试方案进行压力测试 (12)第一部分:服务器基本性能数据一.服务器基本硬件资料:详细系统信息参考everest报告文件二.CPU 测试服务器CPU: 2x QuadCore Intel Xeon E5335,2000 MHz (6 x 333) (两颗4核CPU) SuperPI测试三.内存测试服务器:4096 MB (DDR2—667 Fully Buffered ECC DDR2 SDRAM)四.网络性能五.硬盘性能测试服务器硬盘:SEAGA TE ST3146855SS关于服务器的硬盘,单从测试软件上显示的结果上来看,整体性能应该是高于232原有的SATA硬盘的,SCSI硬盘在随机读取上的优势很明显,打开写入缓存后写入速度比232明显提高(这块硬盘cache 16M,不可能慢的).hd_speed工具测试结果读取速度写入速度HDTune测试结果详细数据如下:hd_speed(由于全盘读写耗时过长,一下测试数据仅为读写磁盘开始的5%的空间取得的数据)写入速度打开写入缓存后第二部分,BinaryDB性能测试报告概要:此次性能测试,和232原测试结果的对比,并不十分理想文件模式下16KB数据进行批量写入的效率仅为232机器的23%磁盘模式新机器效率仅为232机器的61%打开磁盘缓存后文件模式提高了1倍的速度,但效率也仅达到232的50%磁盘模式并没有因为打开磁盘缓存而加快速度,仅达到了232的67%读取效率方面,服务器的速度稍好:文件模式读取效率是232的125%磁盘模式读取效率是232的124%关于同时读写的测试,测试结果如下:(7K,70K,150K来自肖东提供的平均值)对于7K大小的数据文件模式可以达到同时写11次/s,读667次/s磁盘模式每秒同时写20次,读900次对于70K大小的数据文件模式每秒写6次,读357次232上达到过写32次,读167次磁盘模式每秒写20次,读481次232上没有相关历史测试数据对于150K大小的数据文件模式每秒写2.5次,读193次232上达到过写10次,读43次磁盘模式每秒写1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RTSP流媒体服务器性能测试工具①杜 彬1,2,王淑玲2,杨海波1,21(中国科学院研究生院,北京 100049)2(中国科学院沈阳计算技术研究所,沈阳 110171)摘 要:基于RTSP协议的流媒体应用日益增加,如何评测RTSP流媒体服务器的服务性能成为一个亟待解决的实际问题。

本文在分析流媒体业务性能指标的基础上,设计和实现了一种RTSP协议流媒体服务器性能的测试工具。

该工具通过读取测试用例脚本设定参数建立测试场景,利用多线程机制生成多实例伪终端向流媒体服务器发送RTSP信令、接收和解析RTP包,但不解码,最终测定服务器的相关性能指标值。

验证实验表明,该测试工具实用高效,能准确反映被测系统的整体性能。

关键词:RTSP流媒体服务器;性能测试;性能指标;媒体流;测试工具Performance Testing Tool for RTSP-Based Streaming ServerDU Bin1,2, WANG Shu-Ling2, YANG Hai-Bo1,21(Graduate University, Chinese Academy of Sciences, Beijing 100049, China)2(Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang 110171, China)Abstract: The attention on the streaming media applications based on RTSP protocol is growing, so the main issue we address in this paper is how to evaluate the serving performance of RTSP streaming media server. With comprehensive analysis of the performance metrics of streaming applications, we propose an approach to design and implement a Performance Testing Tool for RTSP-based Streaming Server. The tool creates the testing environment by obtaining parameters from the script of test case, utilizes multi-thread mechanism to create multiple pseudo-terminal instances to simulate a certain number of concurrent users for sending RTSP signals, receives media flow, analyzes RTP packets without decoding, and calculates the related performance metric values of the server finally. Experiments validate the efficiency and accuracy of the tool.Keywords: RTSP streaming media server; performance test; performance metrics; media flow; testing tool1引言随着3G移动通信网络在国内的全面启动和发展,各运营商也充分利用3G网络为客户提供丰富的个性化业务,流媒体成为其中重要内容。

开放的RTSP协议被用于多种流媒体应用中,作为流媒体系统中必不可少的环节,各种各样满足用户需要的流媒体服务器应运而生,如何评测RTSP流媒体服务器的服务性能成为一个亟待解决的实际问题。

与传统Web服务不同,流媒体业务传送流媒体文件,强调实时传输、智能控制、具有多播和实况转播①收稿时间:2010-07-02;收到修改稿时间:2010-08-05 等特点。

显然,Web服务器性能测试方法不再适用于流媒体服务器,而国际上各大测试系统提供商对流媒体产品测试的研究还十分有限,相应的测试工具也非常稀少,工业级负载测试工具HP LoadRunnerTM也仅对Real Networks公司的Real协议以及Microsoft公司的MMS协议提供了测试服务,并未真正涉及RTSP 协议;国内至今也没有相应工具的开发。

所以,开发这样一种测试工具对广大RTSP流媒体服务器系统的研发者和流媒体服务提供商都具有十分重要的意义。

本文提出了一种基于RTSP协议流媒体服务器性能测试工具的设计和实现方法,这种测试工具不但可以测试服务器RTSP信令的交互能力,同时更加重点考量流媒体服务器在面对大量用户并发情况下处理媒体流传输的能力。

测试工具生成的多个伪终端实例随机访问流媒体服务器上已正确存在的多个RTSP地址,服务过程更加真实;另外,为了支持任何codec的媒体流传输,工具未进行解码;同时,采用一种专门的传输机制使伪终端只发送和接受RTSP信令,而由特定的IP地址和端口接收RTP媒体流,能更好地支持并发传输,很大程度上缓解了测试工具的压力。

本文首先介绍了相关流媒体协议,并给出性能测试方法和相关性能指标,然后详细阐述测试工具的设计和实现方法,最后利用它对开源流媒体服务器VLC 进行了测试实验。

2流媒体相关协议介绍RTSP(Real Time Streaming Protocol)即实时流协议,是一个用以控制具有实时属性的数据传递的应用层协议,它能够实现音视频数据受控、按需的实时传输,提供播放、停止、快进、快退等控制功能,本身并不传送数据流。

RTP(Real Transport Protocol)协议是实时传输协议RTP与实时传输控制协议RTCP的统称,用于单点和多点之间音视频等多媒体数据的实时传输。

RTP报文中携带了包括数据负载类型(Payload Type)、时间戳标识(TimeStamp)、序列号)Sequence Number)、和同步源标识符(SSRC)等重要字段,运用这些信息进行流同步,同时也为定量分析流媒体服务器性能指标提供了数据来源,它并不保证QoS或可靠性传输;RTCP主要提供数据传输质量的反馈,通过周期性地向服务器发送控制信息包封装发送端和接收端的统计会话信息,根据这些动态统计信息,终端对传输速率等传输参数进行合理的调整和修改,它与RTP协议紧密结合使得终端可以向服务器动态反馈传输信息并监测QoS。

3性能测试方法及度量指标3.1 性能测试方案性能测试主要是测试被测实体在预期用户量或是大用户量情况下系统的稳定性、可靠性和响应时间。

性能测试的方法是针对系统的性能指标制定性能测试方案,执行测试用例,运行测试场景,分析并得出测试结果来验证系统的性能指标是否满足既定值[6]。

对一个RTSP流媒体服务器系统进行测试的目的就是为了把握被测系统响应情况以及并发传输媒体流的能力,可以通过逐渐增加并发流数目的方式观察各个性能参数的变化从而得出服务器的最大服务能力。

3.2 性能指标参数目前,关于流媒体服务器性能评价没有形成固定的标准,本文借鉴Web服务器的性能标准并结合流媒体服务器自身的特点给出反映流媒体服务器性能和各种资源利用情况的参数[4,7]:1) 最大并发流数目:流媒体服务器可以长时间稳定地支持的最大客户端数;2) 聚合输出带宽:服务器向外发送数据流时所能达到的最大发送带宽;3) 请求响应延迟:从用户发出RTSP点播信令开始到接收到第一个RTP数据包之间的时间间隔;4) 服务器端丢包率:服务器丢弃RTP数据包的情况;5) 延迟抖动:两个数据包之间发送与实际到达的时间间隔;6) CPU占用率:随着并发流数目的增加,流媒体服务器提供服务时所占用CPU资源的情况;3.3 典型的流媒体请求与传输过程图1是一个典型的流媒体请求及媒体流传输流程,由终端播放器向流媒体服务器发出播放请求,服务器端返回成功响应,随后服务器向终端发送RTP媒体流,期间终端可以执行暂停、快进、快退、结束会话等控制操作。

图1典型的媒体点播及媒体流传输流程4测试工具的设计与实现4.1 测试工具的访问模式从本质上来说,测试工具首先是一个请求终端的行为,但它能同时建立多路请求,另外需要提供被测系统的性能指标值。

为了更加真实地反映流媒体服务器提供服务的过程,本文采用多线程机制同时生成多个实例的伪终端随机地向流媒体服务器中已正确存在的RTSP访问地址发起请求,而不限制于多个实例只对一个流媒体文件进行访问的模式[6]。

但很显然,这也引入了实际问题。

我们知道服务器的性能状况与媒体文件的码率有直接的关系——码率越大,最大支持的并发流数目越少,丢包、抖动等问题随之加重。

所以如果选择的媒体文件码率相差较大,而伪终端实例又只是随机地对其进行访问,那么测试结果就会存在很大的不确定性。

为了避免这种情况,本文设计的测试工具需要在测试前统一媒体文件的码率与文件播放时间。

另外,测试工具与真正的流媒体终端最大的区别还在于它未进行解码工作。

在一个完整的流媒体系统中,编解码器是重要的组成部分,强大稳定的解码器可以为终端用户提供更好的服务。

但因为这里关注的是流媒体服务器在面对大量并发用户请求下传输媒体流的能力,而不是强调音视频在终端的最后呈现,所以测试工具无需完成解码,那么理论上测试工具可以支持任何codec 的媒体流。

4.2 测试工具工作原理流媒体服务器性能良好与否不仅体现在对信令的响应能力上,而更重要的是它对大量并发媒体流的处理。

但如果流媒体服务器向所有发出请求的伪终端发送真实的媒体流数据,那么伪终端需要具有很强的处理媒体流的能力,在大量的媒体流并发的情况下,仅它自身就会占用大量的系统资源,导致测试过程难以维系,出现分析不准确甚至错误。

所以,本文采用一种新的媒体流传输机制,使伪终端实例只发送和接收与流媒体服务器之间的RTSP交互信令,而真实的媒体流则通过一定的映射方法被发送到专门的地址并得到相应的处理[1]。

测试工具工作原理如图2所示。

图2工作原理4.3 测试工具的体系结构和功能模块测试工具从逻辑上包括三个应用程序,一个是只负责发送和接受RTSP信令的伪终端,一个是接收从服务器端发送过来的RTP数据流的媒体流接收器,它在接收媒体流的同时对RTP包进行解析获取一定的头域信息,另一个是分析计算出上文中列出的各性能参数值的统计分析器。

相关文档
最新文档