一:PeerConnection參數詳解
在前面我們使用RTCPeerConnection的時候,把參數設置成了null(或者不填),因為這個參數configuration本身是可以不填的。
(一)RTCPeerConnection格式
(二)參數了解
在RTCconfiguration這個結構體里有好幾項:
最關鍵的一項是iceServers,也就是說我們在建立這個RTCPeerConnection之前可以給他傳入很多的iceServers(也就是我們的STUN和TURN服務)。
通過這個STUN和TURN服務可以做檢測,獲取到相應的反射地址和中繼地址,之后他就可以進行這些連接性檢測的時候找出它的優先級,那么優先級我們上節就說了,在測試STUN和TURN服務的時候那個工具里就有這個優先級的顯示;
第二項是iceTransportPolicy,也就是傳輸的策略,它的傳輸策略有兩種,一種是all(支持STUN/TURN)一種是relay(只支持TURN服務)。
如果是all的話就支持host本機的地址,也就是穿越NAT反射后的candidate以及中繼的candidate,如果是relay類型只收集中繼類型的candidate也就是中繼的通路,這是第二項。
第三項是bundlePolicy,bundlePolicy這個策略實際也有好幾種,默認是balanced,也就是平衡的,后面會詳細的介紹。
第四項是rtcpMuxPolicy的復用,復用策略,默認是require。
第五項peerIdentity就是一個標識的字符串。
第六項certificates就是一些證書,也就是我們每一個連接,每一個可連通的候選者都需要有一個證書。
所以如果你有多個連接,你就有多個證書,但是一般情況下如果是復用的話,我就用一個證書就可以了,這樣可以增加它建成整個傳輸的速度。
第七項就是iceCandidatePoolSize,也就是我要收集的候選者的空間有多大,默認是0;如果你設置成5的話,如果你有20個,那只選其中的5個。
(三)參數詳解---bundlePolicy策略
Balanced實際就是音頻軌、視頻軌各自各自使用一個傳輸通道,是分開的。其中多路音頻軌是共用同一個傳輸通道、多路視頻軌也是使用同一個通道。
max-compat是最大兼容性,怎樣才能達到最大的兼容性呢?就是每一個軌都有自己的通道,如果我有這個兩個音頻,一個視頻,就有三個通道,就是每個音頻走自己的,那視頻也是一樣的。等到Balanced策略不成功的時候,就使用max-compat這種方式。
max-bundle就是最大化的使用一個綁定,那就是將所有的這些這個媒體的這個流都用一個這個通道進行傳輸。這是webrtc建議的方式,這樣的話對於底層來說就比較簡單了,而且你建立這個連接之后,只需要一個證書,而不需要一堆證書,否則的話,你每一個連接都需要一個證書,就會非常的耗費時間。
(四)參數詳解---certificates證書
再下來就是certificates證書,是授權的,可以使用的,進行連接的一組證書。我們可以為每個連接提供這一組證書,也可以不提供,不提供的話就會自動產生,所以這個證書的話一般我們也不會設置。
(五)參數詳解---iceCandidatePoolSize候選者池大小
那接下來的是iceCandidatePoolSize池大小,是一個16位的整數,用於指定預取的這個ICE候選者的個數。
那么我們如果一旦設置了一個池,並且擁有比池大小多的候選者,那么我們就不能放在這里了,多出來就不放入池中。
還有一個重要的一個功能,如果這個iceCandidatePoolSize它的值發生變化了,那么會重新收集候選者,比如最開始我設成了3,然后我緊接着設成了10,這個時候會在底層會重新觸發收集候選者,如果某條鏈路由於網絡原因發生擁塞無法通信,那么我們可以改變這個值,讓它觸發收集候選者,重新收集這個Candidate,然后選擇其他路。
(六)參數詳解---iceTransportPolicy傳輸策略
傳輸策略有兩種,一種是那個relay就是中繼,就是收集這個候選者的時候,只收集這個中繼的候選者。因為在真實的網絡情況下,中繼的這個候選者可能會經常使用,而NAT穿越在國內實現比較困難,所以一般都是使用relay。
然后還有all,就是說我的這個hosts的類型,NAT穿越反射的類型,以及這個relay類型的都要收集,這是它的不同的策略,我們一般用all。
(七)參數詳解---iceServers
包括了credential憑證,實際是有一個雙層的含義,會根據下面這個credentialType類型,然后去處理他,如果credentialType是password的,那么credential屬性就是password,如果credentialType是oauth的,credential這個值就是一個結構體,這個結構體也就包括了一個Key,還有一堆證書。是根據credentialType類型然后來看他的credential的值。
urls:比如說我們設置的這個STUN和這個TURN服務,如果有的話,每一個都是一個url串,通過這個url串我們可以訪問到這個地址,從而訪問STUN和TURN服務。
username:跟credential匹配,一個用戶名一個密碼
(八)參數詳解---rtcpMuxPolicy復用策略
第一個是negotiate協商,就是收集RTCP和RTP復用的ICE候選者,如果不能復用,那么就單獨出來各自走各自的通道,RTP走RTP的,RTCP走RTCP的就好了。
第二個是require,就是我就一定要收RTP和RTCP復用的ICE,這些候選者才真正使用,那么如果不能復用,那就失敗。
(九)參數詳解---addIceCandidate
那么candidate這個類型包括哪些屬性呢?
candidate,候選者描述信息;
sdpMid代表着每一路流,這個ID之前在講SDP的時候給大家介紹過,比如說我們那個視頻是video就是0。
sdpMLineIndex,是m=的索引值,它是第幾個M?比如說我們在這個SDP中一共有兩個,一個視頻,一個音頻,那么的視頻是第一個,音頻是第二個,那么引入音頻的話,就是2,視頻的就是1。
usernameFragment,就是提到的ICE uflag字段。
本機的信令服務器,再加上這個STUN和TURN服務,這樣我們就能做出一個真正的一對一的音視頻實時互動直播系統!!!
二:直播系統中的信令及其邏輯關系
(一)客戶端發送的信令
join加入房間
客戶端發送信令比較少,第一個就是加入房間。當一個用戶跟服務器連接之后,會發送一個join,那么服務器端在收到join這個信息之后就將這個用戶加入到這個服務器端。
leave離開房間
第二個就是離開房間,這樣能夠隨時知道房間內的人數實際有多少。我只進不出這樣的話它就一直累加,那可能服務器端有一萬人,實際真正的只有兩個人,這也是我們很多直播系統里弄假數據的一個方法,它只進不出,但我們這里要有進有出。
message端到端消息
第三個就是message,message就是將消息之間發送給對端,怎么發送呢?也就是說它首先發送到服務端,服務端收到之后再將它中轉給任意一個客戶端 ,所以在服務器端是沒有任何的邏輯操作的,只是做一個轉發而已。
以上就是三個主要的命令,也就是加入房間、離開房間、和發送端對端的消息,但是端對端的消息我們又可以細分三個。
(二)補充端到端消息類型
Offer消息
第一個就是通過我們createOffer獲取到了我本機的媒體描述信息,就是我的媒體能力,這個我們此前已經介紹了就是createOffer,
當調用這個函數獲取到我本機的媒體信息之后,通過這個SDP,它是一個SDP的格式描述的,它就直接將它發送到服務端,服務端收到這個Offer之后轉給另外一個終端,就可以將整個的協商過程進行串起來了。
Answer消息
同樣的道理,當對方收到這個Offer之后它調用setRemoteDescription之后它要調createAnswer然后之后才能調用setLocalDescription,那在創建完Answer之后它也要創建Answer消息,也就是說將它本地的媒體協商信息傳到呼叫端,這是Offer和Answer這就形成了一個交互。
Candidate消息
除此之外還有Candidate,也就是說如果我們雙方要通信的話要知道彼此的candidate,對方拿到這個candidate之后就要進行這個連通性檢測,找到一個非常高效的鏈路之后它們后邊音視頻數據傳輸打好基礎。
(三)服務端信令
joined已加入房間
第一個是joined,這個很簡單,當一個用戶發送join加入房間之后,服務端說你這個已經加入成功了,要給他回一個消息確認:joined,那客戶端收到這個joined之后就知道我與服務端這個信令已經發送成功了,那它可以用joined的這個消息去做后面的邏輯處理。
otherjoin其他用戶加入房間
當有一端發送join到服務端之后呢,服務端一方面要給發送者回一個joined消息告訴它你已經加入了,另外它要給另外一個端另外一個參與者發送一個otherjoin,就是告訴另外一個參與者說有有另外一個人加進來了,就是這個消息,那另外一個人知道有人加進來了那就知道現在有兩個人現在在這個房間中了。這個時候我們就可以進行媒體協商然后進行音視頻的通訊了。這就是otherjoin。
full房間人數已滿
第三個是full,也就是當有第三個用戶再加入房間的時候,就不讓他通訊了,就告訴他這個房間人數已滿,你不能再來了,我們只支持一對一的音視頻傳輸;
leaved已離開房間
用戶離開的時候它發送leave,服務端就給他回一個leaved說確認你已經離開了,那一個比較好的處理方式是說當用戶收到這個leaved之后再離開。
這個有利有弊,可以辯證的看,就是說我們在處理這種消息比較多的之后是兩個方面都要做的,就是說當用戶離開的時候,為了客戶端能快速的離開,那它可能就直接發送完了就斷開了;
但是帶來一些麻煩就是說你雖然走了但是你這個leave有可能沒有發送到服務端,這個時候服務端就要等這個超時時間,所以它在統計人數或者是說在做一些邏輯處理的時候可能就比較麻煩。
所以我們一般的做法是客戶端發送leave消息要等一個超時時間,如果服務端在這個超時時間內回這個消息了,那我就用回這個消息去釋放相應的資源,這樣整個流程就是通的了。
如果這個超時時間內沒有回來,就是該離開還得離開,因為這個時候我還得離開,因為我不能等你,不能讓用戶感覺我卡死了。這就是leaved。
bye對方離開房間
另外一個就是也要告訴對方,也就是說發送一個bye告訴對方這個人離開了,在對方的用戶列表里就要將這個人刪除掉,或者說知道對方離開了,對我們一對一的來說,那它也要釋放一些資源再等待,當有另外一個用戶來的時候再重新創建資源進行音視頻的通訊。
(四)直播系統的消息處理流程(與信令服務器的交互)
成員組成:
左邊有個Caller,它是呼叫者,第二個是SigServ就是信令服務器,第三個是Callee就是被呼叫者,第四個Callee是另外一個被呼叫者
通信流程:
1.首先呼叫者它要創建與信令服務器建立連接,對於其他端來說也是先把連接建立好,否則信令就是不通的;
2.這時候呼叫者首先發送一個信令是join,說我要加入房間,那么信令服務器回一個joined,表示你這個加入消息已經知道了,已經將你加入到房間了;
3.另外一個用戶這時候也發送一個join加入房間,這時服務器也回一個joined,就是一個請求一個應答,這樣它也被加入房間,當第二個用戶也加入房間之后,服務端要給第一個用戶回一個otherjoin,這時候第一個用戶就知道有另外一個用戶已經進來了,這時候他們可以進行協商了,然后進行通訊了。那么怎么進行媒體協商呢?就是發送端對端的消息,也就是message,它這個message里包括三個包括我們剛才講的,也就是一個Offer,也就是它剛才發送的一個Offer給對方,對方處理完了然后回一個Answer在回來,這時候當有收集到這個Candidate地址的時候就收集好了,收集完了之后就通過這個信令服務器轉發給對方,對方拿到這個Candidate之后就進行 連通性檢測,檢測成功了之后這時候就可以進行P2P或者TURN服務進行音視頻數據的轉發,那它們就真正的通訊了。
4.如果這時候有第三個用戶Callee發送join說我要加入房間,那信令服務器一查看它這個列表現在已經有兩個用戶了,所以就給它返回一個full,說你不能加入這個房間。這時候第三個用戶就要釋放資源,比如這個提示信息比如“房間已經滿了,不能再添加了”;所以這個時候與第三個用戶已經沒有任何關系了,就只有Caller和Callee這兩個用戶。
5.那再下面,當有一個用戶說我要離開了,比如說這里的Callee,它發送一個leave給信令服務器,信令服務器收到這個leave之后,首先也要告訴對端,就是說對方和你說byebye了,那你要做相應的處理,緊接着信令服務器再給這個發送者回一個leaved,也就是說你這個消息我已經成功轉發了。
6.同樣的道理如果是主叫方去發送這個leave,那這個信令服務器也是走同樣的流程,先給另一方發送bye,然后回一下這個leaved,然后整個信令服務流程就是這樣一個關系。
(五)代碼實現處理流程
'use strict' var https = require("https"); var fs = require("fs"); var express = require("express"); var serveIndex = require("serve-index"); var socketIo = require("socket.io"); //引入socket.io var USERCOUNT = 3; // var log4js = require('log4js'); //開啟日志 var logger = log4js.getLogger(); logger.level = 'info'; var app = express(); //實例化express app.use(serveIndex("./")); //設置首路徑,url會直接去訪問該目錄下的文件 app.use(express.static("./")); //可以訪問目錄下的所有文件 //https server var options = { key : fs.readFileSync("./ca/learn.webrtc.com-key.pem"), //同步讀取文件key cert: fs.readFileSync("./ca/learn.webrtc.com.pem"), //同步讀取文件證書 }; var https_server = https.createServer(options,app); //綁定socket.io與https服務端 var io = socketIo.listen(https_server); //io是一個節點(站點),內部有多個房間 https_server.listen(443,"0.0.0.0"); //---------實現了兩個服務,socket.io與https server;都是綁定在443,復用端口 //-----處理事件 io.sockets.on("connection",(socket)=>{ //處理客戶端到達的socket //監聽客戶端加入、離開房間消息 socket.on("join",(room)=>{ socket.join(room); //客戶端加入房間 //io.sockets指io下面的所有客戶端 //如果是第一個客戶端加入房間(原本房間不存在),則會創建一個新的房間 var myRoom = io.sockets.adapter.rooms[room]; //從socket.io中獲取房間 var users = Object.keys(myRoom.sockets).length; //獲取所有用戶數量 logger.info("the number of user in room is:"+users); //開始回復消息,包含兩個數據房間和socket.id信息 if(users < USERCOUNT){ socket.emit("joined",room,socket.id); //給本人 //如果房間有其他人,發送otherjoin消息給他們 if(users > 1){ socket.to(room).emit("otherjoin",room,socket.id); } }else{ //告知人滿,別來 socket.leave(room); socket.emit("full",room,socket.id); } }); socket.on("leave",(room)=>{ var myRoom = io.sockets.adapter.rooms[room]; //從socket.io中獲取房間 var users = (myRoom)?Object.keys(myRoom.sockets).length:0; //獲取所有用戶數量 socket.leave(room); //離開房間 logger.info("the number of user in room is:"+(users-1)); socket.emit("leaved",room,socket.id); //給自己發送leaved socket.to(room).emit("bye",room,socket.id); //給其他人發送bye }); socket.on("message",(room,msg)=>{ socket.to(room).emit("message",room,msg); }); });
三:CreateOffer參數詳解
(一)在:WebRTC學習(六)端對端傳輸中使用過createoffer方法:
(二)CreateOffer基本格式和參數
options共有4個,前面提到2種(offerToRecieveAudio和offerToRecieveVideo),這里介紹另外兩種(iceRestart和voiceActivityDetection)
(三)CreateOffer中options參數---iceRestart(重新啟用ICE)
重啟啟動ICE之后就會重新啟動Candidate收集,在收集candidate完成之后進行連通性檢測。
那它有什么好處呢?
- 場景一:就是當我們使用手機的時候從4G換成wifi,或者從wifi換成4G的時候,實際它的鏈路已經發生了變化,就是說我們的IP地址和出口都發生了變化,這時我們應該重新進行鏈路選擇;
- 場景二:就是說我們的傳輸網絡是動態變化的(與數據流量的多少,是否有人搶占帶寬等等都是有關的),當我們最開始選擇的線路,是比較高效的,連通性比較好。但是過了一端時間后,由於某種原因產生擁塞,這時如果有其他更好的通路的話,我們有必要重新選擇一條路。
- 場景三:就是比如說我們在服務器端增加了新的中繼節點 (TURN服務),比如我們又增加了三個TURN服務,需要將這些TURN服務增加到連接的配置服務中去,那這個時候也應該重新啟動ICE讓它重新選路。
基於以上的這些原因,這個iceRestart是非常好的一個方案,當我們設置它為true的時候,當有以上場景的變化的時候就可以觸發重新選路,自動的去幫我們去選擇新的有效的數據傳輸的線路,這是一個非常好的機制。
(四)CreateOffer中options參數---voiceActivityDetection(靜音檢測)
靜音檢測有什么的好處?
在本機端,當我們不說話的時候,有一些背景噪音實際是可以被忽略掉,當檢測到這個沒有人聲只是一些背景噪音的時候,我們可以選擇不傳輸這些背景噪音。
在另外一端呢,當我們打開了靜音檢測之后,如果沒有音頻數據過來的時候,會自己去創建靜默包(在本機,不進行網絡傳輸),在沒有聲音的時候第一個可以減少帶寬;另外,可以把一些沒必要的背景音省去。
(五)協商過程代碼測試ICE restart
1.效果如何查看?ICE restart的最終的結果反映在哪?
結果反映在SDP,反映到我們的媒體協商上:在媒體協商的時候,當進行交換SDP的時候,通訊的雙方獲取ICE uflag屬性。
之前學習SDP規范中了解ICE ufrog 和 ICE password,那這兩個參數是干什么呢?
就是用於驗證candidate對(通路)的連通性,當鏈路發生變化的時候,就要重新進行這個檢測。
注意:在檢測過程中,如果發現一條新的通路(更高效),這時就會把數據切換到新的通路,但是在新的通路沒有建成之前,老的通路還是依然在正常傳輸數據。
我們怎么能知道這個ICE restar的有沒有真正的起效果,我們的觀察點就在於協商后的SDP,看他的ICE-uflag和ICE password有沒有發生變化。
如果沒有變化的話,說明ICE沒有啟動,如果發生變化了,說明ICE啟動了。
本次代碼通過主動去調用createOffer方法,實現重新檢測,使得ICE ufrog屬性修改(當然,前提是設置為true)
2.代碼實現
server.js不變,使用sudo node server.js啟動:

'use strict' var http = require("http"); var https = require("https"); var fs = require("fs"); var express = require("express"); var serveIndex = require("serve-index"); var socketIo = require("socket.io"); //引入socket.io var USERCOUNT = 3; // var log4js = require('log4js'); //開啟日志 var logger = log4js.getLogger(); logger.level = 'info'; var app = express(); //實例化express app.use(serveIndex("./")); //設置首路徑,url會直接去訪問該目錄下的文件 app.use(express.static("./")); //可以訪問目錄下的所有文件 //https server var options = { key : fs.readFileSync("./ca/learn.webrtc.com-key.pem"), //同步讀取文件key cert: fs.readFileSync("./ca/learn.webrtc.com.pem"), //同步讀取文件證書 }; var https_server = https.createServer(options,app); //綁定socket.io與https服務端 var io = socketIo.listen(https_server); //io是一個節點(站點),內部有多個房間 https_server.listen(443,"0.0.0.0"); //---------實現了兩個服務,socket.io與https server;都是綁定在443,復用端口 //-----處理事件 io.sockets.on("connection",(socket)=>{ //處理客戶端到達的socket //監聽客戶端加入、離開房間消息 socket.on("join",(room)=>{ socket.join(room); //客戶端加入房間 //io.sockets指io下面的所有客戶端 //如果是第一個客戶端加入房間(原本房間不存在),則會創建一個新的房間 var myRoom = io.sockets.adapter.rooms[room]; //從socket.io中獲取房間 var users = Object.keys(myRoom.sockets).length; //獲取所有用戶數量 logger.info("the number of user in room is:"+users); //開始回復消息,包含兩個數據房間和socket.id信息 if(users < USERCOUNT){ socket.emit("joined",room,socket.id); //給本人 //如果房間有其他人,發送otherjoin消息給他們 if(users > 1){ socket.to(room).emit("otherjoin",room); } }else{ //告知人滿,別來 socket.leave(room); socket.emit("full",room,socket.id); } }); socket.on("leave",(room)=>{ var myRoom = io.sockets.adapter.rooms[room]; //從socket.io中獲取房間 var users = (myRoom)?Object.keys(myRoom.sockets).length:0; //獲取所有用戶數量 logger.info("the number of user in room is:"+(users-1)); socket.emit("leaved",room,socket.id); //給自己發送leaved socket.to(room).emit("bye",room,socket.id); //給其他人發送bye }); socket.on("message",(room,msg)=>{ socket.to(room).emit("message",room,msg); }); });
index.html添加button控件:

<html> <head> <title> CreateOffer ICE start </title> </head> <body> <h1>CreateOffer ICE start</h1> <div> <video autoplay playsinline id="localvideo"></video> <video autoplay playsinline id="remotevideo"></video> </div> <div> <button id="createOffer">createOffer</button> </div> </body> <script type="text/javascript" src="https://webrtc.github.io/adapter/adapter-latest.js"></script> <script type="text/javascript" src="./js/main.js"></script> </html>
main.js模擬協商過程:
'use strict' var createOffer = document.querySelector("button#createOffer"); var pc1 = new RTCPeerConnection(); //全局變量peerconnection var pc2 = new RTCPeerConnection(); //對端的連接 function handleError(err){ console.err(err.name+":"+err.message); } function getAnswer(desc){ console.log("Answer:"); console.log(desc.sdp); pc2.setLocalDescription(desc); pc1.setRemoteDescription(desc); } function getOffer(desc){ console.log("Offer:"); console.log(desc.sdp); pc1.setLocalDescription(desc); pc2.setRemoteDescription(desc); //對端設置 //並且對於對端,需要設置Answer pc2.createAnswer() .then(getAnswer) .catch(handleError); } function getMediaStream(stream){ stream.getTracks().forEach((track)=>{ pc1.addTrack(track); //直接將流(拆解為軌),添加到peerconnection中去 }); //添加流之后,就可以創建SDP了!!!! var options = { offerToReceiveAudio:0, offerToReceiveVideo:1, //iceRestart:true //ture,鏈路發生變化,通過createoffer觸發協商的重建
iceRestart:false //false,鏈路發生變化,不進行修改 }; pc1.createOffer(options) .then(getOffer) //設置本地描述信息setLocalDescription .catch(handleError); } //獲取媒體流數據 function getStream(){ var constraints = { audio:0, video:true }; navigator.mediaDevices.getUserMedia(constraints) .then(getMediaStream) //直接將流(拆解為軌),添加到peerconnection中去 .catch(handleError); } function testOfferICEStart(){ if(!pc1){ console.error("pc is null"); return; } //如果獲取了peerConnection,下面開始獲取流 getStream(); } createOffer.onclick = testOfferICEStart;
3.結果測試(兩次觸發事件)
(1)iceRestart:false

Offer: v=0 o=- 4985865762926704574 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:0XGy a=ice-pwd:tg7zNH02+5s57T2qxPZkE5HC a=ice-options:trickle a=fingerprint:sha-256 6E:80:A1:C8:84:BA:84:B6:05:23:1A:17:B0:91:07:59:B6:A8:71:4C:46:31:CE:48:52:BD:64:35:B9:2E:36:2C a=setup:actpass a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=sendrecv a=msid:- c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 a=ssrc-group:FID 4120210255 1326903371 a=ssrc:4120210255 cname:tlvQZ3c4Ffi2Qkmp a=ssrc:4120210255 msid:- c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 a=ssrc:4120210255 mslabel:- a=ssrc:4120210255 label:c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 a=ssrc:1326903371 cname:tlvQZ3c4Ffi2Qkmp a=ssrc:1326903371 msid:- c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 a=ssrc:1326903371 mslabel:- a=ssrc:1326903371 label:c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 Answer: v=0 o=- 7682877353606643392 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:QJP0 a=ice-pwd:CIu5t/Sc6Web07VrapLPbtZQ a=ice-options:trickle a=fingerprint:sha-256 52:67:5B:9C:54:2A:0E:83:2D:D3:94:CC:44:1D:DE:01:2A:E4:86:C6:97:88:CC:DC:AD:FF:65:E1:E1:9D:6E:BD a=setup:active a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=recvonly a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 Offer: v=0 o=- 4985865762926704574 3 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=video 34352 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 202.199.13.135 a=rtcp:9 IN IP4 0.0.0.0 a=candidate:2289422419 1 udp 2122260223 202.199.13.135 34352 typ host generation 0 network-id 1 a=candidate:3338022051 1 tcp 1518280447 202.199.13.135 9 typ host tcptype active generation 0 network-id 1 a=ice-ufrag:0XGy a=ice-pwd:tg7zNH02+5s57T2qxPZkE5HC a=ice-options:trickle a=fingerprint:sha-256 6E:80:A1:C8:84:BA:84:B6:05:23:1A:17:B0:91:07:59:B6:A8:71:4C:46:31:CE:48:52:BD:64:35:B9:2E:36:2C a=setup:actpass a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=sendrecv a=msid:- c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 a=ssrc-group:FID 4120210255 1326903371 a=ssrc:4120210255 cname:tlvQZ3c4Ffi2Qkmp a=ssrc:4120210255 msid:- c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 a=ssrc:4120210255 mslabel:- a=ssrc:4120210255 label:c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 a=ssrc:1326903371 cname:tlvQZ3c4Ffi2Qkmp a=ssrc:1326903371 msid:- c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 a=ssrc:1326903371 mslabel:- a=ssrc:1326903371 label:c1121bb4-c8d0-41bf-b7ea-3b16b7aaf6c9 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:0XGy a=ice-pwd:tg7zNH02+5s57T2qxPZkE5HC a=ice-options:trickle a=fingerprint:sha-256 6E:80:A1:C8:84:BA:84:B6:05:23:1A:17:B0:91:07:59:B6:A8:71:4C:46:31:CE:48:52:BD:64:35:B9:2E:36:2C a=setup:actpass a=mid:1 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=sendrecv a=msid:- 0a4e60bd-bc8c-4ec2-ae3b-e48ebf68d562 a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 a=ssrc-group:FID 2231752679 3089103456 a=ssrc:2231752679 cname:tlvQZ3c4Ffi2Qkmp a=ssrc:2231752679 msid:- 0a4e60bd-bc8c-4ec2-ae3b-e48ebf68d562 a=ssrc:2231752679 mslabel:- a=ssrc:2231752679 label:0a4e60bd-bc8c-4ec2-ae3b-e48ebf68d562 a=ssrc:3089103456 cname:tlvQZ3c4Ffi2Qkmp a=ssrc:3089103456 msid:- 0a4e60bd-bc8c-4ec2-ae3b-e48ebf68d562 a=ssrc:3089103456 mslabel:- a=ssrc:3089103456 label:0a4e60bd-bc8c-4ec2-ae3b-e48ebf68d562 Answer: v=0 o=- 7682877353606643392 3 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=video 44346 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 202.199.13.135 a=rtcp:9 IN IP4 0.0.0.0 a=candidate:2289422419 1 udp 2122260223 202.199.13.135 44346 typ host generation 0 network-id 1 a=candidate:3338022051 1 tcp 1518280447 202.199.13.135 9 typ host tcptype active generation 0 network-id 1 a=ice-ufrag:QJP0 a=ice-pwd:CIu5t/Sc6Web07VrapLPbtZQ a=ice-options:trickle a=fingerprint:sha-256 52:67:5B:9C:54:2A:0E:83:2D:D3:94:CC:44:1D:DE:01:2A:E4:86:C6:97:88:CC:DC:AD:FF:65:E1:E1:9D:6E:BD a=setup:active a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=recvonly a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:QJP0 a=ice-pwd:CIu5t/Sc6Web07VrapLPbtZQ a=ice-options:trickle a=fingerprint:sha-256 52:67:5B:9C:54:2A:0E:83:2D:D3:94:CC:44:1D:DE:01:2A:E4:86:C6:97:88:CC:DC:AD:FF:65:E1:E1:9D:6E:BD a=setup:active a=mid:1 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=recvonly a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000
Offer: v=0 o=- 4985865762926704574 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:0XGy a=ice-pwd:tg7zNH02+5s57T2qxPZkE5HC a=ice-options:trickle a=fingerprint:sha-256 6E:80:A1:C8:84:BA:84:B6:05:23:1A:17:B0:91:07:59:B6:A8:71:4C:46:31:CE:48:52:BD:64:35:B9:2E:36:2C Answer: v=0 o=- 7682877353606643392 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:QJP0 a=ice-pwd:CIu5t/Sc6Web07VrapLPbtZQ a=ice-options:trickle a=fingerprint:sha-256 52:67:5B:9C:54:2A:0E:83:2D:D3:94:CC:44:1D:DE:01:2A:E4:86:C6:97:88:CC:DC:AD:FF:65:E1:E1:9D:6E:BD Offer: v=0 o=- 4985865762926704574 3 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=video 34352 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 202.199.13.135 a=rtcp:9 IN IP4 0.0.0.0 a=candidate:2289422419 1 udp 2122260223 202.199.13.135 34352 typ host generation 0 network-id 1 a=candidate:3338022051 1 tcp 1518280447 202.199.13.135 9 typ host tcptype active generation 0 network-id 1 a=ice-ufrag:0XGy a=ice-pwd:tg7zNH02+5s57T2qxPZkE5HC a=ice-options:trickle a=fingerprint:sha-256 6E:80:A1:C8:84:BA:84:B6:05:23:1A:17:B0:91:07:59:B6:A8:71:4C:46:31:CE:48:52:BD:64:35:B9:2E:36:2C Answer: v=0 o=- 7682877353606643392 3 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=video 44346 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 202.199.13.135 a=rtcp:9 IN IP4 0.0.0.0 a=candidate:2289422419 1 udp 2122260223 202.199.13.135 44346 typ host generation 0 network-id 1 a=candidate:3338022051 1 tcp 1518280447 202.199.13.135 9 typ host tcptype active generation 0 network-id 1 a=ice-ufrag:QJP0 a=ice-pwd:CIu5t/Sc6Web07VrapLPbtZQ a=ice-options:trickle a=fingerprint:sha-256 52:67:5B:9C:54:2A:0E:83:2D:D3:94:CC:44:1D:DE:01:2A:E4:86:C6:97:88:CC:DC:AD:FF:65:E1:E1:9D:6E:BD
(2)iceRestart:true

Offer: v=0 o=- 3039202403829553006 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:WFUz a=ice-pwd:eXiDpDni2flIeww/A9SRhr0S a=ice-options:trickle a=fingerprint:sha-256 FA:8F:97:28:24:E6:F9:D6:3C:2D:74:FE:8F:67:40:3A:F0:B6:90:00:E3:E8:9D:1E:98:6B:D9:CA:01:E1:A9:0B a=setup:actpass a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=sendrecv a=msid:- f5137313-a1b0-4792-ba6b-d4a1be400cdf a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 a=ssrc-group:FID 3237367520 3432067502 a=ssrc:3237367520 cname:4pvgn+mh15jc9JOc a=ssrc:3237367520 msid:- f5137313-a1b0-4792-ba6b-d4a1be400cdf a=ssrc:3237367520 mslabel:- a=ssrc:3237367520 label:f5137313-a1b0-4792-ba6b-d4a1be400cdf a=ssrc:3432067502 cname:4pvgn+mh15jc9JOc a=ssrc:3432067502 msid:- f5137313-a1b0-4792-ba6b-d4a1be400cdf a=ssrc:3432067502 mslabel:- a=ssrc:3432067502 label:f5137313-a1b0-4792-ba6b-d4a1be400cdf Answer: v=0 o=- 5678380755551815756 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:9vGz a=ice-pwd:ncxS/Fe/WsuHhUuaHAO9rNJx a=ice-options:trickle a=fingerprint:sha-256 35:27:DA:5C:E4:93:DE:88:CB:B6:AA:B9:AC:19:54:DF:8F:DF:43:38:23:7D:5F:A8:CA:F6:20:58:57:21:9F:EA a=setup:active a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=recvonly a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 Offer: v=0 o=- 3039202403829553006 3 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:sVVU a=ice-pwd:YzWnQl9V1CvdEICpngJELpYE a=ice-options:trickle a=fingerprint:sha-256 FA:8F:97:28:24:E6:F9:D6:3C:2D:74:FE:8F:67:40:3A:F0:B6:90:00:E3:E8:9D:1E:98:6B:D9:CA:01:E1:A9:0B a=setup:actpass a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=sendrecv a=msid:- f5137313-a1b0-4792-ba6b-d4a1be400cdf a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 a=ssrc-group:FID 3237367520 3432067502 a=ssrc:3237367520 cname:4pvgn+mh15jc9JOc a=ssrc:3237367520 msid:- f5137313-a1b0-4792-ba6b-d4a1be400cdf a=ssrc:3237367520 mslabel:- a=ssrc:3237367520 label:f5137313-a1b0-4792-ba6b-d4a1be400cdf a=ssrc:3432067502 cname:4pvgn+mh15jc9JOc a=ssrc:3432067502 msid:- f5137313-a1b0-4792-ba6b-d4a1be400cdf a=ssrc:3432067502 mslabel:- a=ssrc:3432067502 label:f5137313-a1b0-4792-ba6b-d4a1be400cdf m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:sVVU a=ice-pwd:YzWnQl9V1CvdEICpngJELpYE a=ice-options:trickle a=fingerprint:sha-256 FA:8F:97:28:24:E6:F9:D6:3C:2D:74:FE:8F:67:40:3A:F0:B6:90:00:E3:E8:9D:1E:98:6B:D9:CA:01:E1:A9:0B a=setup:actpass a=mid:1 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=sendrecv a=msid:- baa06592-6449-4a3c-816e-74ec95c6287c a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 a=ssrc-group:FID 3067863396 2458353845 a=ssrc:3067863396 cname:4pvgn+mh15jc9JOc a=ssrc:3067863396 msid:- baa06592-6449-4a3c-816e-74ec95c6287c a=ssrc:3067863396 mslabel:- a=ssrc:3067863396 label:baa06592-6449-4a3c-816e-74ec95c6287c a=ssrc:2458353845 cname:4pvgn+mh15jc9JOc a=ssrc:2458353845 msid:- baa06592-6449-4a3c-816e-74ec95c6287c a=ssrc:2458353845 mslabel:- a=ssrc:2458353845 label:baa06592-6449-4a3c-816e-74ec95c6287c Answer: v=0 o=- 5678380755551815756 3 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:Ms8p a=ice-pwd:wik63LjT92YyXqiY/v4/TjlH a=ice-options:trickle a=fingerprint:sha-256 35:27:DA:5C:E4:93:DE:88:CB:B6:AA:B9:AC:19:54:DF:8F:DF:43:38:23:7D:5F:A8:CA:F6:20:58:57:21:9F:EA a=setup:active a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=recvonly a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:Ms8p a=ice-pwd:wik63LjT92YyXqiY/v4/TjlH a=ice-options:trickle a=fingerprint:sha-256 35:27:DA:5C:E4:93:DE:88:CB:B6:AA:B9:AC:19:54:DF:8F:DF:43:38:23:7D:5F:A8:CA:F6:20:58:57:21:9F:EA a=setup:active a=mid:1 a=extmap:1 urn:ietf:params:rtp-hdrext:toffset a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 urn:3gpp:video-orientation a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id a=recvonly a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 VP9/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 profile-id=2 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 H264/90000 a=rtcp-fb:102 goog-remb a=rtcp-fb:102 transport-cc a=rtcp-fb:102 ccm fir a=rtcp-fb:102 nack a=rtcp-fb:102 nack pli a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f a=rtpmap:121 rtx/90000 a=fmtp:121 apt=102 a=rtpmap:127 H264/90000 a=rtcp-fb:127 goog-remb a=rtcp-fb:127 transport-cc a=rtcp-fb:127 ccm fir a=rtcp-fb:127 nack a=rtcp-fb:127 nack pli a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f a=rtpmap:120 rtx/90000 a=fmtp:120 apt=127 a=rtpmap:125 H264/90000 a=rtcp-fb:125 goog-remb a=rtcp-fb:125 transport-cc a=rtcp-fb:125 ccm fir a=rtcp-fb:125 nack a=rtcp-fb:125 nack pli a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f a=rtpmap:107 rtx/90000 a=fmtp:107 apt=125 a=rtpmap:108 H264/90000 a=rtcp-fb:108 goog-remb a=rtcp-fb:108 transport-cc a=rtcp-fb:108 ccm fir a=rtcp-fb:108 nack a=rtcp-fb:108 nack pli a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f a=rtpmap:109 rtx/90000 a=fmtp:109 apt=108 a=rtpmap:124 red/90000 a=rtpmap:119 rtx/90000 a=fmtp:119 apt=124 a=rtpmap:123 ulpfec/90000
Offer: v=0 o=- 3039202403829553006 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:WFUz a=ice-pwd:eXiDpDni2flIeww/A9SRhr0S a=ice-options:trickle a=fingerprint:sha-256 FA:8F:97:28:24:E6:F9:D6:3C:2D:74:FE:8F:67:40:3A:F0:B6:90:00:E3:E8:9D:1E:98:6B:D9:CA:01:E1:A9:0B Answer: v=0 o=- 5678380755551815756 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:9vGz a=ice-pwd:ncxS/Fe/WsuHhUuaHAO9rNJx a=ice-options:trickle a=fingerprint:sha-256 35:27:DA:5C:E4:93:DE:88:CB:B6:AA:B9:AC:19:54:DF:8F:DF:43:38:23:7D:5F:A8:CA:F6:20:58:57:21:9F:EA Offer: v=0 o=- 3039202403829553006 3 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:sVVU a=ice-pwd:YzWnQl9V1CvdEICpngJELpYE a=ice-options:trickle a=fingerprint:sha-256 FA:8F:97:28:24:E6:F9:D6:3C:2D:74:FE:8F:67:40:3A:F0:B6:90:00:E3:E8:9D:1E:98:6B:D9:CA:01:E1:A9:0B Answer: v=0 o=- 5678380755551815756 3 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:Ms8p a=ice-pwd:wik63LjT92YyXqiY/v4/TjlH a=ice-options:trickle a=fingerprint:sha-256 35:27:DA:5C:E4:93:DE:88:CB:B6:AA:B9:AC:19:54:DF:8F:DF:43:38:23:7D:5F:A8:CA:F6:20:58:57:21:9F:EA