webrtc自帶了simulcast功能,可以將乙個解析度的流編碼成多個解析度並傳送,**端可以根據頻寬去動態的選擇某個解析度,也可以自己選擇某個解析度,據說在webrtc m70版本提供了對外的介面開啟simulcast,並 vp8,vp9,h264三種編碼器都支援simulcast功能,但是在m70版本以下並不支援h264編碼器的simulcast功能,如果在m70版本以下使用simulcast功能,需要通過修改sdp來開啟,話不多說,直接上**:
//
// sdp_helpers.h
//// created by ilong on 2018/10/29.
//#ifndef sdp_helpers_h
#define sdp_helpers_h
#include #include #include class sdphelpers ;
#endif /* sdp_helpers_h */
//
// sdp_helpers.cpp
//// created by ilong on 2018/10/29.
//#include "sdp_helpers.h"
#include #include sdphelpers::sdphelpers()
sdphelpers::~sdphelpers()
template t sdphelpers::stringto(std::string str)
templatestd::string sdphelpers::tostring(t arg)
std::string sdphelpers::enablesimulcast(const std::string &sdp, const int numspatiallayers)else
std::string tag = "cname";
std::string cname = sdphelpers::getssrctagvalue(sdp, basessrc, tag);
if (cname.length()<=0)
tag = "msid";
std::string msid = sdphelpers::getssrctagvalue(sdp, basessrc, tag);
if (msid.length()<=0)
tag = "mslabel";
std::string mslabel = sdphelpers::getssrctagvalue(sdp, basessrc, tag);
if (mslabel.length()<=0)
tag = "label";
std::string label = sdphelpers::getssrctagvalue(sdp, basessrc, tag);
if (label.length()<=0)
sdpstr = sdphelpers::removessrcline(sdpstr, basessrc);
sdpstr = sdphelpers::removessrcline(sdpstr, basessrcrtx);
std::vectorspatiallayers;
spatiallayers.push_back(basessrc);
std::vectorspatiallayersrtx;
spatiallayersrtx.push_back(basessrcrtx);
for (int i = 1; isdphelpers::getfid(const std::string &sdp); // id card
std::regex re(pattern);
std::smatch results;
std::vectorres;
res.clear();
bool ret = std::regex_search(sdp, results, re);
if (ret)
}return res;
}std::string sdphelpers::getssrctagvalue(const std::string &sdp, uint64_t fid, std::string &tag)
return "";
}std::string sdphelpers::addsim(std::vector&spatiallayers);
for (auto item:spatiallayers)
return line+"\r\n";
}std::string sdphelpers::addgroup(uint64_t spatiallayerid, uint64_t spatiallayeridrtx)
std::string sdphelpers::addspatiallayer(std::string &cname, std::string &msid, std::string &mslabel, std::string &label, uint64_t spatiallayerid, uint64_t spatiallayeridrtx)
void sdphelpers::strreplace(std::string &basestring, std::string &src, std::string &dst)
void sdphelpers::stringreplace( std::string &strbig, const std::string &strsrc, const std::string &strdst)
}std::string sdphelpers::removessrcline(std::string &sdp ,uint64_t fid)
}return retstr;
}
WebRTC入門學習之初識WebRTC
引言 先宣告本人只是小小實習生一枚,若有不正確的,希望大家幫忙指正。一 webrtc基本架構 二 w3c提供的webrtc api 英文api 個人建議看英文版 中文api 版 三個主要api rtcdatachannel 用以任意應用資料通訊 學習重點 offer answer狀態機變化和ice狀...
webrtc之旅之什麼是webrtc(一)
這是一張經典的webrtc的架構圖,通過sip的 和閘道器將瀏覽器和終端連線起來,因此來引入我們的webrtc。所謂webrtc,首先要有web,就是圖中的各種瀏覽器,它代表了網際網路。然後就是rtc,及real time communication,即實時通訊,既然是通訊那麼就要有物件,包括 傳統...
webrtc學習筆記四 Webrtc原始碼目錄結構
webrtc的 量非常巨大,所以目錄也特別多 但是webrtc是分層的,必須掌握一些重要的目錄,在後續開發中會遇到需要修改webrtc 的需求情況,所以必須掌握主要的目錄的功能,這樣在修改 的時候,就能夠快速的定位到相應的目錄下,找到相應的檔案進行修改 如果不清楚目錄結構,就只能乙個個的去查詢,這就...