被WebRTC自帶oc版本的例子惡心到了,不做筆記還真不行。
兩端開啟音視頻通訊時,一方做為offer主動發(fā)出邀請,另一方做為answer被動等待offer的邀請做出反應(yīng)。
代碼中的流程:
Offer:
1. offerForConstraints,得到sdp后回調(diào) <第1.1步>。
-
1.1. didCreateSessionDescription
- 1.1.1.,如果有錯直接返回錯誤給上層,沒錯繼續(xù) <第1.1.2步>。
-
1.1.2. setLocalDescription設(shè)置sdp,回調(diào) <第1.1.2.1步>。
- 1.1.2.1. didSetSessionDescriptionWithError 如果有錯直接返回錯誤給上層。
1.2. 根據(jù)sdp的RTCSdpType生產(chǎn)msg,調(diào)用sendSignalingMessage通過信令服務(wù)器發(fā)送給遠程answer。
1.3. setMaxBitrateForPeerConnectionVideoSender設(shè)置視頻發(fā)送最大碼率。
Answer:
1. 收到Offer的sdp后調(diào)用setRemoteDescription,然后回調(diào) <第1.1步>。
-
1.1. didSetSessionDescriptionWithError
- 1.1.1. 如果有錯直接返回錯誤給上層,沒錯繼續(xù) <第1.1.2步>。
-
1.1.2. answerForConstraints回調(diào) <第1.1.2.1步>,傳入answerForConstraints得到的sdp。
-
1.1.2.1 didCreateSessionDescription
- 1.1.2.1.1 如果有錯直接返回錯誤給上層,沒錯繼續(xù)<第1.1.2.1.2步>。
-
1.1.2.1.2. setLocalDescription設(shè)置從answerForConstraints得到的sdp,回調(diào) <第1.1.2.1.2.1步>。
- 1.1.2.1.2.1 didSetSessionDescriptionWithError 如果有錯直接返回錯誤給上層。沒錯因為已經(jīng)設(shè)置了localDescription所以不做其他處理。
1.1.2.2 根據(jù)sdp的RTCSdpType生產(chǎn)msg,調(diào)用sendSignalingMessage通過信令服務(wù)器發(fā)送給遠程offer。
1.1.2.3 setMaxBitrateForPeerConnectionVideoSender設(shè)置視頻發(fā)送最大碼率。
-
Offer:
1. 收到Offer的sdp后調(diào)用setRemoteDescription,然后回調(diào) <第1.1步>。
- 1.1. didSetSessionDescriptionWithError 如果有錯直接返回錯誤給上層。
總結(jié)
從以上可以看出代碼有多暈,主要層層回調(diào)還把didSetSessionDescriptionWithError重用在多處的原因,然后惡心的oc代碼又臭又長,每個方法名都長到嚇?biāo)廊耍吹娜搜刍潄y。
寫著上面的1.1,1.2之類的我自己都惡心了。
總結(jié)一下流程:
offer先調(diào)用offerForConstraints得到自己的offerSdp,setLocalDescription(offerSdp),把offerSdp發(fā)給遠程answer,同時設(shè)置自己發(fā)送視頻的最大碼率。
answer收到offerSdp后,setRemoteDescription(offerSdp)。answerForConstraints得到自己的answerSdp,setLocalDescription(answerSdp),把answerSdp發(fā)送給offer,同時設(shè)置自己發(fā)送視頻的最大碼率。
offer收到answerSdp后,setRemoteDescription(answerSdp)。
以上很多調(diào)用的WebRTC API都產(chǎn)生回調(diào),回調(diào)可能返回錯誤,此時都要處理錯誤,一般就是把錯誤傳遞給上層,然后關(guān)閉整個會話。