RtspStackDesign.txt
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. PURPOSE
  2. This document is to provide a simple, high level description of RTSP stack
  3. design and implementation.
  4. KEY FEATURES
  5. The RTSP stack is intented to implement the RFC 2326 RTSP protocol. It mainly
  6. has three components: RTSP MSG, RTSP MSG Parser, RTSP Transceiver. 
  7. RtspMsg is the base data structure of a RTSP message. It has dervied classes
  8. such as RtspRequest, RtspResponse and RtspXXXMsg. It is also related to class
  9. RtspXXXHdr and RtspSdp, which are different components of a RTSP message. The
  10. RTSP msg encoding is the main functionality of each RTSP msg.
  11. RtspMsgParser is to handle RTSP message parsing. It uses CharData and
  12. CharDataPasrser as basic character parser, and RtspUtil as RTSP parser
  13. utilities. 
  14. RtspTransceiver is related to two other classes: RtspTcpConnection and
  15. RtspTcpBuffer. The three consist of the main component of the RTSP stack which
  16. handles TCP connection and message receiving and sending functionalities.
  17. LIMITATION
  18. The stack is now still server-centric. i.e. It is more complete on message
  19. decoding and encoding on the RTSP server side than that on the RTSP client
  20. side. So some message or header classes have only decoding and some have only
  21. encoding. But it should be easy to just add whatever missing into the
  22. corresponding classes or the parser class.
  23. Some methods are not complete functional and there are also feature limitation.
  24. The details of these can be found in the REAME file in rtsp directory.  
  25. DATA STRUCTURES
  26. CharData is a simple class for character array. It has a main function to do
  27. case insensitive comparison. CharDataPaser uses this class to implement basic
  28. character parsing functionalties. Using CharData is to increase the speed of
  29. the parser in character matching.
  30. Data is the basic data structure used by RtspMsg. Once the parser recognized a
  31. RTSP message from the TCP stream, it will store the data in a bunch of
  32. data members in RtspMsg, which are mostly in Data data structure. Using Data
  33. is mainly because we need the data structure appendable because we are keeping
  34. process data from TCP stream.
  35. THREAD USAGE
  36. RtspTcpConnection has the message receiving thread for all the TCP
  37. connections. It has a TCP connection map, which includes all the connections
  38. that it has accepted. This thread is to be listening on the server port and all
  39. the connections in the map for ever.
  40. RTSP TRANSCEIVER
  41. RtspTransceiver is mainly to handle message sending and receiving.
  42. RtspTcpConnection accepts new client TCP connection. RtspTcpBuffer is to
  43. process per clinet TCP connection.
  44. One thing that needs to mention is that RtspTcpBuffer has a 1024 bytes buffer
  45. to store the TCP stream raw data. The buffer size can be changed if it is put
  46. into mediaServer.cfg. The RtspMsgParser will scan the data in this buffer
  47. after one read. Once it finds a complete message, it will save that message
  48. into the message Fifo and keep scanning. If it reaches the end of the buffer
  49. but the message is not complete, it will still save the data in the RtspMsg
  50. and store the msg object in RtspTcpBuffer object. Then the buffer can be
  51. completely trashed and reused by the next read. For the next read, the new
  52. data will be appended to the saved incomplete msg.
  53. RTSP MSG
  54. According to the above description, the trick of the RtspMsg is that its
  55. object can be either a complete message or an incomplete message. The
  56. MsgCompletionFlag will tell the truth. If the message is not complete, any new
  57. data read will be appended to the message.
  58. This is to avoid the TCP buffer data shuffling when there is incomplete
  59. portion.
  60. RTSP MSG PARSER
  61. In order to increase the parsing speed, the parser is doing a *lazy parsing*
  62. mechanism. That is, to parse the header only; when necessary, i.e when
  63. queried, parse the content of the headers. The parsing of the content of
  64. headers is usually invoked in the get functions in RtspMsg or its derived
  65. classes.
  66. The preParse() function looked complecated. It is because it needs to consider
  67. the parsing can be started at any position of a incomplete message left from
  68. last read. Of course, in the case of the beginning of the parsing or there is
  69. no leftover of last time, incomplete message is an empty message.