從WebRtc學習RTCP協議

文章目錄

    • RTCP支持的消息類型
    • RTCP協議頭
    • WebRTC的反饋報文
      • RTPFB支持的報文類型:
      • PSFB支持的報文類型:
  • 參考

RTCP是RTP的控制協議.
那么RTCP能對RTP做哪些控制呢?其中最為大家熟知的就是 丟包控制
發送端發送數據后,接收端如果發現有RTP包丟失了,可以使用RTCP的 NACK報文通知發送方,告訴對方具體是哪些包丟失了,然后讓發送方重發前面丟失的包。
此外,接收端還可以使用RTCP的 RR報文向發送端發送接收報告,報告中記錄著從上一次報告到本次報告之間丟失了多少包、丟包率是多少、延時是多少等一系列信息。
同理,發送端也可以向接收端發送 SR報文,報告一段時間內一共發送了多少包等。
RTCP支持的消息非常多,在此我們將一些最常見的RTCP報文消息整理了出來.
SR和RR報文。這兩個報文在WebRTC中至關重要,因為網絡質量評估與控制需要的大量參數都是從這兩個報文中獲得的。
下面介紹一下RTCP支持的其他的消息類型:

RTCP支持的消息類型

在這里插入圖片描述
SDES報文是用來描述(音視頻)媒體源的。它可以描述的內容包括媒體源的名稱、Email地址,電話等。但實際上,這些描述項都沒太大價值。唯一有價值的是CNAME項,其作用是將不同的源(SSRC)綁定到同一個CNAME上。舉個例子,當SSRC有沖突時,可以通過CNAME將舊的SSRC更換成新的SSRC,從而保證在通信的每個SSRC都是唯一的。
BYE報文用于說明哪些(音視頻)媒體源現在不可用了。當WebRTC收到該報文后,應該將SSRC所對應的通道刪除。
APP報文是給應用預留的RTCP報文,應用可以根據自己的需要自定義一些應用層可以解析的報文。
RTPFB報文,即RTP的反饋報文,是指RTP傳輸層面的報文。該報文可以裝入不同類型的子報文。
與RTPFB對應的是PSFB,即RTP中與負載相關的反饋報文。同樣,該報文也可以裝入不同類型的子報文。

RTCP協議頭

RTCP協議頭如下:
在這里插入圖片描述

Version即協議版本,固定值為2。P字段為填充位標識。PT字段即Payload Type,與RTP中的PT字段類似。
RTCP中的Count字段是RTP中所沒有的,該值針對RTCP中不同的報文有不同的含義:
對于RR/SR報文而言,Count表示它們所攜帶的接收報告的個數
SDES報文而言,Count表示SDES報文中item的個數
對于BYE報文而言,Count表示BYE報文中SSRC/CSRC的個數
而對于APP報文來說變化就比較大了,Count用于標識應用自定義的子消息類型。
Length字段表示整個RTCP包的大小,包括RTCP頭、RTCP負載以及填充字節。需要注意的是,Length字段是以4字節為單位的,即(N?1)個4字節。

WebRTC的反饋報文

已知PT為205和206的報文類型屬于反饋報文。報文中可以包含多個子報文,其中WebRTC使用到的報文只有某幾項。

RTPFB支持的報文類型:

在這里插入圖片描述
第一項NACK,用于通知發送方在上次包發送周期內有哪些包丟失了:
NACK報文中包含兩個字段:PID和BLP。PID(Package ID)字段用于標識從哪個包開始統計丟包;
而BLP(16位)字段表示從PID包開始,接下來的16個RTP包的丟失情況。(BLP(Bitmask of Following Lost Packet),從丟失包開始的位掩碼)
第二項TMMBR和第三項TMMBN是一對報文,TMMBR表示臨時最大碼流請求報文,TMMBN是對臨時最大碼流請求的應答報文。這兩個報文雖然在WebRTC中實現了,但已被WebRTC廢棄,其功能由TFB和REMB報文所代替。
第四項TFB是WebRTC中TCC[插圖]算法的反饋報文,該報文會記錄包的延遲情況,然后交由發送端的TCC算法計算下行帶寬。(TCC(Transport-wide Congestion Control),基于發送端的帶寬評估算法)

PSFB支持的報文類型:

在這里插入圖片描述
PSFB報文包括PLI報文、FIR報文以及REMB報文。
其中PLI報文與FIR報文很類似,當發送端收到這兩個報文時,都會觸發生成關鍵幀(IDR幀)。
PLI報文是在接收端解碼器無法解碼時發送的報文。
FIR報文主要應用于多方通信時后加入房間的參與者向已加入房間的共享者申請關鍵幀。通過這種方式,可以保障后加入房間的參與者不會因收到的第一幀不是關鍵幀而引起花屏或黑屏的問題。
REMB報文是WebRTC增加的反饋報文,用于將接收端評估出的帶寬值發給發送端。不過,由于最新的WebRTC已全面啟用基于發送端的帶寬估算方法,即TCC,因此目前REMB僅用于向后兼容,不再做進一步更新。

參考

李超《WebRTC音視頻實時互動技術:原理、實戰與源碼分析》
https://weread.qq.com/web/reader/377320f07260a55337761c1kc81322c012c81e728d9d180

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376676.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376676.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376676.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

白話經典算法系列之中的一個 冒泡排序的三種實現

冒泡排序是很easy理解和實現,,以從小到大排序舉例: 設數組長度為N。 1.比較相鄰的前后二個數據,假設前面數據大于后面的數據,就將二個數據交換。 2.這樣對數組的第0個數據到N-1個數據進行一次遍…

如何用java代碼讓android Market顯示指定的程序以便用戶下載?

Uri uri Uri.parse("market://search?q名稱");Intent i new Intent("Intent.ACTION_VIEW", uri);startActivity(i);//根據應用程序ID應用程序的包名Uri urii Uri.parse("market://details?idcom.xiaoqiu.test");Intent ii new Intent(&quo…

無鎖隊列設計思路以及簡要代碼

文章目錄非并發的一寫一讀環形隊列多讀多寫環形隊列非并發的一寫一讀環形隊列 讀指針: 1、先判斷是否有數據 2、讀取數據 3、操作指針 寫指針: 1、先判斷空間是否足夠 2、寫入數據 3、操作指針 所以代碼也十分簡單: bool putqueue(void* pDa…

vs 2012,vs 2013問題系列

系統環境: 64位 win7 1,問題: 之前能連接tfs進行源碼管理,期間有改過本地電腦的時間,再后來使用vs 2012連接tfs卻失敗了。錯誤碼:TF31002。排除了網絡問題,用戶權限問題,tfs服務器問…

Linux查看系統信息的一些命令

轉:http://www.cnblogs.com/chenwenbiao/archive/2011/07/18/2109983.html 系統 # uname -a # 查看內核/操作系統/CPU信息 # head -n 1 /etc/issue # 查看操作系統版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看計…

CPU Cache對于并發編程的影響

文章目錄引子CPU Cache對于并發的影響讀寫順序對性能的影響字節對齊對Cache的影響小結引子 下面給出兩個極其相似的代碼&#xff0c;運行出的時間卻是有很大差別&#xff1a; 代碼一 #include <stdio.h> #include <pthread.h> #include <stdint.h> #includ…

textarea 在瀏覽器中固定大小和禁止拖動

http://blog.sina.com.cn/s/blog_641d569301011naz.html HTML 標簽 textarea 在大部分瀏覽器中只要指定行&#xff08;rows&#xff09;和列&#xff08;cols&#xff09;屬性&#xff0c;就可以規定 textarea 的尺寸&#xff0c;大小就不會改變&#xff0c;不過更好的辦法是使…

hibernate操作時報錯

報錯&#xff1a;[ERROR] AbstractBatcher Exception executing batch: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1原因&#xff1a;視具體情況而定&#xff0c;我這邊是代碼被修改過…

bugfix:MySQL內存使用率無限增長以及kill手法

問題&#xff1a;昨天mysql 宕機了一次&#xff0c;重啟&#xff0c;然后繼續運行業務代碼的時候發現問題&#xff0c;mysql內存占用率上升較快&#xff0c;于是搜了搜&#xff0c;遇到一個&#xff1a; http://blog.itpub.net/29510932/viewspace-2129312/ 根據思路&#xff0…

軟工之初識

我們之前已經在完全不懂軟件工程的情況下&#xff0c;已經做完了兩個小系統&#xff0c;雖然能夠運行&#xff0c;但其中有很多的問題&#xff0c;學習軟工就是讓我們在工程學原理的指導之下去開發和設計軟件。 軟件工程同大多數書講的都是一樣的&#xff0c;首先對軟件工程有一…

perf +火焰圖使用

以mysqld進程為例&#xff1a; [rootVM-90-225-centos ~]# ps -ef | grep mysqld root 9808 9621 0 19:30 pts/7 00:00:00 grep --colorauto mysqld root 16104 1 0 17:30 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir/usr/loc…

Mysql 遇到的編碼問題。

今天幫小朋友做一個項目&#xff0c;碰到一個挺搞的問題。在幫她安裝mysql的時候一直是next&#xff0c;沒有去注意一些細節&#xff0c;不曉得有沒有漏掉設置編碼那一部分。。 結果在用sql文件導入數據庫MySQL -h localhost -u root -p xxx < e:\xxx.sql 執行的時候錯誤提…

在一個字符串中找到第一個只出現一次的字符

題目&#xff1a;在一個字符串中找到第一個只出現一次的字符&#xff0c;如輸入abaccdeff&#xff0c;則輸出b&#xff1b;具體實現如下&#xff1a;#include <iostream> #include <string> using namespace std; void FindChar(const string &strBuf) {int nA…

py腳本:獲取進程信息

這里以mysqld進程為例子 # pip install psutil import psutil import time import re, sys# x:進程name y:非進程name # 由于這里監控的是mysqld&#xff0c;如果不加限制的話會先識別mysqld_safe&#xff0c;所以要加上mysql_safe的判別 def processinfo(x, y):p_list psut…

sysctl -P 報錯解決辦法

sysctl -P 報錯解決辦法問題癥狀修改 linux 內核文件 #vi /etc/sysctl.conf后執行sysctl -P 報錯error: "net.bridge.bridge-nf-call-ip6tables" is an unknown keyerror: "net.bridge.bridge-nf-call-iptables" is an unknown keyerror: "net.bridg…

-bash: belts.awk: command not found

執行awk命令時&#xff0c;沒有問題。可是執行awk腳本時&#xff0c;出現這個問題&#xff1a;-bash: belts.awk: command not found。 既然之前直接執行awk命令沒有問題&#xff0c;說明awk已經裝了&#xff0c;本身是沒有問題的。那就說明路徑不對&#xff0c;執行echo $PATH…

nagios快速安裝

1、安裝軟件包&#xff08;準備軟件包&#xff09; yum install httpd gcc glibc glibc-common gd gd-devel 2、建立一個賬戶 創建一個名為nagios的帳號并給定登錄口令 /usr/sbin/useradd nagios passwd nagios 創建一個用戶組名為nagcmd用于從Web接口執行外部命令。將nagios用…

零拷貝機制在文件傳輸中的使用手法

文章目錄文件傳輸&#xff08;讀取與發送&#xff09;中的拷貝與上下文切換零拷貝技術sendfilesendfile SG-DMAmmap writespliceDirect I/O經典應用文件傳輸&#xff08;讀取與發送&#xff09;中的拷貝與上下文切換 如果服務端要提供文件傳輸的功能&#xff0c;最簡單的方式…

Effective Modern C++翻譯(3)-條款2:明白auto類型推導

條款2 明白auto類型推導 如果你已經讀完了條款1中有關模板類型推導的內容&#xff0c;那么你幾乎已經知道了所有關于auto類型推導的事情&#xff0c;因為除了一個古怪的例外&#xff0c;auto的類型推導規則和模板的類型推導規則是一樣的&#xff0c;但是為什么會這樣呢&#xf…

信息論與編碼復習

若信源有m種消息&#xff0c;且每個消息是以相等可能產生的&#xff0c;則該信源的信息量可表示為Ilogm。 信息率是通過接收到的信息可獲得的發送信息的信息量,即互信息。單位:bit/符號。 信息速率是單位時間內傳輸的信息量。單位:bit/s 碼字CodeWord。由若干個碼元組成&#x…