Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

129 linhas
3.9KB

  1. #ifndef ZLMEDIAKIT_SRT_HS_EXT_H
  2. #define ZLMEDIAKIT_SRT_HS_EXT_H
  3. #include "Network/Buffer.h"
  4. #include "Common.hpp"
  5. namespace SRT {
  6. using namespace toolkit;
  7. class HSExt : public Buffer {
  8. public:
  9. HSExt() = default;
  10. virtual ~HSExt() = default;
  11. enum {
  12. SRT_CMD_REJECT = 0,
  13. SRT_CMD_HSREQ = 1,
  14. SRT_CMD_HSRSP = 2,
  15. SRT_CMD_KMREQ = 3,
  16. SRT_CMD_KMRSP = 4,
  17. SRT_CMD_SID = 5,
  18. SRT_CMD_CONGESTION = 6,
  19. SRT_CMD_FILTER = 7,
  20. SRT_CMD_GROUP = 8,
  21. SRT_CMD_NONE = -1
  22. };
  23. using Ptr = std::shared_ptr<HSExt>;
  24. uint16_t extension_type;
  25. uint16_t extension_length;
  26. virtual bool loadFromData(uint8_t *buf, size_t len) = 0;
  27. virtual bool storeToData() = 0;
  28. virtual std::string dump() = 0;
  29. ///////Buffer override///////
  30. char *data() const override {
  31. if (_data) {
  32. return _data->data();
  33. }
  34. return nullptr;
  35. }
  36. size_t size() const override {
  37. if (_data) {
  38. return _data->size();
  39. }
  40. return 0;
  41. }
  42. protected:
  43. void loadHeader() {
  44. uint8_t *ptr = (uint8_t *)_data->data();
  45. extension_type = loadUint16(ptr);
  46. ptr += 2;
  47. extension_length = loadUint16(ptr);
  48. ptr += 2;
  49. }
  50. void storeHeader() {
  51. uint8_t *ptr = (uint8_t *)_data->data();
  52. SRT::storeUint16(ptr, extension_type);
  53. ptr += 2;
  54. storeUint16(ptr, extension_length);
  55. }
  56. protected:
  57. BufferRaw::Ptr _data;
  58. };
  59. /*
  60. 0 1 2 3
  61. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  62. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  63. | SRT Version |
  64. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  65. | SRT Flags |
  66. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  67. | Receiver TSBPD Delay | Sender TSBPD Delay |
  68. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  69. Figure 6: Handshake Extension Message structure
  70. https://haivision.github.io/srt-rfc/draft-sharabayko-srt.html#name-handshake-extension-message
  71. */
  72. class HSExtMessage : public HSExt {
  73. public:
  74. using Ptr = std::shared_ptr<HSExtMessage>;
  75. enum {
  76. HS_EXT_MSG_TSBPDSND = 0x00000001,
  77. HS_EXT_MSG_TSBPDRCV = 0x00000002,
  78. HS_EXT_MSG_CRYPT = 0x00000004,
  79. HS_EXT_MSG_TLPKTDROP = 0x00000008,
  80. HS_EXT_MSG_PERIODICNAK = 0x00000010,
  81. HS_EXT_MSG_REXMITFLG = 0x00000020,
  82. HS_EXT_MSG_STREAM = 0x00000040,
  83. HS_EXT_MSG_PACKET_FILTER = 0x00000080
  84. };
  85. enum { HSEXT_MSG_SIZE = 16 };
  86. HSExtMessage() = default;
  87. ~HSExtMessage() = default;
  88. bool loadFromData(uint8_t *buf, size_t len) override;
  89. bool storeToData() override;
  90. std::string dump() override;
  91. uint32_t srt_version;
  92. uint32_t srt_flag;
  93. uint16_t recv_tsbpd_delay;
  94. uint16_t send_tsbpd_delay;
  95. };
  96. /*
  97. 0 1 2 3
  98. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  99. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  100. | |
  101. | Stream ID |
  102. ...
  103. | |
  104. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  105. Figure 7: Stream ID Extension Message
  106. https://haivision.github.io/srt-rfc/draft-sharabayko-srt.html#name-stream-id-extension-message
  107. */
  108. class HSExtStreamID : public HSExt {
  109. public:
  110. using Ptr = std::shared_ptr<HSExtStreamID>;
  111. HSExtStreamID() = default;
  112. ~HSExtStreamID() = default;
  113. bool loadFromData(uint8_t *buf, size_t len) override;
  114. bool storeToData() override;
  115. std::string dump() override;
  116. std::string streamid;
  117. };
  118. } // namespace SRT
  119. #endif // ZLMEDIAKIT_SRT_HS_EXT_H