PCR同步在非硬件精確時鐘源的情況還是謹慎使用,gstreamer裏面採用PCR同步,但是發現好多ffmpeg轉的片兒,或者是CP方的片源,pcr打得很粗糙的,老是有跳幀等現象。
音視頻同步,有三種方法,視頻同步音頻,音頻同步視頻,同步到外部時鐘!
第三種,同步到外部時鐘也就是PCR同步,和我上面說的那種同步方式,一樣!
用的最多的還是,視頻同步音頻,爲什麼呢?音頻的採樣率是固定的,若音頻稍有卡頓,都會很明顯的聽出來,反則視頻則不如此,雖然表面上說的是30fps,不一定每一幀的間隔就必須精確到33.33ms,因爲人肉眼是觀察不出來的,所以視頻的幀率可以是動態的,並不是嚴格標準的!
用視頻同步音頻,做法很簡單!首先,音頻線程只管自己獨立解碼播放。視頻線程在顯示之前只需要檢測視頻PTS是否大於音頻PTS,若大,則等待音頻PTS>=視頻PTS,若小,則直接播放,小太多則可以直接丟棄(跳幀)。做法就如此簡單!但前提是你編碼器一定要打好正確的PTS,若沒有則只有自己僞造PTS了!
參考: