總體方案圖如下
大小流解決的核心是需要改造oneTomany,改造點如下
- publiser增加多個,並且要有角色之分,比如下
Publiser m_BigPub;
Publishe m_SmallPub;
需要主要。在下面三個隊列中,處於第一第二隊列的一律用BIg的ssrc 賦值
- 增加的subscreber要區分開,三個隊列:大流 小流 大小流
map<string,subscribe> m_lBigSub;
map<string,subscribe> m_lSmallSub;
map<string,subscreibe> m_lAllSub;
- 修改deliverVideoData_ 僞代碼爲:
deliverVideoData(std::shared_ptr<DataPacket> video_packet)
{
If(video_packe-ssrc==m_BigPub.ssrc)
m_lBigSub.send();
m_lAllSub.send()
If(video_packe-ssrc==m_SmallPub.ssrc)
m_lSmallSub.send();//這裏要主要ssrc的問題,因爲用戶 在大小流之間來回切換,ssrc應該不變
m_lAllSub.send()
}
- 修改deliverFeedback_函數。僞代碼如下
deliverFeedback(std::shared_ptr<DataPacket> fb_packet)
{
If(packet->ssrc IN m_lSmallSub)//這塊可能不對,不應該用ssrc來表示,應該是能區分訂閱這的一個變量
modifyToSmallSrrc();
feedbackSink_->deliverFeedback(fb_packet);
}