webrtc 開啟Simulcast功能

2021-08-30 15:16:20 字數 2848 閱讀 5514

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 的需求情況,所以必須掌握主要的目錄的功能,這樣在修改 的時候,就能夠快速的定位到相應的目錄下,找到相應的檔案進行修改 如果不清楚目錄結構,就只能乙個個的去查詢,這就...