mirror of
https://gitee.com/xia-chu/ZLMediaKit.git
synced 2026-05-24 02:27:49 +08:00
Compare commits
2 Commits
c6634f11d7
...
d8a1c70e2d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d8a1c70e2d | ||
|
|
437d20cb58 |
@ -107,11 +107,6 @@ uint32_t RtcpContextForSend::getRtt(uint32_t ssrc) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Buffer::Ptr RtcpContextForSend::createRtcpSR(uint32_t rtcp_ssrc) {
|
Buffer::Ptr RtcpContextForSend::createRtcpSR(uint32_t rtcp_ssrc) {
|
||||||
uint64_t now = getCurrentMillisecond();
|
|
||||||
if (now - _last_sr_tsp < 5000) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
_last_sr_tsp = now;
|
|
||||||
auto rtcp = RtcpSR::create(0);
|
auto rtcp = RtcpSR::create(0);
|
||||||
rtcp->setNtpStamp(_last_ntp_stamp_ms);
|
rtcp->setNtpStamp(_last_ntp_stamp_ms);
|
||||||
rtcp->rtpts = htonl(_last_rtp_stamp);
|
rtcp->rtpts = htonl(_last_rtp_stamp);
|
||||||
@ -122,7 +117,7 @@ Buffer::Ptr RtcpContextForSend::createRtcpSR(uint32_t rtcp_ssrc) {
|
|||||||
// 记录上次发送的sender report信息,用于后续统计rtt [AUTO-TRANSLATED:1d22d2c8]
|
// 记录上次发送的sender report信息,用于后续统计rtt [AUTO-TRANSLATED:1d22d2c8]
|
||||||
// Record the last sent sender report information for subsequent RTT statistics
|
// Record the last sent sender report information for subsequent RTT statistics
|
||||||
auto last_sr_lsr = ((ntohl(rtcp->ntpmsw) & 0xFFFF) << 16) | ((ntohl(rtcp->ntplsw) >> 16) & 0xFFFF);
|
auto last_sr_lsr = ((ntohl(rtcp->ntpmsw) & 0xFFFF) << 16) | ((ntohl(rtcp->ntplsw) >> 16) & 0xFFFF);
|
||||||
_sender_report_ntp[last_sr_lsr] = now;
|
_sender_report_ntp[last_sr_lsr] = getCurrentMillisecond();
|
||||||
if (_sender_report_ntp.size() >= 5) {
|
if (_sender_report_ntp.size() >= 5) {
|
||||||
// 删除最早的sr rtcp [AUTO-TRANSLATED:2457e08d]
|
// 删除最早的sr rtcp [AUTO-TRANSLATED:2457e08d]
|
||||||
// Delete the earliest sr rtcp
|
// Delete the earliest sr rtcp
|
||||||
|
|||||||
@ -154,7 +154,6 @@ public:
|
|||||||
uint32_t getRtt(uint32_t ssrc) const;
|
uint32_t getRtt(uint32_t ssrc) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint64_t _last_sr_tsp = 0;
|
|
||||||
std::map<uint32_t /*ssrc*/, uint32_t /*rtt*/> _rtt;
|
std::map<uint32_t /*ssrc*/, uint32_t /*rtt*/> _rtt;
|
||||||
std::map<uint32_t /*last_sr_lsr*/, uint64_t /*ntp stamp*/> _sender_report_ntp;
|
std::map<uint32_t /*last_sr_lsr*/, uint64_t /*ntp stamp*/> _sender_report_ntp;
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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代理拉流功能
|
||||||
|
|||||||
@ -1497,10 +1497,13 @@ void WebRtcTransportImp::onSendRtp(const RtpPacket::Ptr &rtp, bool flush, bool r
|
|||||||
sendRtpPacket(rtp->data() + RtpPacket::kRtpTcpHeaderSize, rtp->size() - RtpPacket::kRtpTcpHeaderSize, flush, &ctx);
|
sendRtpPacket(rtp->data() + RtpPacket::kRtpTcpHeaderSize, rtp->size() - RtpPacket::kRtpTcpHeaderSize, flush, &ctx);
|
||||||
_bytes_usage += rtp->size() - RtpPacket::kRtpTcpHeaderSize;
|
_bytes_usage += rtp->size() - RtpPacket::kRtpTcpHeaderSize;
|
||||||
|
|
||||||
if (track->rtcp_context_send) {
|
if (_rtcp_sr_send_ticker.elapsedTime() > 5000) {
|
||||||
auto sr = track->rtcp_context_send->createRtcpSR(track->answer_ssrc_rtp);
|
_rtcp_sr_send_ticker.resetTime();
|
||||||
if (sr && sr->size() > 0) {
|
if (track->rtcp_context_send) {
|
||||||
sendRtcpPacket(sr->data(), sr->size(), true);
|
auto sr = track->rtcp_context_send->createRtcpSR(track->answer_ssrc_rtp);
|
||||||
|
if (sr && sr->size() > 0) {
|
||||||
|
sendRtcpPacket(sr->data(), sr->size(), true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -380,6 +380,7 @@ private:
|
|||||||
// pli rtcp timer
|
// pli rtcp timer
|
||||||
toolkit::Ticker _pli_ticker;
|
toolkit::Ticker _pli_ticker;
|
||||||
|
|
||||||
|
toolkit::Ticker _rtcp_sr_send_ticker;
|
||||||
toolkit::Ticker _rtcp_rr_send_ticker;
|
toolkit::Ticker _rtcp_rr_send_ticker;
|
||||||
|
|
||||||
// twcc rtcp发送上下文对象 [AUTO-TRANSLATED:aef6476a]
|
// twcc rtcp发送上下文对象 [AUTO-TRANSLATED:aef6476a]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user