不同播放器對時間戳異常的兼容性不同,不同客戶流的時間戳情況也不同,為了降低誤糾正,一般只對明顯異常場景進行糾正。
整體糾正方案如下:
duration:前后幀的時間戳差
delt:前后同類型幀的時間戳差
① 微小的回退或突增不觸發糾正
原因:有些客戶原始流時間戳雖回退或突增,但實際音畫是同步的,如觸發糾正delt或者duration發生改變,可能導致音畫不同步
② 頭部時間戳走自己的邏輯
原因:一般播放器不要求頭部時間戳一定要遞增,一般只要求起始的音視頻頭時間戳一致即可,不排除客戶端邏輯特殊,故提供給用戶選擇,可通過跟隨后一幀時間戳也可以實現時間戳遞增。
③ 音視頻糾正核心邏輯如下:
當duration在正常范圍內時,糾正后時間戳=上一幀糾正后的時間戳+duration(糾正前);
當duration不在正常范圍內時,但delt正常時,糾正后的時間戳=上一同類型糾正后的時間戳+Delt(糾正前)
當duration和delt不在正常范圍內時,糾正后的時間戳=max(上一同類型幀,上一幀)糾正后的時間戳+上一同類型幀在閾值范圍內的delt值
通過上述邏輯,可以實現在保證時間戳正常遞增情況下,原始流的duration或者delt恢復正常時,即可快速恢復,不會因為時間戳糾正而擴大影響時長導致原始流音畫不同步。