mirror of
https://gitee.com/xia-chu/ZLMediaKit.git
synced 2026-05-21 17:17:49 +08:00
Fix SrtCaller Crash problem (#4171)
1.Fix the crash problem when SrtPlayer reveives an Ack packet 2.Remove SrtCaller's Check on streamid format to make it compatible with other SRT streaming service。 3.Modify the coding format: replace tab to space
This commit is contained in:
parent
52ca731392
commit
c0a93f3c8f
@ -21,8 +21,12 @@ using namespace SRT;
|
|||||||
|
|
||||||
namespace mediakit {
|
namespace mediakit {
|
||||||
|
|
||||||
|
//zlm play format
|
||||||
//srt://127.0.0.1:9000?streamid=#!::r=live/test
|
//srt://127.0.0.1:9000?streamid=#!::r=live/test
|
||||||
//srt://127.0.0.1:9000?streamid=#!::r=live/test,h=__defaultVhost__
|
//srt://127.0.0.1:9000?streamid=#!::r=live/test,h=__defaultVhost__
|
||||||
|
//zlm push format
|
||||||
|
//srt://127.0.0.1:9000?streamid=#!::r=live/test,m=publish
|
||||||
|
//srt://127.0.0.1:9000?streamid=#!::r=live/test,h=__defaultVhost__,m=publish
|
||||||
void SrtUrl::parse(const string &strUrl) {
|
void SrtUrl::parse(const string &strUrl) {
|
||||||
//DebugL << "url: " << strUrl;
|
//DebugL << "url: " << strUrl;
|
||||||
_full_url = strUrl;
|
_full_url = strUrl;
|
||||||
@ -40,37 +44,14 @@ void SrtUrl::parse(const string &strUrl) {
|
|||||||
if (!toolkit::start_with(streamid, "#!::")) {
|
if (!toolkit::start_with(streamid, "#!::")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::string real_streamid = streamid.substr(4);
|
_streamid = streamid;
|
||||||
|
|
||||||
auto params = Parser::parseArgs(real_streamid, ",", "=");
|
|
||||||
|
|
||||||
for (auto iit : params) {
|
|
||||||
if (iit.first == "h") {
|
|
||||||
_vhost = iit.second;
|
|
||||||
} else if (iit.first == "r") {
|
|
||||||
auto tmps = toolkit::split(iit.second, "/");
|
|
||||||
if (tmps.size() < 2) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
_app = tmps[0];
|
|
||||||
_stream = tmps[1];
|
|
||||||
} else {
|
|
||||||
//nop
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_vhost.empty()) {
|
|
||||||
_vhost = DEFAULT_VHOST;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TraceL << "ip: " << ip;
|
//TraceL << "ip: " << ip;
|
||||||
//TraceL << "_host: " << _host;
|
//TraceL << "_host: " << _host;
|
||||||
//TraceL << "_port: " << _port;
|
//TraceL << "_port: " << _port;
|
||||||
//TraceL << "_params: " << _params;
|
//TraceL << "_params: " << _params;
|
||||||
//TraceL << "_vhost: " << _vhost;
|
//TraceL << "_streamid: " << _streamid;
|
||||||
//TraceL << "_app: " << _app;
|
|
||||||
//TraceL << "_stream: " << _stream;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -730,7 +711,9 @@ void SrtCaller::handleACK(uint8_t *buf, int len, struct sockaddr *addr) {
|
|||||||
pkt->timestamp = DurationCountMicroseconds(_now - _start_timestamp);
|
pkt->timestamp = DurationCountMicroseconds(_now - _start_timestamp);
|
||||||
pkt->ack_number = ack.ack_number;
|
pkt->ack_number = ack.ack_number;
|
||||||
pkt->storeToData();
|
pkt->storeToData();
|
||||||
|
if (_send_buf) {
|
||||||
_send_buf->drop(ack.last_ack_pkt_seq_number);
|
_send_buf->drop(ack.last_ack_pkt_seq_number);
|
||||||
|
}
|
||||||
sendControlPacket(pkt, true);
|
sendControlPacket(pkt, true);
|
||||||
// TraceL<<"ack number "<<ack.ack_number;
|
// TraceL<<"ack number "<<ack.ack_number;
|
||||||
return;
|
return;
|
||||||
@ -1008,14 +991,7 @@ float SrtCaller::getTimeOutSec() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::string SrtCaller::generateStreamId() {
|
std::string SrtCaller::generateStreamId() {
|
||||||
auto streamId = "#!::r=" + _url._app + "/" + _url._stream;
|
return _url._streamid;
|
||||||
if (_url._vhost != DEFAULT_VHOST) {
|
|
||||||
streamId += ",h=" +_url._vhost;
|
|
||||||
}
|
|
||||||
if (!isPlayer()) {
|
|
||||||
streamId += ",m=publish";
|
|
||||||
}
|
|
||||||
return streamId;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t SrtCaller::generateSocketId() {
|
uint32_t SrtCaller::generateSocketId() {
|
||||||
|
|||||||
@ -38,9 +38,7 @@ public:
|
|||||||
std::string _params;
|
std::string _params;
|
||||||
std::string _host;
|
std::string _host;
|
||||||
uint16_t _port;
|
uint16_t _port;
|
||||||
std::string _vhost;
|
std::string _streamid;
|
||||||
std::string _app;
|
|
||||||
std::string _stream;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void parse(const std::string &url);
|
void parse(const std::string &url);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user