記錄音視頻不同步的問題及解決過程


背景

在做國標級聯,模塊輸入rtmp流,輸出rtp+ps,視頻H264, 音頻轉碼aac →g711A.

現象

1、單視頻流播放正常

2、單音頻服務器保存輸出G711A文件播放正常

3、音視頻復合流播放音頻拉慢了視頻,大概1s視頻播放了1.5-2s.同時音頻也變慢了.

4、ffprobe 發現音頻的pts+ pkt_duration 大於下一個音頻packet pts.

嘗試解決過程

1、改變封裝格式,

rtp+ ps header + ps system header + ps map + pesv + rtp + ps header + pesa

-------------→

rtp + ps header + ps system header + ps map + pesv + pesa.

封裝格式符合gb28181文檔標准,但是對音視頻同步沒有效果.

2、aac轉g711過程中,發現一個rtmp的aac音頻msg,經過ffmpeg轉碼輸出3-5個g711a音頻packet, 再把這三個音頻packet分別封裝成pes, 三個pes使用同一個pts.pts是透傳的rtmp msg的timestamp.格式為:

rtp + ps header + ps system header + ps map + pesv(with PTS V) + pesa1(with PTS A) + pesa2(with PTS A)  + pesa3(with PTS A) 

做了改動把三個相同pts的音頻pes合並為同一個pes, 最后的格式為:

rtp + ps header + ps system header + ps map + pesv(with PTS V) + pesa(with PTS A) 

竟然音視頻不同步的問題解決了!!!

分析

g711是固定的采樣率、通道數和采樣位數, 在封裝rtp/ps的時候並沒有對這些參數進行傳遞,僅僅對pts進行了設置.而pts又是透傳rtmp的時間戳(ts * 90), 所以這個時間不會出錯.所以想到了合並音頻pes的問題.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM