RTSP常用命令

合集下载

防火墙rtsp协议处理流程及rtspalg应用

防火墙rtsp协议处理流程及rtspalg应用

防火墙rtsp协议处理流程及rtspalg应用防火墙是用于保护网络安全的一种网络安全设备。

它可以在网络边界处监控和过滤网络流量,以防止恶意流量进入受保护的内部网络。

防火墙通常通过检查网络流量的源和目标地址、端口号和协议类型等信息来决定是否允许通过。

在RTSP协议的处理流程中,防火墙通常会识别RTSP流量,并根据特定的规则来处理。

以下是一般的RTSP协议处理流程:1.流量识别:防火墙会检查传入的网络流量,以确定是否为RTSP协议的流量。

这可以通过检查流量的目标端口号来完成,通常RTSP协议使用的是TCP端口号5542.状态检查:防火墙会根据其内部的状态表来确定当前连接的状态。

如果是一个新的RTSP连接,防火墙将在状态表中创建一个新的记录。

3.访问控制:防火墙将根据预先定义的访问控制规则来决定是否允许这个RTSP连接通过。

这些规则可以根据源和目标地址、端口号、协议类型等进行配置。

4.NAT(网络地址转换)处理:如果防火墙位于内部网络和外部网络之间,它可能需要执行NAT来修改RTSP流量中的IP地址和端口号,以确保正确的数据传输。

5.RTSPALG(应用层网关)应用:RTSPALG是一种特殊的应用层网关,它可以帮助防火墙处理RTSP流量。

RTSPALG可以解析RTSP协议,并根据协议的要求修改网络流量。

例如,RTSPALG可以帮助解决RTSP流量中的NAT问题,并确保正确的端口映射。

6.数据转发:如果RTSP连接被允许通过,并且不需要任何修改或处理,防火墙将允许RTSP流量通过,并将流量转发到目标设备或服务器。

总结起来,防火墙在处理RTSP协议时,首先识别该流量,并根据预定义的访问控制规则来决定是否允许它通过。

如果需要执行NAT,防火墙会在这一步进行地址和端口转换。

然后,防火墙可以借助RTSPALG来解析和修改RTSP协议,以确保正确的数据传输。

最后,防火墙将转发RTSP流量到目标设备或服务器。

RTSP ALG应用可以帮助解决RTSP协议在NAT环境下的一些问题。

Android rtsp实例

Android rtsp实例

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

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

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

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

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

RTSP消息格式:RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同.请求消息:方法URI RTSP版本CR LF消息头CR LF CR LF消息体CR LF其中方法包括OPTION回应中所有的命令,URI是接受方的地址,例如:rtsp://192.168.20.136 RTSP版本一般都是RTSP/1.0.每行后面的CR LF表示回车换行,需要接受端有相应的解析,最后一个消息头需要有两个CR LF回应消息:RTSP版本状态码解释CR LF消息头CR LF CR LF消息体CR LF其中RTSP版本一般都是RTSP/1.0,状态码是一个数值,200表示成功,解释是与状态码对应的文本解释.简单的rtsp交互过程:C表示rtsp客户端,S表示rtsp服务端1.C->S:OPTION request //询问S有哪些方法可用1.S->C:OPTION response //S回应信息中包括提供的所有可用方法2.C->S:DESCRIBE request //要求得到S提供的媒体初始化描述信息2.S->C:DESCRIBE response //S回应媒体初始化描述信息,主要是sdp3.C->S:SETUP request //设置会话的属性,以及传输模式,提醒S建立会话3.S->C:SETUP response //S建立会话,返回会话标识符,以及会话相关信息4.C->S:PLAY request //C请求播放4.S->C:PLAY response //S回应该请求的信息S->C:发送流媒体数据5.C->S:TEARDOWN request //C请求关闭会话5.S->C:TEARDOWN response //S回应该请求上述的过程是标准的、友好的rtsp流程,但实际的需求中并不一定按部就班来。

RTSP协议详解中文版

RTSP协议详解中文版

RTSP协议详解中文版RTSP(Real Time Streaming Protocol)是一种用于控制实时流媒体的应用层协议,用于在客户端和服务器之间进行媒体资源的传输和控制。

它工作在TCP或UDP上,并且可以与各种流媒体服务器和客户端软件兼容。

RTSP协议的通信模型是基于客户端和服务器之间的请求和响应。

客户端通过发送请求来向服务器发送控制指令,服务器则通过发送响应来告知客户端请求的结果。

请求和响应是基于文本的,并且使用类似于HTTP的格式。

RTSP协议的请求由方法、URL和协议版本组成。

常见的请求方法包括DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN等。

DESCRIBE方法用于获取媒体资源的描述信息,SETUP方法用于建立与服务器的连接,PLAY方法用于开始播放,PAUSE方法用于暂停播放,TEARDOWN方法用于关闭连接。

RTSP协议的响应由状态码、状态描述和协议版本组成。

常见的状态码包括200 OK,表示请求成功;401 Unauthorized,表示未经授权;404 Not Found,表示资源不存在等。

状态码和状态描述用于告知客户端请求的结果。

RTSP协议还支持使用SDP(Session Description Protocol)来描述媒体资源。

SDP是一种用于描述会话信息的协议,它可以描述媒体资源的类型、媒体格式、传输地址等。

客户端可以使用DESCRIBE方法获取媒体资源的SDP描述,从而可以解析和播放媒体资源。

RTSP协议的优点包括灵活性和互操作性。

由于RTSP协议本身只负责控制,而不直接传输媒体数据,因此可以适用于各种不同的流媒体传输协议,如RTP、RTCP、RTMP等。

同时,RTSP协议还可以与其他媒体相关的协议配合使用,如RTSP over HTTP、RTSP over SSL等。

总结起来,RTSP协议是一种用于实时流媒体控制的协议,它可以实现实时流媒体的连续控制和广泛的交互性。

防火墙RTSP协议处理流程及RTSP ALG应用

防火墙RTSP协议处理流程及RTSP ALG应用

一.RTSP协议概述RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。

RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。

尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。

媒体数据的传送可通过RTP/RTCP等协议来完成。

二.一次基本的RTSP协议连接过程1.客户端与服务器建立TCP三次握手连接。

2.客户端连接到流服务器并发送一个RTSP描述命令(OPTIONS),询问S有哪些方法可用(包括DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、OPTIONS、ANNOUNCE、RECORD等)。

3.客户端继续发送一个RTSP描述命令(DESCRIBE),要求得到S提供的媒体描述信息,流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。

4.客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。

5.流媒体连接建立完成后,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。

6.在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。

最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话。

三、简单的RTSP消息交互过程C表示RTSP客户端,S表示RTSP服务端1.第一步:查询服务器端可用方法1.C->S:OPTION request //询问S有哪些方法可用1.S->C:OPTION response //S回应信息的public头字段中包括提供的所有可用方法2.第二步:得到媒体描述信息2.C->S:DESCRIBE request //要求得到S提供的媒体描述信息2.S->C:DESCRIBE response //S回应媒体描述信息,一般是sdp信息3.第三步:建立RTSP会话3.C->S:SETUP request //通过Transport头字段列出可接受的传输选项,请求S建立会话3.S->C:SETUP response //S建立会话,通过Transport头字段返回选择的具体转输选项,并返回建立的Session ID;4.第四步:请求开始传送数据4.C->S:PLAY request //C请求S开始发送数据4.S->C:PLAY response //S回应该请求的信息5.第五步:数据传送播放中S->C:发送流媒体数据 // 通过RTP协议传送数据6.第六步:关闭会话,退出6.C->S:TEARDOWN request //C请求关闭会话6.S->C:TEARDOWN response //S回应该请求上述的过程只是标准的、友好的rtsp流程,但实际的需求中并不一定按此过程。

RTSP协议详解中文版

RTSP协议详解中文版

RTSP协议详解中文版RTSP(Real Time Streaming Protocol)是一种用于控制媒体流传输的应用层协议。

它在传输数据之前,通过建立控制信道,协商会话参数,完成媒体流的控制和管理。

本文将详细介绍RTSP协议的各个方面。

RTSP协议中,客户端发送请求,服务器回复响应,请求和响应的消息格式基于文本,并且可以使用多种传输协议(如TCP或UDP)进行通信。

RTSP协议定义了丰富的方法(Method),以便客户端可以控制会话的各个方面。

常用的方法包括OPTIONS,DESCRIBE,SETUP,PLAY和TEARDOWN。

OPTIONS方法用于查询服务器支持的方法,客户端可以通过此方法获取服务器的能力信息。

DESCRIBE方法用于获取媒体会话的描述信息,客户端可以通过此方法获得媒体流的信息,例如编码格式和媒体地址。

SETUP方法用于建立媒体流的传输通道,客户端可以通过此方法告知服务器自己的传输能力,并请求服务器向其指定的地址发送数据。

服务器可以根据实际情况来进行响应,例如选择合适的传输协议(如TCP或UDP)以及传输端口。

PLAY方法用于开始播放媒体流,服务器会将实时传输协议(RTP)数据发送给客户端。

客户端可以通过TEARDOWN方法来终止会话,服务器在接收到TEARDOWN请求后会释放资源并关闭连接。

总结起来,RTSP协议是一种用于控制媒体流传输的应用层协议。

它使用文本消息格式,在客户端和服务器之间建立控制信道,并通过方法来实现会话管理和媒体流的控制。

RTSP协议具有可扩展性和灵活性,可以与其他协议结合使用,适用于不同的应用场景。

rtsp协议详解

rtsp协议详解

rtsp协议详解RTSP(Real Time Streaming Protocol)是一种用于控制多媒体数据流传输的网络协议。

它是一种应用层协议,通常用于流媒体服务器和客户端之间的通信,以便实现实时音频和视频的传输。

RTSP协议是由IETF(Internet Engineering Task Force)制定的,它的设计目的是为了支持实时多媒体会话,如实时音频和视频的传输。

RTSP协议的工作原理是通过建立和维护一个会话来控制多媒体数据流的传输。

它使用客户端-服务器模型,客户端和服务器之间通过RTSP协议进行通信。

在建立会话时,客户端向服务器发送RTSP请求,服务器响应这些请求,并建立一个会话来传输多媒体数据。

在会话期间,客户端可以向服务器发送控制命令,如播放、暂停、停止等,以控制多媒体数据流的传输。

RTSP协议使用的是TCP或UDP协议进行数据传输。

在建立会话时,客户端和服务器之间会协商使用的传输协议和端口号。

一般情况下,实时多媒体数据的传输会使用UDP协议,而控制命令的传输会使用TCP协议。

这样可以保证实时多媒体数据的传输稳定性和实时性。

RTSP协议的消息格式包括请求消息和响应消息。

请求消息由客户端发送给服务器,用于请求建立会话或发送控制命令;响应消息由服务器发送给客户端,用于响应客户端的请求。

请求消息和响应消息都包括起始行、消息头和消息体。

起始行包括请求行或状态行,消息头包括一些控制信息,消息体包括一些实体数据。

RTSP协议支持多种控制命令,如PLAY、PAUSE、TEARDOWN等。

这些控制命令可以用于控制多媒体数据流的传输,如开始播放、暂停播放、停止播放等。

这样可以让客户端和服务器之间实现灵活的控制和交互。

总的来说,RTSP协议是一种用于控制实时多媒体数据流传输的网络协议。

它通过建立和维护会话来实现多媒体数据的传输和控制,支持多种控制命令,可以实现客户端和服务器之间的灵活交互。

在实际应用中,RTSP协议被广泛应用于流媒体服务器和客户端之间的通信,为实时音频和视频的传输提供了有效的支持。

RTSP简介

RTSP简介

目录1概要 (2)2流媒体基本业务组网图 (2)3RTSP 介绍 (3)3.1RTSP是什么? (3)3.2RTSP URL的语法结构 (3)3.3RTSP 消息 (3)3.3.1消息 (3)3.3.2请求消息 (3)3.3.3响应消息 (5)3.4信令 (6)3.4.1OPTIONS (6)3.4.2DESCRIBE (7)3.4.3SETUP (8)3.4.4PLAY (8)3.4.5PAUSE (8)3.4.6TEARDOWN (9)3.5Header Field 解析 (9)3.5.1Accept (11)3.5.2Cseq (11)3.5.3Range (11)3.5.4RTP-Info (11)3.5.5Session (12)3.5.6Transport (12)3.5.7User-Agent (12)4移动流媒体与RTSP (13)4.1点播流程 (13)4.2SDP (15)4.3数据传送 (16)4.4消息流程 (16)表1:信令简要描述 (6)表2:RTSP头字段简述 (11)图1 流媒体业务基本组网图 (2)图2 RTSP消息交互 (14)图3 协议栈的简单描述 (16)3GP 3GPP file formatCODEC COder / DECoderIP Internet ProtocolMP4 MPEG-4 file formatPSS Packet-switched Streaming ServiceRFC IETF Request For CommentsRTCP RTP Control ProtocolRTP Real-time Transport ProtocolRTSP Real-Time Streaming ProtocolSDP Session Description ProtocolTCP Transport Control ProtocolUDP User Datagram ProtocolURI Universal Resource IdentifierWAP Wireless Application Protocol概要RTSP(Real Time Streaming Protocol)实时流协议:一种流媒体控制协议,可对流媒体进行暂停、快进、快倒等操作。

RTSP协议开发接口说明(2012)

RTSP协议开发接口说明(2012)
CSeq: 5 Session: 1389957320 User-Agent: NKPlayer S-C:RTSP/1.0 200 OK CSeq: 5 Session: 1389957320
以上方法都是交互过程中最为常用的。
二.几种传输方式
1.RTP OVER UDP
(1)用户在 SETUP 阶段发送一个 SETUP 命令,trackID=1。只能取得视频。 (2)用户在 SETUP 阶段发送一个 SETUP 命令,trackID=2。只能取得语音。 (3)用户在 SETUP 阶段发送两个 SETUP 命令,trackID=1,trackID=2。能够取得视频和语 音。
Transport: RTP/AVP;unicast;client_port=1094-1095;server_port=12028-12029
RTSP PLAY,该命令为客户端启动数据传输,需要并产生下列头部字段:
Range
规定播放的范围。因为只支持实时流,所以只有开始时间没有结 束时间。
RTP-Info 关于 RTP 流的信息,包含下一个 RTP 序列号 C-S:PLAY rtsp://192.0.1.100/Streaming/Channels/101 RTSP/1.0
如果在会话的头部包含 timeout 参数, kept alive 超时后,会话将自动关闭。Kept alive 是通过 RTSP_GET_PARAMETER,RTSP_SET_PARAMETER,RTSP_OPTIONS 来实现的实 现的。
C-S:SETUP rtsp://192.0.1.100/Streaming/Channels/101/trackID=1 RTSP/1.0
1389957320
Range: npt=nowRTP-Info: url=trackID=1;seq=29626 //seq 是 rtp 包中的信息

防火墙RTSP协议处理流程及RTSPALG应用

防火墙RTSP协议处理流程及RTSPALG应用

防火墙RTSP协议处理流程及RTSPALG应用RTSP(实时流传输协议)是一种用于控制多媒体服务器和多媒体客户端之间传输流媒体数据的协议。

防火墙在网络中扮演着重要的角色,用于保护内部网络免受外部网络的威胁。

在处理RTSP协议时,防火墙需要采取适当的措施来确保有效的传输,并保护网络免受潜在的攻击。

防火墙处理RTSP协议的一般流程如下:1.网络请求过滤:防火墙首先检查RTSP协议的网络请求是否符合特定的规则和访问策略。

例如,检查源IP地址、目标IP地址、端口等信息。

2.协议解析:防火墙解析RTSP协议的请求消息和响应消息,包括请求行、头部信息、实体等。

这有助于检查和验证协议的有效性,并验证请求是否与特定的安全策略相符。

3.内容过滤:防火墙可能会对RTSP的内容进行过滤,以确保不传输非法或有害的媒体内容。

这可以通过使用黑名单、URL过滤、关键词过滤等技术来实现。

4.应用层网关(ALG):RTSPALG是一种特殊的应用层网关,用于在防火墙上进行RTSP流媒体请求和响应的解析和转发。

它可以维护会话状态,跟踪RTSP流媒体通信,并支持NAT遍历。

5.NAT遍历:RTSPALG可以帮助绕过网络地址转换(NAT)设备,让位于不同私有网络的客户端和服务器直接通信。

它会解析RTSP的会话描述协议(SDP)消息,并对其中的IP地址和端口进行修改,以确保数据在经过NAT设备时能够正确路由。

6.安全检查:防火墙会对RTSP协议进行一些安全检查,以防止潜在的攻击。

例如,检查传输过程中是否存在恶意代码、封堵异常的RTSP请求等。

7.日志记录和审计:防火墙会记录与RTSP协议相关的事件和流量信息,并对其进行审计。

这有助于安全管理员了解网络活动情况,并进行后续的安全分析和故障排查。

RTSPALG的应用主要是为了支持RTSP流媒体的会话建立和数据传输过程中的网络地址转换。

1.解决访问控制问题:RTSPALG可以识别并控制RTSP请求和响应的访问权限,确保只有经过授权的用户才能访问流媒体服务器。

RTSP协议详解

RTSP协议详解

RTSP协议详解RTSP(Real-Time Streaming Protocol)是一种用于控制流媒体服务器和客户端之间数据传输的协议。

它允许用户在收到流媒体数据之前与服务器进行交互,选择想要接收的媒体流,控制播放速度和播放模式等。

RTSP协议使用客户端/服务器模型,其中客户端发送请求到服务器,服务器则响应这些请求并传输媒体数据。

RTSP协议仅用于控制,而不负责传输媒体数据本身,这一任务通常由RTP(Real-Time Transport Protocol)来完成。

1.建立连接:客户端与服务器建立TCP连接,并使用RTSP协议进行通信。

2.描述会话:客户端发送一个通信请求,请求服务器提供会话的相关信息,比如媒体描述、媒体流地址等。

3.选择媒体流:客户端从服务器提供的媒体描述中选择一个或多个希望接收的媒体流。

4.控制媒体会话:客户端使用RTSP协议发送控制命令给服务器,比如播放、暂停、停止、快进和回放等。

5.播放媒体:服务器向客户端传输所选的媒体流。

6.关闭连接:客户端发送关闭请求给服务器,结束RTSP会话。

1.节约带宽:RTSP协议允许客户端仅接收媒体流中的特定部分,从而节约带宽和提高传输效率。

2.实时传输:RTSP协议支持实时传输媒体流,适用于需要实时展示的场景,比如直播和视频会议等。

3.支持多媒体:RTSP协议可以同时传输音频、视频和其他媒体类型,使得用户可以选择自己感兴趣的内容。

4.内容交互:RTSP协议支持客户端和服务器之间的交互,如选择不同的流、调整播放速度和播放模式等。

总结来说,RTSP协议提供了一种灵活的方式来控制流媒体服务器和客户端之间的数据传输。

它可以在不同平台和设备之间实现兼容性,并支持对媒体流进行精细控制和交互。

这使得RTSP成为流媒体传输的重要协议之一,广泛应用于视频直播、会议系统和视频监控等领域。

【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)建立并控制一个或几个时间同步的连续流媒体,比如音频或视频。

神州数码交换机路由器常用命令操作

神州数码交换机路由器常用命令操作

神州数码交换机路由器常用命令操作神州数码交换机路由器常用命令操作1:登录与退出命令1.1 登录命令在使用神州数码交换机路由器之前,需要登录到设备上才能进行操作。

登录命令通常为:```login username password```其中,username为登录用户名,password为登录密码。

1.2 退出命令当操作完成后,需要退出登录,以防止未经授权的访问。

退出命令通常为:```logout```2:查看与配置接口2.1 查看接口命令可以使用以下命令来查看交换机或路由器上的接口信息: ```show interfaces```该命令将会显示接口的名称、状态、IP地址等信息。

2.2 配置接口命令如果需要配置接口的IP地址,可以使用以下命令: ```interface interface_nameip address ip_address mask```其中,interface_name为接口名称,ip_address和mask为要配置的IP地址和子网掩码。

3:路由配置命令3.1 静态路由配置命令使用以下命令可以配置静态路由:ip route network_address mask next_hop```其中,network_address为目标网络地址,mask为子网掩码,next_hop为下一跳IP地址。

3.2 动态路由配置命令如果需要配置动态路由,可以使用以下命令: ```router ospfnetwork network_address mask area area_id```其中,network_address为本地网络地址,mask为子网掩码,area_id为区域ID。

4:保存与加载配置命令4.1 保存配置命令在对交换机或路由器进行配置后,应该保存配置以防止丢失。

保存配置的命令通常为:write```4.2 加载配置命令如果需要加载已保存的配置,可以使用以下命令:```reload```5:其他常用命令5.1 查看系统信息命令```show version```该命令将显示交换机或路由器的版本信息、启动时间等。

神州数码路由器及交换机配置命令

神州数码路由器及交换机配置命令

神州数码路由器及交换机配置命令简介神州数码是一个中国的网络设备制造商。

它提供了多种路由器和交换机产品,包括SOHO、企业和运营商级别的产品。

在这篇文档中,我们将介绍对神州数码路由器及交换机进行配置的基本命令。

这些命令可用于启用和禁用端口、配置具有VLAN的端口以及管理路由和静态路由等。

命令列表所有设备通用命令以下是在所有神州数码路由器和交换机上都可以执行的通用命令。

1. 基本配置enable // 进入特权模式configure terminal // 进入全局配置模式hostname <name> // 配置设备名称banner motd #<message># // 设置登录提示信息interface <interface> // 进入具体端口的配置界面no shutdown // 开启端口shutdown // 关闭端口exit // 退出当前模式show running-config // 显示当前配置write memory // 将当前配置保存到FLASH文件系统中,以便重启后仍然存在2. VLAN 配置vlan <id> // 进入 VLAN 配置模式name <name> // 配置 VLAN 名称exit // 退出 VLAN 配置模式interface <interface> // 进入具体端口的配置界面switchport access vlan <id> // 配置端口所在VLAN号,使端口成为 ACCESS 端口switchport mode trunk // 配置端口为 TRUNK 端口,可同时传输多个 VLA N3. 静态路由ip route <destination_network> <destination_subnet_mask> <next_hop_a ddress> // 添加静态路由show ip route // 显示当前路由表某些设备具有的高级命令以下命令在某些神州数码路由器和交换机上可用。

神州数码交换机的端口操作命令

神州数码交换机的端口操作命令

神州数码交换机的端口操作命令本文将介绍神州数码交换机常用的端口操作命令及其用法。

神州数码交换机是一种常用的网络设备,用于连接各个网络节点,实现网络通信。

了解并掌握交换机的端口操作命令是网络管理和故障排除的重要基础。

1. 查看端口状态要查看端口的状态,可以使用以下命令:show interface brief该命令会列出交换机上所有端口的基本信息,包括端口号、速率、协议等。

通过查看端口的状态,可以判断端口是否正常工作,是否接入了其他设备。

2. 配置端口速率和双工模式可以使用以下命令来配置交换机端口的速率和双工模式:interface [端口号]speed [速率]duplex [模式]其中,[端口号]为要配置的端口号,[速率]为端口的速率(如10、100、1000等),[模式]为端口的双工模式(如半双工、全双工等)。

例如,要将端口1配置为100Mbps的全双工模式,可以使用以下命令:interface 1speed 100duplex full3. 配置端口的VLANVLAN(Virtual Local Area Network)是一种逻辑上划分网络的技术,可以将一个物理网络划分成多个逻辑网络。

神州数码交换机可以通过以下命令为端口配置所属的VLAN:interface [端口号]switchport mode accessswitchport access vlan [VLAN号]其中,[端口号]为要配置的端口号,[VLAN号]为要配置的VLAN号。

例如,将端口1配置为属于VLAN 10的端口,可以使用以下命令:interface 1switchport mode accessswitchport access vlan 104. 配置端口的安全性可以使用以下命令为端口配置安全性:interface [端口号]switchport port-securityswitchport port-security maximum [最大允许MAC地址数量]switchport port-security violation [违例处理方式]其中,[端口号]为要配置的端口号,[最大允许MAC地址数量]为该端口上允许学习的MAC地址数量的最大值,[违例处理方式]为端口出现违例时的处理方式(如关闭端口、报警等)。

rtsp协议详解

rtsp协议详解

RTSP协议详解RTSP(Real-Time Streaming Protocol)是一种用于实时传输音视频数据的应用层协议。

它能够提供对音视频数据的实时控制和传输,广泛应用于视频会议、流媒体服务、监控系统等领域。

本文将详细介绍RTSP协议的原理和主要特点。

1. RTSP协议概述RTSP协议是由IETF(Internet Engineering Task Force)制定的一种实时流传输协议,它建立在TCP或UDP协议之上,用于控制实时流媒体会话。

RTSP协议允许客户端发送命令来控制服务器上的实时流媒体,如播放、暂停、停止等操作。

2. RTSP协议工作原理RTSP协议通过建立控制连接和数据连接来实现对实时流媒体的控制和传输。

控制连接使用TCP协议建立,用于发送RTSP命令和接收响应。

数据连接可以使用TCP或UDP协议建立,用于传输音视频数据。

客户端和服务器之间的通信基于请求/响应模型。

客户端发送RTSP请求给服务器,服务器根据请求执行相应的操作,并返回响应给客户端。

RTSP请求包括方法、URL、协议版本和头部字段等信息,用于描述客户端所需的操作。

3. RTSP协议主要特点3.1 基于文本的协议RTSP协议使用文本格式表示请求和响应,易于阅读和调试。

请求和响应以ASCII码表示,每个字段以回车和换行符结束。

这种特点使得RTSP协议能够被开发人员快速理解和实现。

3.2 支持实时流媒体控制RTSP协议允许客户端控制服务器上的实时流媒体,如播放、暂停、停止等操作。

客户端可以发送SETUP命令来请求建立数据连接,然后通过PLAY命令来开始播放实时流媒体。

此外,RTSP还支持回放、录制和广播等功能。

3.3 支持多种传输协议RTSP协议可以运行在TCP或UDP协议之上。

对于实时性要求较高的应用场景,可以选择使用UDP协议传输数据,以减少延迟。

而对于可靠性要求较高的应用场景,可以选择使用TCP协议传输数据,以保证数据的完整性和可靠性。

AXIS安讯士网络摄像头RTSP读取视频流信息

AXIS安讯士网络摄像头RTSP读取视频流信息

本人现在在做有关AXIS方面的应用,昨天花了一天时间终于读到了视频流数据,虽然是AXIS产品开发,但是我相信RTSP部分的内容对初学者应该会有一些帮助,可能会有错误的地方,希望大家更正。

首先说的是,如果你能够从socket方面理解windows网络编程的话,那么无论RTSP还是RTP,或者可以说大部分网络协议,从本质上都是一样的,都是基于套接字socket的编程。

这样的话RTSP就是轻车熟路了。

RTSP协议实现方式实时流协议(RTSP)是应用层协议,控制实时数据的传送。

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

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

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

RTSP和HTTP非常相似,在开发RTSP客户端程序时有几种方式可以选择:1. RTP/RTSP/TCP 采用RTSP通过TCP协议连接服务器,控制媒体流信息传输,然后通过此连接接收媒体流信息。

2. RTP/RTSP/HTTP 通过HTTP协议携带RTS控制信息和RTP数据信息实现流媒体的传输,这种方式有一个好处就是可以顺利的通过防火墙。

3. RTP/RTSP/UDP 采用RTSP通过TCP协议连接服务器,控制媒体流信息传输,并告知客户端UDP接收端口,然后通过UDP接收媒体流信息。

各个服务器支持的方式可能不一样,大家要先准确知道服务器支持什么方式。

RTSP发送指令格式:<CRLF>是回车换行("\r\n”)的意思COMMAND rtsp://<servername>/axis-media/media.amp[?<parameter>=<value>[&<parameter>=<value>...]] RTSP/1.0<CRLF>Headerfield1: val1<CRLF>Headerfield2: val2<CRLF>...<CRLF>[Body]第一行包含有命令、协议、服务器地址、流媒体参数(编码方式、分辨率等)。

rtsp 交互流程

rtsp 交互流程

rtsp 交互流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!RTSP(Real Time Streaming Protocol)是一种实时流传输协议,用于控制多媒体数据的实时传输。

常见监控摄像机RTSP地址

常见监控摄像机RTSP地址

常见监控摄像机RTSP地址海康威视格式1⽰例 主码流:rtsp://admin:12345@192.168.1.64:554/Streaming/Channels/101 ⼦码流:rtsp://admin:12345@192.168.1.64:554/Streaming/Channels/102 第三码流:rtsp://admin:12345@192.168.1.64:554/Streaming/Channels/103格式2⽰例(旧) rtsp://admin:12345@192.168.1.64:554/ch1/main/av_stream⼤华⽰例 rtsp://admin:12345@192.168.1.64:554/cam/realmonitor?channel=1&subtype=0RTSP地址:rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0说明:username: ⽤户名,例如admin。

password: 密码,例如12345。

ip: 为设备IP。

例如 10.7.8.122。

port: 端⼝号默认为554,若为默认可不填写。

channel: 通道号,起始为1。

例如通道2,则为channel=2。

subtype: 码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。

例如,请求某设备的通道2的辅码流,Url如下rtsp://admin:admin@10.12.4.84:554/cam/realmonitor?channel=2&subtype=1宇视⽰例 rtsp://admin:admin@192.168.1.64/media/video1/multicast默认IP地址: 192.168.0.13/DHCP 默认⽤户名 admin 和默认密码 123456端⼝:HTTP 80/RTSP 554/HTTPS 110(443)/onvif端⼝ 80RTSP地址:rtsp://⽤户名:密码@ip:端⼝号/video1 (或者2 / 3) 123对应3个码流华为主码流 rtsp://admin:HuaWei123@192.168.0.128/LiveMedia/ch1/Media1⼦码流 rtsp://admin:HuaWei123@192.168.0.128/LiveMedia/ch1/Media2巨龙/JVTRTSP地址:主码流地址:rtsp://IP地址:554/av0_0次码流地址:rtsp://IP地址:554/av0_1V380RTSP地址:主码流rtsp://ip//live/ch00_1⼦码流rtsp://ip//live/ch00_0天地伟业RTSP地址:rtsp://192.168.1.2:554/1/1雄迈/巨峰rtsp://IP:554/user=admin&password=&channel=1&stream=0.sdp?real_streamchannel=通道 stream=码流 0主码 1次码天视通RTSP地址主码流地址:rtsp://192.168.0.123:554/mpeg4⼦码流地址 rtsp://192.168.0.123:554/mpeg4cif需要⼊密码的地址主码流 rtsp://admin:123456@192.168.0.123:554/mpeg4⼦码流 rtsp://admin:123456@192.168.0.123:554/mpeg4cif中维/尚维RTSP地址:rtsp://0.0.0.0:8554/live1.264(次码流)rtsp://0.0.0.0:8554/live0.264 (主码流)九安RTSP地址:rtsp://IP:port(website port)/ch0_0.264(主码流)rtsp://IP:port(website port)/ch0_1.264(⼦码流)技威/YOOSEERTSP地址:主码流:rtsp://IP:554/onvif1⼦码流:rtsp://IP:554/onvif2。

rtsp服务器以及rtsp推流拉流转发

rtsp服务器以及rtsp推流拉流转发

rtsp服务器以及rtsp推流拉流转发rtsp服务器1、live5552、ZLMediaKit3、ffserver4、gst-rtsp-server5、feng6、rtspd1)live555 proxyServerlive555库⽂件编译源码live/proxyServer/live555ProxyServer.cpp编译g++ live555ProxyServer.cpp -o live555ProxyServer \-I $(pwd)/liveMedia/include ./liveMedia/libliveMedia.a \-I $(pwd)/groupsock/include ./groupsock/libgroupsock.a \-I $(pwd)/BasicUsageEnvironment/include ./BasicUsageEnvironment/libBasicUsageEnvironment.a \-I $(pwd)/UsageEnvironment/include ./UsageEnvironment/libUsageEnvironment.a \运⾏./live555ProxyServerrtsp://admin:************.23.142:554/H.264/ch1/main/av_streamrtsp://172.16.23.66:554/h264major rtsp://172.16.23.66:554/h264minor./live555ProxyServerrtsp://admin:************.23.142:554/H.264/ch1/main/av_streamLIVE555 Proxy Server(LIVE555 Streaming Media library version 2019.06.28; licensed under the GNU LGPL)Created new TCP socket 4 for connectionRTSPstream,proxyingthestream"rtsp://admin:************.23.142:554/H.264/ch1/main/av_stream"Play this stream using the URL: rtsp://172.16.23.140:8554/proxyStream(We use port 8000 for optional RTSP-over-HTTP tunneling.)2)rtsp2rtmprtsp stream to rtmpHow to use:cd demogo build demo.go./demo-rtspUrl"rtsp://admin:***********.51.13/H264?ch=1&subtype=0"-rtmpUrl"rtmp://10.1.51.20:1935/myapp/cv"3)ffmpeg推送rtsp码流到rtmp服务器摄像头HIKVISION DS-2CD23RZadmin 12345rtsp://admin:************.23.142:554/H.264/ch1/main/av_stream转推送ffmpeg-i"rtsp://admin:************.23.142:554/H.264/ch1/main/av_stream"-fflv-r25-s1920x1080-an"rtmp://182.61.45.149:1935/live/movie"ffmpeg-rtsp_transporttcp-re-i"rtsp://admin:************.23.142:554/H.264/ch1/main/av_stream"-vcodeclibx264-presetultrafast-acodec aac -f flv rtmp://182.61.45.149:1935/live/movie播放ffplay rtmp://182.61.45.149:1935/live/movie4)还有srs Ingest模块我从2014年到如今(2019年7⽉30⽇)都没⽤起来,有谁验证过的请告诉我⼀声。

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

二. 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, RECOR D2.2 DESCRIBEC->S: DESCRIBE request //要求得到S提供的媒体初始化描述信息S->C: DESCRIBE response //S回应媒体初始化描述信息,主要是sdp使用举例:客户端到服务端:DESCRIBE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07U gn.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/8jH5QPU5GWS0 7Ugn.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=000001b008000001b509000001000000012000844 0fa282c2090a31f; 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/8jH5QPU5GWS07Ugn.s dp/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/8jH5QPU5GWS07Ugn.sd p 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/8jH5QPU5GWS 07Ugn.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/8jH5QPU5GWS07Ugn.s dp/ 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/8jH5QPU5GWS0 7Ugn.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, tmp.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("Cseq: ");sb.append(seq++);sb.append("\r\n");sb.append("User-Agent: RealMedia Player HelixDNAClient/10.0.0.11279 (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());send(sb.toString().getBytes());}private void doSetup() {StringBuilder sb = new StringBuilder();sb.append("SETUP ");sb.append(this.address);sb.append("/");sb.append(VERSION);sb.append("Cseq: ");sb.append(seq++);sb.append("\r\n");sb.append("Transport: RTP/AVP;UNICAST;client_port=16264-16265;mode=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");System.out.println(sb.toString());send(sb.toString().getBytes());}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/8jH5QPU5GWS07U gn.sdp");client.start();} catch (Exception e) {e.printStackTrace();}}}其中:rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.s dp为我在网上找到的一个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, RECOR DDESCRIBE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07U gn.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/8jH5QPU5GWS0 7Ugn.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=000001b008000001b509000001000000012000844 0fa282c2090a31f; 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/8jH5QPU5GWS07Ugn.s dp/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/8jH5QPU5GWS07Ugn.sd p 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/8jH5QPU5GWS 07Ugn.sdp/trackID=1;seq=0;rtptime=0PAUSE rtsp://218.207.101.236:554/mobile/3/67A451E937422331/8jH5QPU5GWS07Ugn.s dp/ 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/8jH5QPU5GWS0 7Ugn.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端口关闭成功。

相关文档
最新文档