rtp_header_extension_parser.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef MODULES_RTP_RTCP_INCLUDE_RTP_HEADER_PARSER_H_
  2. #define MODULES_RTP_RTCP_INCLUDE_RTP_HEADER_PARSER_H_
  3. #include "../rtp_header_extension/rtp_header_extension_map.h"
  4. class RTPHeaderExtensionParser {
  5. public:
  6. static RTPHeaderExtensionParser* Create();
  7. virtual ~RTPHeaderExtensionParser(){}
  8. // Parses the packet and stores the parsed packet in |header|. Returns true on
  9. // success, false otherwise.
  10. // This method is thread-safe in the sense that it can parse multiple packets
  11. // at once.
  12. virtual bool Parse(const uint8_t* packet,
  13. size_t length,
  14. RTPHeaderExtension* header,
  15. int *header_length) = 0;
  16. // Registers an RTP header extension and binds it to |id|.
  17. virtual bool RegisterRtpHeaderExtension(RTPExtensionType type,
  18. uint8_t id) = 0;
  19. // Registers an RTP header extension.
  20. virtual bool RegisterRtpHeaderExtension(RtpExtension extension) = 0;
  21. // De-registers an RTP header extension.
  22. virtual bool DeregisterRtpHeaderExtension(RTPExtensionType type) = 0;
  23. // De-registers an RTP header extension.
  24. virtual bool DeregisterRtpHeaderExtension(RtpExtension extension) = 0;
  25. };
  26. namespace RtpUtility {
  27. class RTPHeaderExtensionParser {
  28. public:
  29. RTPHeaderExtensionParser(const uint8_t* rtpData, size_t rtpDataLength);
  30. bool Parse(RTPHeaderExtension* header,
  31. const RtpHeaderExtensionMap* ptrExtensionMap,
  32. int *header_length);
  33. private:
  34. void ParseOneByteExtensionHeader(RTPHeaderExtension* extension,
  35. const RtpHeaderExtensionMap* ptrExtensionMap,
  36. const uint8_t* ptrRTPDataExtensionEnd,
  37. const uint8_t* ptr) const;
  38. const uint8_t* const _ptrRTPDataBegin;
  39. const uint8_t* const _ptrRTPDataEnd;
  40. };
  41. }
  42. #endif // MODULES_RTP_RTCP_INCLUDE_RTP_HEADER_PARSER_H_