diff --git a/srt/Common.hpp b/srt/Common.hpp index 81d98814..de5d3aaa 100644 --- a/srt/Common.hpp +++ b/srt/Common.hpp @@ -1,9 +1,10 @@ #ifndef ZLMEDIAKIT_SRT_COMMON_H #define ZLMEDIAKIT_SRT_COMMON_H #if defined(_WIN32) -#include #include #include + +#include #pragma comment(lib, "Ws2_32.lib") #pragma comment(lib, "Iphlpapi.lib") #else diff --git a/srt/Packet.cpp b/srt/Packet.cpp index b4afbf4a..85de1cbf 100644 --- a/srt/Packet.cpp +++ b/srt/Packet.cpp @@ -294,8 +294,12 @@ bool HandshakePacket::loadExtMessage(uint8_t *buf, size_t len) { length = loadUint16(ptr + 2); switch (type) { case HSExt::SRT_CMD_HSREQ: - case HSExt::SRT_CMD_HSRSP: ext = std::make_shared(); break; - case HSExt::SRT_CMD_SID: ext = std::make_shared(); break; + case HSExt::SRT_CMD_HSRSP: + ext = std::make_shared(); + break; + case HSExt::SRT_CMD_SID: + ext = std::make_shared(); + break; default: WarnL << "not support ext " << type; break; @@ -410,7 +414,7 @@ void HandshakePacket::assignPeerIP(struct sockaddr_storage *addr) { memset(peer_ip_addr, 0, sizeof(peer_ip_addr) * sizeof(peer_ip_addr[0])); if (addr->ss_family == AF_INET) { struct sockaddr_in *ipv4 = (struct sockaddr_in *)addr; - //抓包 奇怪好像是小头端??? + // 抓包 奇怪好像是小头端??? storeUint32LE(peer_ip_addr, ipv4->sin_addr.s_addr); } else if (addr->ss_family == AF_INET6) { if (IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)addr)->sin6_addr)) { diff --git a/srt/SrtTransport.cpp b/srt/SrtTransport.cpp index 570e09f8..4714bc64 100644 --- a/srt/SrtTransport.cpp +++ b/srt/SrtTransport.cpp @@ -127,6 +127,8 @@ void SrtTransport::handleHandshakeInduction(HandshakePacket &pkt, struct sockadd _max_window_size = pkt.max_flow_window_size; _mtu = pkt.mtu; + _last_pkt_seq = _init_seq_number - 1; + _peer_socket_id = pkt.srt_socket_id; HandshakePacket::Ptr res = std::make_shared(); res->dst_socket_id = _peer_socket_id; @@ -318,6 +320,10 @@ void SrtTransport::handleDropReq(uint8_t *buf, int len, struct sockaddr_storage uint32_t max_seq = 0; for (auto data : list) { max_seq = data->packet_seq_number; + if (_last_pkt_seq + 1 != data->packet_seq_number) { + TraceL << "pkt lost " << _last_pkt_seq + 1 << "->" << data->packet_seq_number; + } + _last_pkt_seq = data->packet_seq_number; onSRTData(std::move(data)); } _recv_nack.drop(max_seq); @@ -454,6 +460,10 @@ void SrtTransport::handleDataPacket(uint8_t *buf, int len, struct sockaddr_stora uint32_t last_seq; for (auto data : list) { last_seq = data->packet_seq_number; + if (_last_pkt_seq + 1 != data->packet_seq_number) { + TraceL << "pkt lost " << _last_pkt_seq + 1 << "->" << data->packet_seq_number; + } + _last_pkt_seq = data->packet_seq_number; onSRTData(std::move(data)); } _recv_nack.drop(last_seq); diff --git a/srt/SrtTransport.hpp b/srt/SrtTransport.hpp index 43ae841f..27281063 100644 --- a/srt/SrtTransport.hpp +++ b/srt/SrtTransport.hpp @@ -125,6 +125,8 @@ private: uint32_t _light_ack_pkt_count = 0; uint32_t _ack_number_count = 0; uint32_t _last_ack_pkt_seq_num = 0; + + uint32_t _last_pkt_seq = 0; UTicker _ack_ticker; std::map _ack_send_timestamp;