mirror of
https://github.com/mii443/libdatachannel.git
synced 2025-09-01 14:49:25 +00:00
Added a requestKeyframe()
This commit is contained in:
@ -58,6 +58,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
void onOutgoing(const std::function<void(rtc::message_ptr)>& cb);
|
void onOutgoing(const std::function<void(rtc::message_ptr)>& cb);
|
||||||
|
|
||||||
|
virtual bool requestKeyframe() {return false;}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Track;
|
class Track;
|
||||||
@ -72,10 +74,14 @@ public:
|
|||||||
|
|
||||||
void requestBitrate(unsigned int newBitrate);
|
void requestBitrate(unsigned int newBitrate);
|
||||||
|
|
||||||
|
bool requestKeyframe() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void pushREMB(unsigned int bitrate);
|
void pushREMB(unsigned int bitrate);
|
||||||
void pushRR(unsigned int lastSR_delay);
|
void pushRR(unsigned int lastSR_delay);
|
||||||
|
|
||||||
|
void pushPLI();
|
||||||
|
|
||||||
unsigned int mRequestedBitrate = 0;
|
unsigned int mRequestedBitrate = 0;
|
||||||
SSRC mSsrc = 0;
|
SSRC mSsrc = 0;
|
||||||
uint32_t mGreatestSeqNo = 0;
|
uint32_t mGreatestSeqNo = 0;
|
||||||
|
@ -55,6 +55,8 @@ public:
|
|||||||
size_t availableAmount() const override;
|
size_t availableAmount() const override;
|
||||||
std::optional<message_variant> receive() override;
|
std::optional<message_variant> receive() override;
|
||||||
|
|
||||||
|
bool requestKeyframe();
|
||||||
|
|
||||||
// RTCP handler
|
// RTCP handler
|
||||||
void setRtcpHandler(std::shared_ptr<RtcpHandler> handler);
|
void setRtcpHandler(std::shared_ptr<RtcpHandler> handler);
|
||||||
|
|
||||||
|
@ -573,8 +573,7 @@ void PeerConnection::forwardMedia(message_ptr message) {
|
|||||||
mMidFromSssrc.emplace(ssrc, *found);
|
mMidFromSssrc.emplace(ssrc, *found);
|
||||||
mid = *found;
|
mid = *found;
|
||||||
break;
|
break;
|
||||||
}else
|
}
|
||||||
PLOG_WARNING << "Unknown SSRC " << ssrc;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
src/rtcp.cpp
12
src/rtcp.cpp
@ -123,6 +123,18 @@ bool RtcpReceivingSession::send(message_ptr msg) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RtcpReceivingSession::requestKeyframe() {
|
||||||
|
pushPLI();
|
||||||
|
return true; // TODO Make this false when it is impossible (i.e. Opus).
|
||||||
|
}
|
||||||
|
|
||||||
|
void RtcpReceivingSession::pushPLI() {
|
||||||
|
auto msg = rtc::make_message(rtc::RTCP_PLI::size(), rtc::Message::Type::Control);
|
||||||
|
auto *pli = (rtc::RTCP_PLI *) msg->data();
|
||||||
|
pli->preparePacket(mSsrc);
|
||||||
|
send(msg);
|
||||||
|
}
|
||||||
|
|
||||||
void RtcpHandler::onOutgoing(const std::function<void(rtc::message_ptr)>& cb) {
|
void RtcpHandler::onOutgoing(const std::function<void(rtc::message_ptr)>& cb) {
|
||||||
this->outgoingCallback = synchronized_callback<rtc::message_ptr>(cb);
|
this->outgoingCallback = synchronized_callback<rtc::message_ptr>(cb);
|
||||||
}
|
}
|
||||||
|
@ -152,5 +152,11 @@ void Track::setRtcpHandler(std::shared_ptr<RtcpHandler> handler) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Track::requestKeyframe() {
|
||||||
|
if (mRtcpHandler)
|
||||||
|
return mRtcpHandler->requestKeyframe();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace rtc
|
} // namespace rtc
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user