Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

il y a 5 mois
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #ifndef ZLMEDIAKIT_SRT_ACK_H
  2. #define ZLMEDIAKIT_SRT_ACK_H
  3. #include "Packet.hpp"
  4. namespace SRT {
  5. /*
  6. 0 1 2 3
  7. 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
  8. +-+-+-+-+-+-+-+-+-+-+-+-+- SRT Header +-+-+-+-+-+-+-+-+-+-+-+-+-+
  9. |1| Control Type | Reserved |
  10. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  11. | Acknowledgement Number |
  12. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  13. | Timestamp |
  14. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  15. | Destination Socket ID |
  16. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+- CIF -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  17. | Last Acknowledged Packet Sequence Number |
  18. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  19. | RTT |
  20. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  21. | RTT Variance |
  22. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  23. | Available Buffer Size |
  24. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  25. | Packets Receiving Rate |
  26. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  27. | Estimated Link Capacity |
  28. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  29. | Receiving Rate |
  30. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  31. Figure 13: ACK control packet
  32. https://haivision.github.io/srt-rfc/draft-sharabayko-srt.html#name-ack-acknowledgment
  33. */
  34. class ACKPacket : public ControlPacket {
  35. public:
  36. using Ptr = std::shared_ptr<ACKPacket>;
  37. ACKPacket() = default;
  38. ~ACKPacket() = default;
  39. enum { ACK_CIF_SIZE = 7 * 4 };
  40. std::string dump();
  41. ///////ControlPacket override///////
  42. bool loadFromData(uint8_t *buf, size_t len) override;
  43. bool storeToData() override;
  44. uint32_t ack_number;
  45. uint32_t last_ack_pkt_seq_number;
  46. uint32_t rtt;
  47. uint32_t rtt_variance;
  48. uint32_t available_buf_size;
  49. uint32_t pkt_recv_rate;
  50. uint32_t estimated_link_capacity;
  51. uint32_t recv_rate;
  52. };
  53. class ACKACKPacket : public ControlPacket {
  54. public:
  55. using Ptr = std::shared_ptr<ACKACKPacket>;
  56. ACKACKPacket() = default;
  57. ~ACKACKPacket() = default;
  58. ///////ControlPacket override///////
  59. bool loadFromData(uint8_t *buf, size_t len) override {
  60. if (len < ControlPacket::HEADER_SIZE) {
  61. return false;
  62. }
  63. _data = BufferRaw::create();
  64. _data->assign((char *)(buf), len);
  65. ControlPacket::loadHeader();
  66. ack_number = loadUint32(type_specific_info);
  67. return true;
  68. }
  69. bool storeToData() override {
  70. _data = BufferRaw::create();
  71. _data->setCapacity(HEADER_SIZE);
  72. _data->setSize(HEADER_SIZE);
  73. control_type = ControlPacket::ACKACK;
  74. sub_type = 0;
  75. storeUint32(type_specific_info, ack_number);
  76. storeToHeader();
  77. return true;
  78. }
  79. uint32_t ack_number;
  80. };
  81. } // namespace SRT
  82. #endif // ZLMEDIAKIT_SRT_ACK_H