- 1 介紹
WebRTC丟包重傳分爲兩種,一個是RTP報文丟失重傳,另一個書PLI視頻幀丟失重傳,SDP格式如下:
a=rtcp-fb:104 nack (RTP報文丟失重傳)
a=rtcp-fb:104 nack pli (PLI視頻幀丟失重傳)
生成SDP的時候直接將以上參數加入到Codec,代碼流程如下:
AppendVideoCodecs -> AddDefaultFeedbackParams
接口內容爲:
const char kRtcpFbParamNack[] = "nack"; const char kRtcpFbNackParamPli[] = "pli"; void AddDefaultFeedbackParams(VideoCodec* codec) { codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamCcm, kRtcpFbCcmParamFir)); codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kParamValueEmpty)); codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kRtcpFbNackParamPli)); codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamRemb, kParamValueEmpty)); codec->AddFeedbackParam( FeedbackParam(kRtcpFbParamTransportCc, kParamValueEmpty)); } RTP報文的重傳是通過RTP報文的序列號和時間戳,判斷是否出現丟包異常。
PLI視頻幀重傳在webrtc裏面實現的是請求關鍵幀。當連續出現解碼失敗,或者長期沒有解碼輸入,就通過RTCP報文發送請求IDR幀命令。
- 2 實現
要在webrtc中實現丟包重傳,只需要在SDP保留相關a=rtcp-fb行即可,去除的話在SDP刪除就行。