BitrateProber也是PacedSender的屬性類(lèi)男翰,第一眼看到BitrateProber
這個(gè)類(lèi)名時(shí)以為是類(lèi)似網(wǎng)速探測(cè)功能的,其實(shí)不然窿克,BitrateProber只是為了維持一段時(shí)間和數(shù)據(jù)量?jī)?nèi)發(fā)送的網(wǎng)速不低于某一比特率,(其實(shí)也是探測(cè)網(wǎng)速的一個(gè)輔助功能,只有發(fā)送足量的數(shù)據(jù)档址,才好測(cè)量當(dāng)前網(wǎng)速),所以在整個(gè)直播生命周期中邻梆,該類(lèi)激活的時(shí)間比較短守伸。一般檢測(cè)到網(wǎng)速突變時(shí)會(huì)觸發(fā)。
重要函數(shù)解讀:
int64_t BitrateProber::GetNextProbeTime(const ProbeCluster&
cluster):根據(jù)網(wǎng)速和已經(jīng)發(fā)送的數(shù)據(jù)量獲得浦妄,大概算法是(已經(jīng)發(fā)送的數(shù)據(jù)量/當(dāng)前碼率)+當(dāng)前時(shí)間(代碼中只有發(fā)送完成后調(diào)用尼摹,所以只發(fā)送完一段數(shù)據(jù))。暫時(shí)不知道這樣的意義剂娄,為什么消耗了多長(zhǎng)時(shí)間就要等待多長(zhǎng)時(shí)間蠢涝?(補(bǔ)充,因?yàn)閞tp發(fā)送無(wú)法知道是否成功發(fā)送阅懦,這里只是按照指定的網(wǎng)速一直發(fā)送和二,所以下次發(fā)送的時(shí)間 = 已發(fā)送的大小/碼率)
size_t BitrateProber::RecommendedMinProbeSize() :獲取每次發(fā)送的大小,與碼率有關(guān)系故黑,根據(jù)碼率每次發(fā)送2ms的數(shù)據(jù)
重要接口解讀:
void BitrateProber::CreateProbeCluster(int bitrate_bps, int64_t now_ms):創(chuàng)建ProbeCluster儿咱,實(shí)際ProbeCluster表示一次Probe過(guò)程庭砍,一個(gè)BitrateProber可以有多個(gè)ProbeCluster,但是只能是創(chuàng)建時(shí)間在5s之內(nèi)的混埠,否則新的會(huì)釋放舊的怠缸。下面的所以網(wǎng)速皆指此初始化的bitrate_bps。也就可以理解每次網(wǎng)速變化大的時(shí)候就會(huì)重新該過(guò)程
void BitrateProber::OnIncomingPacket(size_t packet_size):觸發(fā)ProbingState::kActive狀態(tài)钳宪,但是條件是packet_size不能太小揭北,具體大小和當(dāng)前網(wǎng)速有關(guān)系,一般是200B,除非預(yù)測(cè)網(wǎng)速在100Bk/s以下吏颖。
int BitrateProber::TimeUntilNextProbe(int64_t now_ms):下一次Probe時(shí)間搔体,主要用于通知線程下一次循環(huán)時(shí)間