基于RTSP RDT传输RM RMVB

近日由于需要,要实现基于RTSP 传输RM RMVB,便找网上,都没有找到现成的解决方案,只有一个live555实现了RTSP服务,但是只支持RTP传输mpg,mp3,wav,等格式,RM 在开源界好象极不受欢迎,可能因为格式、协议都是私有不公开的缘故。遂开始结合live555和commview跟踪包来开发RMVB over RTSP

1 RTSP

首先要实现RTSP协议,RTSP协议较为简单,类似HTTP协议,主要的命令有

OPTIONDESCRIBESETUPPLAYTEARDOWNrealplay播放器一般按顺序发送这几条命令与RTSP服务器交互。

      Client                      Server

       ——–OPTIONS————à

       <——OPTIONS RESP——–

       ——–DESCRIBE————à

       <——DESCRIBE RESP——-

       ——–SETUP—————-à

       <——SETUP RESP———–

       ——–PLAY——————à

       <——PLAY RESP————-

       ——–TEAR DOWN———à

       <——TEAR DOWN RESP—–

2 RDT

RDTreal公司专有的传输rm格式文件的协议,在RTSP SETUP命令中协商通过RDT传输的话,即开始用RDTRDT可以over TCP或者UDP,格式也较为简单

Table A. RDT DATA PACKET (non-aggregated)

012    78               24      32         64             80

+++—-++—————+++—–+——-…+———–…+–…+

|||    ||SeqNo          |||Rule |Timestamp |Reliable SeqNo|Data |

+++—-++—————+++—–+——-…+———–…+–…+

^^^    ^^               ^^^

|||    ||               |||

|||    ||               ||ASM Rule

|||    ||               |slow_data

|||    ||               back_to_back_packet

|||    ||              

|||    |RDT Sequence Number

|||    is_reliable

||stream_id

|need_reliable (always true)

length_included_flag

——————————————————————————-

3 real challage between client and server

这个协议是real playerhelix之间特殊的专有协议,在realplayer发出OPTION命令时,发出第一个ClientChallenge,32字节数,服务器在RESP中应回应发出RealChallenge1(32字节),然后realplayerSETUP命令时应发出RealChallenge2,作为对RealChallenge1的回应,服务器在SETUP RESP中应包含对ClientChallenge的回应,为RealChallenge3。即:

      Client                   Server

       ——–ClientChallenge—-à

       <——–RealChallenge1——

       ——–RealChallenge2—–à

       <——–RealChallenge3—–

以上流程也仅限于猜测,目前RealChallenge2的生成已经有算法,在MPlayer工程中。但是RealChallenge1RealChallenge3的生成还没有算法,目前此流程无法通过。

4 SDP

Session描述语言协议

主要用于在DESCRIBE语句时,描述要传输的文件的视音频流信息,包括编码格式,帧率的丰富的信息,以便播放器做好解码的准备。

5 RIFF RM format

RM文件的格式分析,要传输RM文件,肯定要先分析文件格式,再取出数据,再打包发送。

References

The following are the standards referenced in this document:

Real Time Streaming Protocol (RTSP; RFC 2326)

ftp://ftp.isi.edu/in-notes/rfc2326.txt

This specification references the HTTP spec by using the following notation: [H3.2.1].

This example refers to section 3.2.1 in the HTTP RFC.

Session Description Protocol (SDP; RFC 2327)

ftp://ftp.isi.edu/in-notes/rfc2327.txt

Real Time Transport Protocol (RTP; RFC 1889)

ftp://ftp.isi.edu/in-notes/rfc1889.txt

Hypertext Transfer Protocol (HTTP; RFC 2068)

ftp://ftp.isi.edu/in-notes/rfc2068.txt

版权声明:本文为garyren原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/garyren/archive/2008/07/08/2543235.html