修复srt客户端不支持域名url的bug

This commit is contained in:
xia-chu 2025-11-04 18:36:00 +08:00
parent c6634f11d7
commit 437d20cb58
2 changed files with 17 additions and 13 deletions

View File

@ -35,6 +35,10 @@ void SrtUrl::parse(const string &strUrl) {
auto ip = findSubString(url.data(), "://", "?"); auto ip = findSubString(url.data(), "://", "?");
splitUrl(ip, _host, _port); splitUrl(ip, _host, _port);
if (!SockUtil::getDomainIP(_host.c_str(), _port, _addr, AF_INET, SOCK_DGRAM, IPPROTO_UDP)) {
throw std::invalid_argument("invalid host: " + _host);
}
auto _params = findSubString(url.data(), "?" , NULL); auto _params = findSubString(url.data(), "?" , NULL);
auto kv = Parser::parseArgs(_params); auto kv = Parser::parseArgs(_params);
@ -80,10 +84,9 @@ SrtCaller::~SrtCaller(void) {
void SrtCaller::onConnect() { void SrtCaller::onConnect() {
//DebugL; //DebugL;
auto peer_addr = SockUtil::make_sockaddr(_url._host.c_str(), (_url._port));
_socket = Socket::createSocket(_poller, false); _socket = Socket::createSocket(_poller, false);
_socket->bindUdpSock(0, SockUtil::is_ipv4(_url._host.data()) ? "0.0.0.0" : "::"); _socket->bindUdpSock(0, _url._addr.ss_family == AF_INET ? "0.0.0.0" : "::");
_socket->bindPeerAddr((struct sockaddr *)&peer_addr, 0, true); _socket->bindPeerAddr((struct sockaddr *)&_url._addr, 0, true);
weak_ptr<SrtCaller> weak_self = shared_from_this(); weak_ptr<SrtCaller> weak_self = shared_from_this();
_socket->setOnRead([weak_self](const Buffer::Ptr &buf, struct sockaddr *addr, int addr_len) mutable { _socket->setOnRead([weak_self](const Buffer::Ptr &buf, struct sockaddr *addr, int addr_len) mutable {
@ -280,8 +283,7 @@ void SrtCaller::sendHandshakeInduction() {
req->srt_socket_id = _socket_id; req->srt_socket_id = _socket_id;
req->syn_cookie = 0; req->syn_cookie = 0;
auto dataSenderAddr = SockUtil::make_sockaddr(_url._host.c_str(), _url._port); req->assignPeerIPBE(&_url._addr);
req->assignPeerIPBE(&dataSenderAddr);
req->storeToData(); req->storeToData();
_handleshake_req = req; _handleshake_req = req;
sendControlPacket(req, true); sendControlPacket(req, true);
@ -326,8 +328,7 @@ void SrtCaller::sendHandshakeConclusion() {
req->srt_socket_id = _socket_id; req->srt_socket_id = _socket_id;
req->syn_cookie = _sync_cookie; req->syn_cookie = _sync_cookie;
auto addr = SockUtil::make_sockaddr(_url._host.c_str(), _url._port); req->assignPeerIPBE(&_url._addr);
req->assignPeerIPBE(&addr);
HSExtMessage::Ptr ext = std::make_shared<HSExtMessage>(); HSExtMessage::Ptr ext = std::make_shared<HSExtMessage>();
ext->extension_type = HSExt::SRT_CMD_HSREQ; ext->extension_type = HSExt::SRT_CMD_HSREQ;

View File

@ -34,14 +34,17 @@ namespace mediakit {
// 解析srt 信令url的工具类 // 解析srt 信令url的工具类
class SrtUrl { class SrtUrl {
public: public:
std::string _full_url; void parse(const std::string &url);
std::string _params;
std::string _host;
uint16_t _port;
std::string _streamid;
public: public:
void parse(const std::string &url); std::string _full_url;
std::string _params;
std::string _streamid;
sockaddr_storage _addr;
private:
uint16_t _port;
std::string _host;
}; };
// 实现了webrtc代理拉流功能 // 实现了webrtc代理拉流功能