mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-25 03:02:22 +08:00
新增webrtc配置选项nackAudioRtpSize、preferred_tcp
nackAudioRtpSize: 音频nack包中rtp个数,减小此值可以让nack包响应更灵敏 preferred_tcp: 是否优先采用webrtc over tcp模式
This commit is contained in:
@@ -82,6 +82,7 @@ const string kMinBitrate = RTC_FIELD "min_bitrate";
|
||||
// 数据通道设置 [AUTO-TRANSLATED:2dc48bc3]
|
||||
// Data channel setting
|
||||
const string kDataChannelEcho = RTC_FIELD "datachannel_echo";
|
||||
const string kPreferredTcp = RTC_FIELD "preferred_tcp";
|
||||
|
||||
static onceToken token([]() {
|
||||
mINI::Instance()[kTimeOutSec] = 15;
|
||||
@@ -105,6 +106,7 @@ static onceToken token([]() {
|
||||
mINI::Instance()[kIceTransportPolicy] = 0; // 默认值:不限制(kAll)
|
||||
mINI::Instance()[kIceUfrag] = "ZLMediaKit";
|
||||
mINI::Instance()[kIcePwd] = "ZLMediaKit";
|
||||
mINI::Instance()[kPreferredTcp] = 0;
|
||||
});
|
||||
|
||||
} // namespace Rtc
|
||||
@@ -1102,7 +1104,7 @@ void WebRtcTransportImp::setIceCandidate(vector<SdpAttrCandidate> cands) {
|
||||
|
||||
class RtpChannel : public RtpTrackImp, public std::enable_shared_from_this<RtpChannel> {
|
||||
public:
|
||||
RtpChannel(EventPoller::Ptr poller, RtpTrackImp::OnSorted cb, function<void(const FCI_NACK &nack)> on_nack) {
|
||||
RtpChannel(TrackType type, EventPoller::Ptr poller, RtpTrackImp::OnSorted cb, function<void(const FCI_NACK &nack)> on_nack) : _nack_ctx(type){
|
||||
_poller = std::move(poller);
|
||||
_on_nack = std::move(on_nack);
|
||||
setOnSorted(std::move(cb));
|
||||
@@ -1314,7 +1316,7 @@ void WebRtcTransportImp::createRtpChannel(const string &rid, uint32_t ssrc, Medi
|
||||
// rid --> RtpReceiverImp
|
||||
auto &ref = track.rtp_channel[rid];
|
||||
weak_ptr<WebRtcTransportImp> weak_self = static_pointer_cast<WebRtcTransportImp>(shared_from_this());
|
||||
ref = std::make_shared<RtpChannel>(
|
||||
ref = std::make_shared<RtpChannel>(track.media->type,
|
||||
getPoller(), [&track, this, rid](RtpPacket::Ptr rtp) mutable { onSortedRtp(track, rid, std::move(rtp)); },
|
||||
[&track, weak_self, ssrc](const FCI_NACK &nack) mutable {
|
||||
// nack发送可能由定时器异步触发 [AUTO-TRANSLATED:186d6723]
|
||||
@@ -1631,6 +1633,7 @@ WebRtcPluginManager &WebRtcPluginManager::Instance() {
|
||||
}
|
||||
|
||||
void WebRtcPluginManager::registerPlugin(const string &type, Plugin cb) {
|
||||
InfoL << "Load webrtc plugin:" << type;
|
||||
lock_guard<mutex> lck(_mtx_creator);
|
||||
_map_creator[type] = std::move(cb);
|
||||
}
|
||||
@@ -1667,6 +1670,7 @@ void echo_plugin(SocketHelper& sender, const WebRtcArgs &args, const onCreateWeb
|
||||
cb(*WebRtcEchoTest::create(EventPollerPool::Instance().getPoller()));
|
||||
}
|
||||
|
||||
template<typename Type>
|
||||
void push_plugin(SocketHelper& sender, const WebRtcArgs &args, const onCreateWebRtc &cb) {
|
||||
MediaInfo info(args["url"]);
|
||||
Broadcast::PublishAuthInvoker invoker = [cb, info](const string &err, const ProtocolOption &option) mutable {
|
||||
@@ -1711,7 +1715,7 @@ void push_plugin(SocketHelper& sender, const WebRtcArgs &args, const onCreateWeb
|
||||
push_src_ownership = push_src->getOwnership();
|
||||
push_src->setProtocolOption(option);
|
||||
}
|
||||
auto rtc = WebRtcPusher::create(EventPollerPool::Instance().getPoller(), push_src, push_src_ownership, info, option,
|
||||
auto rtc = Type::create(EventPollerPool::Instance().getPoller(), push_src, push_src_ownership, info, option,
|
||||
WebRtcTransport::Role::PEER, WebRtcTransport::SignalingProtocols::WHEP_WHIP);
|
||||
push_src->setListener(rtc);
|
||||
cb(*rtc);
|
||||
@@ -1782,9 +1786,12 @@ static void setWebRtcArgs(const WebRtcArgs &args, WebRtcInterface &rtc) {
|
||||
}
|
||||
}
|
||||
|
||||
bool preferred_tcp = args["preferred_tcp"];
|
||||
{
|
||||
auto preferred_tcp = args["preferred_tcp"];
|
||||
if (!preferred_tcp.empty()) {
|
||||
rtc.setPreferredTcp(preferred_tcp);
|
||||
} else {
|
||||
GET_CONFIG(bool, s_preferred_tcp, Rtc::kPreferredTcp);
|
||||
rtc.setPreferredTcp(s_preferred_tcp);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -1832,7 +1839,7 @@ static onceToken s_rtc_auto_register([]() {
|
||||
// Enable echo plugin only in debug mode
|
||||
WebRtcPluginManager::Instance().registerPlugin("echo", echo_plugin);
|
||||
#endif
|
||||
WebRtcPluginManager::Instance().registerPlugin("push", push_plugin);
|
||||
WebRtcPluginManager::Instance().registerPlugin("push", push_plugin<WebRtcPusher>);
|
||||
WebRtcPluginManager::Instance().registerPlugin("play", play_plugin<WebRtcPlayer>);
|
||||
WebRtcPluginManager::Instance().registerPlugin("talk", play_plugin<WebRtcTalk>);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user