AXIS安讯士网络摄像头RTSP读取视频流信息_第1页
AXIS安讯士网络摄像头RTSP读取视频流信息_第2页
AXIS安讯士网络摄像头RTSP读取视频流信息_第3页
AXIS安讯士网络摄像头RTSP读取视频流信息_第4页
AXIS安讯士网络摄像头RTSP读取视频流信息_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本人现在在做有关AXIS方面的应用,昨天花了一天时间终于读到了视频流数据,虽然是AXIS产品开发,但是我相信RTSP部分的内容对初学者应该会有一些帮助,可能会有错误的地方,希望大家更正。首先说的是,如果你能够从socket方面理解windows网络编程的话,那么无论RTSP还是RTP,或者可以说大部分网络协议,从本质上都是一样的,都是基于套接字socket的编程。这样的话RTSP就是轻车熟路了。RTSP协议实现方式实时流协议(RTSP)是应用层协议,控制实时数据的传送。RTSP提供了一个可扩展框架,使受控、按需传输实时数据(如音频与视频)成为可能。数据源包括现场数据与存储在剪辑中的数据。本协议旨在于控制多个数据发送会话,提供了一种选择传送途径(如UDP、组播UDP与TCP)的方法,并提供了一种选择基于RTP(RFC1889)的传送机制的方法。RTSP和HTTP非常相似,在开发RTSP客户端程序时有几种方式可以选择:RTP/RTSP/TCP采用RTSP通过TCP协议连接服务器,控制媒体流信息传输,然后通过此连接接收媒体流信息。RTP/RTSP/HTTP通过HTTP协议携带RTS控制信息和RTP数据信息实现流媒体的传输,这种方式有一个好处就是可以顺利的通过防火墙。RTP/RTSP/UDP采用RTSP通过TCP协议连接服务器,控制媒体流信息传输,并告知客户端UDP接收端口,然后通过UDP接收媒体流信息。各个服务器支持的方式可能不一样,大家要先准确知道服务器支持什么方式。RTSP发送指令格式:<CRLF>是回车换行("\r\n”的意思COMMANDrtsp://<servername>/axis-media/media.amp[?<parameter>=<value>[&<parameter>=<value>...]]RTSP/1.0<CRLF>Headerfield1:val1<CRLF>Headerfield2:val2<CRLF>...<CRLF>[Body]第一行包含有命令、协议、服务器地址、流媒体参数(编码方式、分辨率等)。接着是头信息,这和HTTP非常相似,AXISRTSP常用信息头如下:Authorization:Authorizationinformationfromtheclient.CSeq:Requestsequencenumber.Session:Sessionidentifier(returnedbyserverinSETUPresponse).Content-Length:Lengthofcontent.Content-Type:Themediatypeofthecontent.User-Agent:Informationabouttheclientthatinitiatestherequest.Body就是要发送的信息实体。RTSP返回信息格式:RTSP/1.0<StatusCode><ReasonPhrase><CRLF>Headerfield3:val3<CRLF>Headerfield4:val4<CRLF><CRLF>[Body]RTSP编程RTSP编程从原理上很简单,以方式1为例介绍RTSP编程的主要步骤:建立WinSock:SOCKETsock(AF_INET,SOCK_STREAM,0);与RTSP服务器建立TCP连接:connect(sock,server_addr,sizeof(server_addr));发送RTSP指令,这一部分也是整个程序和其他协议不一样的部分:RTSP定义了很多方法,这里介绍AXIS开发中常用的几个:OPTIONS,DISCRIBE,SETUP,PLAY,PAUSE,TEARDOWN.OPTIONS指令:用于得到RTSP服务器支持的指令发送信息包如下:OPTIONSrtsp://<servername>/axis-media/media.ampRTSP/1.0CSeq:1User-Agent:AxisAMCAuthorization:Basiccm9vdDpwYXNz其中Authorization为身份验证信息,采用base64编码返回信息如下:RTSP/1.0200OKCSeq:1Public:DESCRIBE,GET_PARAMETER,PAUSE,PLAY,SETUP,SET_PARAMETER,TEARDOWNDate:Sat,16Jun200112:38:56GMTDESCRIBE指令:得到媒体流的一个SDP(SessionDescriptionProtocol)描述DESCRIBErtsp://<servername>/axis-media/media.amp?videocodec=h264&resolution=640x480RTSP/1.0CSeq:2Accept:application/sdpUser-Agent:AxisMACAuthorization:Basiccm9vdDpwYXNz返回信息如下:RTSP/1.0200OKCSeq:2Content-Type:application/sdpContent-Base:rtsp://54:554/axis-media/media.amp/Date:Sat,16Jun200112:38:56GMTContent-Length:570v=0o=-992695136526595992695136526595INIP454s=MediaPresentatione=NONEc=INIP4b=AS:50000t=00a=control:rtsp://54:554/axis-media/media.amp?videocodec=h264&resolution=640x480a=range:npt=0.000000-m=video0RTP/AVP96b=AS:50000a=framerate:25.0a=transform:1,0,0;0,1,0;0,0,1a=control:rtsp://54:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=640x480a=rtpmap:96H264/90000a=fmtp:96packetization-mode=1;profile-level-id=420029;sprop-parameter-sets=Z0IAKeKQFAe2AtwEBAeHiRFQ,aM48gA==SETUP指令:设置流媒体传输方式,让服务器给流分配资源,启动RTSP会话。在SETUP指令中,需要多加一个信息头:Transport:Specifyhowthedatastreamistransported.SupportedvariantsareRTP/AVP;unicast;client_port=port1-port2RTP/AVP;multicast;client_port=port1-port2RTP/AVP/TCP;unicast在AXIS开发中,虽然datasheet说明支持UDP传输,但是选择方式一RTp/AVP时,服务器并不发送数据,只好用第三种方式RTP/AVP/TCP。当使用第三种方式的时候,可以在添加一个信息头,设置blocksize为64000:Blocksize:64000发送指令如下:SETUPrtsp://<servername>/axis-media/media.amp?videocodec=h264&resolution=640x480RTSP/1.0CSeq:3Transport:RTP/AVP/TCP;unicast;Blocksize:64000User-Agent:AxisMACAuthorization:Basiccm9vdDpwYXNz返回信息如下:RTSP/1.0200OKCSeq:3Session:C306C41C;timeout=60Transport:RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=737F3A5E;mode="PLAY"Date:Sat,16Jun200112:38:56GMT这里有个地方要注意,返回信息中有一个Session:C306C41C;这个会议标识要存起来,在后边的指令中都要加入这个信息头以表示是同一个会话。PLAY指令:请求服务器开始给客户端发送流数据PLAYrtsp://<servername>/axis-media/media.amp?videocodec=h264&resolution=640x480RTSP/1.0CSeq:4User-Agent:AxisAMCSession:C306C41CAuthorization:Basiccm9vdDpwYXNz返回信息如下:RTSP/1.0200OKCSeq:4Session:C306C41CRange:npt=0-RTP-Info:url=rtsp://54:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=640x480;seq=42296;rtptime=295889231Date:Sat,16Jun200112:38:57GMT此命令返回成功之后,服务器应该就开始发送RTP数据包了,接下来就接受这些数据报。PAUSE和TEARDOWN就不一一介绍了,直接讲接收RTP数据包intsize=recv(sock,(char*)pos,i_size,0);可以使用wireshark来分析数据包中的实时数据,很容易看出那些事协议信息,哪些是实时数据信息,接下来的事情就不属于RTSP了。如图,找到一个抓到的RTP数据包,在Real-TimeTransportProtocol中点击Payload就可以看到其对应的信息。£043269.2083-10192k1€£.1.X01175*16.?00_3C42269.20827S172.1^.200.2^8044 ?4fl251Destination01152,ISA.1,101,,,-EthernetIIrEre:Ehenzhen_8b13: (00:14;75;Sb:lJ;90J,Dst:Lurriversa.,53:34j7aCOO;le:rnt^rriMPr&rocol.sre:172.16,200.254C172.16.200,2543nDstJ192.1SS.1,101(192.l€S.l.TransnoisstonContro'BProtocolHSrcPort:rtsp(554)rDstPort:4413C441?)( £41654RT5PinterleavedFrame.Channel:OxOO.570byresIMag-ic:Qx24channel?ggrt^rh;570toyr«Real-TimeTransportProtocol10………=version:RFC16B9version(Z)..O ■adding:False■,■0....=EMt传门pn:Fxl5专.,r.OOOO=doneribut1rpgsou广。登idenr1f1erscount:0I..,.一..-Harker:TruePay!aadtype:DynainlcftTP-Type-56(96)sequencenumtier:64021Timestamp:513521114SynchranizationsourceidenrifieraxiiefQiss(ss&ob-93qi)PiyliaHi41§a2O22O2j8Js^fel5F37^0<iif3i5Sif275eae5a7cdc^dlcd.+tMFIO03C00400050006000700海oog。DOMoouoOOcCoodcOOeCOOfCW5o£3zoo^fa%u12U->a55b645267c&&J-&7zK4E7eq9L9e7521fb&;3z『肝nnaf3do5r1062fczddo知or□oa-Jo3OIOH

-LD83d£F5CL5d5a

C5JBfislza8830of1-a5eo1e17de6b8-b77□8ara胃6ufIE旦7obj19

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论