erizo的webrtcconnection使用監聽來通知事件,其接口為:
enum WebRTCEvent { CONN_INITIAL = 101, CONN_STARTED = 102, CONN_GATHERED = 103, CONN_READY = 104, CONN_FINISHED = 105, CONN_CANDIDATE = 201, CONN_SDP = 202, CONN_SDP_PROCESSED = 203, CONN_FAILED = 500 }; class WebRtcConnectionEventListener { public: virtual ~WebRtcConnectionEventListener() { } virtual void notifyEvent(WebRTCEvent newEvent, const std::string& message, const std::string &stream_id = "") = 0; };
在event發生時,其參數的內容進行總結:
1、CONN_INITIAL:WebrtcConnection對象創建后,需要外面手動調用init方法,該方法會回調notifyEvent,並傳遞事件為改枚舉值,message和stream_id均為空值。
2、CONN_STARTED:這個狀態沒有看到里面有明顯調用的地方,有可能是保留的狀態碼
3、CONN_GATHERED:WebrtcConnection的createOffer或者第一次setRemoteSdp時啟動自身ICE過程,ICE完成收集時,發送該通知。message為自己的sdp數據
4、CONN_READY:當DTLS握手交互成功完成時,發送該通知
5、CONN_FINISH:WebrtcConnection對象關閉,調用close時,發送該通知
6、CONN_CANDIDATE:自身ICE獲取到Candidate時,發送該通知。message為candidate信息
7、CONN_SDP:沒有被使用
8、CONN_SDP_PROCESSED:處理remote sdp時,發送該通知。message為remote sdp
9、CONN_FAILED:ICE失敗,Dtls握手交互失敗,均發送該通知。message為remote sdp
基於事件的進一步理解,webrtcconnection的使用的正確方法為:
A、erizo主動發送offer
a、webrtcconnection createOffer
b、CONN_GATHERED時,發送sdp給client
c、CONN_CANDIDATE時,發送candidate給client
d、接收到answer,調用webrtcconnection setRemoteSdp
e、接收到candidate,調用webrtcconnection addRemoteCandidate
f、CONN_SDP_PROCESSED時,做私有處理
g、CONN_FAILED時,進行重試,或者其他異常處理
B、erizo被動接收offer
a、接收到answer,調用webrtcconnection setRemoteSdp
b、接收到candidate,調用webrtcconnection addRemoteCandidate
c、CONN_GATHERED時,發送sdp給client
d、CONN_CANDIDATE時,發送candidate給client
e、CONN_FAILED時,進行重試,或者其他異常處理
