2013-11-25 103 views
0

我有一臺IP攝像機發送8000hz採樣率配置的音頻和H264視頻。 我做了一個從這臺IP攝像機生成TS文件的程序,它可以在VLC,除iPhone,Mac OSX Safari之外的Android媒體播放器上正常工作。 (該程序適用於我製作的HLS服務器。)mpeg2-ts aac PTS

在Iphone中播放視頻,Safari很好,但Audio不是。 (我可以聽到聲音,但播放不順暢)

我知道TS數據包中的音頻PTS應該是基於MPEG2 Sytem PCR Clock(90000hz)的。 IP攝像機發送的時間戳值基於基於採樣速率(8000hz),所以我將90000/8000乘以時間戳,以便在將音頻的PTS寫入TS文件時使PTS成爲MPEG2 PCR時鐘。

錯誤的方式乘90000/8000音頻PTS? 任何幫助將不勝感激。

回答

1

你很可能患有四捨五入錯誤。 TS中的PTS必須是完美的,否則許多播放器會嘗試將參考時鐘重新同步回放,這通常表現爲丟棄樣本或插入靜音。

通過計數樣本並轉換爲90khz,確保您的起始PTS是準確的。在劃分之前進行乘法運算(sampleCount * 90000)/sampleRate(不是sampleCount * (90000/sampleRate),並確保您使用64位整數來避免整數溢出或更好地使用libavutil中的av_rescale

+0

謝謝@szatmary我只是想知道,來自RTP頭部的時間戳可以用作PTS值TS-file。我把視頻數據的TS文件中的PTS值作爲時間戳從RTP頭中提取出來,如果它可能是錯誤的,我應該如何計算PTS值? – JayMuzie

+0

對於視頻,它並不重要,只需要將源時基90khz。如果你的幀早晚顯示幾微秒,沒有人會注意到,但是你會注意到聲音。 – szatmary