1. 程式人生 > >音視訊同步(播放)原理

音視訊同步(播放)原理

每一幀音訊或視訊都有一個持續時間:duration:
取樣頻率是指將模擬聲音波形進行數字化時,每秒鐘抽取聲波幅度樣本的次數。
。正常人聽覺的頻率範圍大約在20Hz~20kHz之間,根據奈奎斯特取樣理論,為了保證聲音不失真,取樣頻率應該在40kHz左右。常用的音訊取樣頻率有8kHz、

11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果採用更高的取樣頻率,還可以達到DVD的音質
對取樣率為44.1kHz的AAC音訊進行解碼時,一幀的解碼時間須控制在23.22毫秒內。
背景知識:
(一個AAC原始幀包含一段時間內1024個取樣及相關資料)
分析:
1) AAC
音訊幀的播放時間=一個AAC幀對應的取樣樣本的個數/取樣頻率(單位為s)
一幀 1024個 sample。取樣率 Samplerate 44100KHz,每秒44100個sample, 所以根據公式   音訊幀的播放時間=一個AAC幀對應的取樣樣本的個數/取樣頻率
當前AAC一幀的播放時間是= 1024*1000000/44100= 22.32ms(單位為ms)
2) MP3
mp3 每幀均為1152個位元組, 則:
frame_duration = 1152 * 1000000 / sample_rate
例如:sample_rate = 44100HZ時,計算出的時長為26.122ms,這就是經常聽到的mp3每幀播放時間固定為26ms的由來。
3)H264
視訊的播放時間跟幀率有關 frame_duration = 1000/fps
例如:fps = 25.00 ,計算出來的時常為40ms,這就是同行所說的40ms一幀視訊資料。

理論上的音視訊(播放)同步是這樣的:
由此得到了每一幀資料的持續時間,音視訊交叉儲存在容器中:一個時間軸:
時間軸:0   22.32   40     44.62    66.96    80     89.16      111.48    120       ................
音   頻 :0   22.32            44.62    66.96             89.16      111.48                ................
視   頻 :0              40                              80                                   120       ................
即視訊的持續時間相加 和音訊的持續時間相加作比較,誰小寫入哪個。

但實際情況(播放)是不成立的

1:首先解決一個問題

為什麼不 音訊播音訊的 視訊播視訊的 即上面的 到 第22.32ms播一幀音訊 ,到40ms播一幀視訊。

因為這個22.32ms 或40ms是算不準的或者說和音效卡播的時間是不一樣的。這裡就需要知道音效卡播一幀/或者說播放一個buf音訊需要多長時間。

2:音效卡每次播一個取樣點 而不是一幀。聲音當一個取樣點丟失了都可以聽出來,視訊則不然。


3:音視訊同步方式:1----回撥方式

假設音效卡有兩塊快取都是存放要播放的聲音pcm的 一直在播放"B"buf 首先確定幾點

(1)buf大小是固定的這樣播放一個buf的時間就是固定的,假設30ms;

(2)當buf“B”播放完畢即buf用完,再播放buf“A",保證音訊pcm一直都連續

(3)當一個buf播放完畢,那說明系統(音效卡)過了30ms, 這時候有可能真正的時間過了40ms(這裡不用關心),這裡則通過回撥得到一次時間30ms;

(4)再去用視訊對應音訊的30ms,這時候的時間就是準確的:

時間軸:0                    30                         60                         90                                        120       ................
音   頻 :0     22.32                 44.62                 66.96     89.16                       111.48                     ................
視   頻 :0                          40                                    80                                                  120       ................

(5)這裡有個問題就是 視訊中 30ms 到40ms 這中間的10ms是怎麼算出來的,這個是不用關心的,因為人的眼睛10ms是看不出來的,

即當音訊的30ms一次回撥時,就可以播放第二幀視訊,如上圖

第一次回撥(30ms)---播(40ms)視訊,

第一次回撥(60ms)---播(80ms)視訊,

第一次回撥(90ms)---不播視訊,

第一次回撥(120ms)---播(120ms)視訊。

4:音視訊同步方式:1----阻塞方式

還是看上面的圖

(1)buf"B"一直在播放,傳入buf"A"的外部buf把資料給buf"A"後 不立即返回,等到buf"B"播放完成再返回,

這時從傳入到經過阻塞出來就是一個buf的時間例如上面的30ms。

(2)然後buf"A"一直在播放,傳入buf"B"的外部buf把資料給buf"B"後 不立即返回,等到buf"A"播放完成再返回,

這時從傳入到經過阻塞出來就是一個buf的時間例如上面的30ms。

(3)迴圈上面(1)(2),即得到了如回撥方式同樣的那個30ms時間。下面和回撥方式一樣,見回撥方式(4)(5)。

相關推薦

視訊同步(播放)原理

每一幀音訊或視訊都有一個持續時間:duration: 取樣頻率是指將模擬聲音波形進行數字化時,每秒鐘抽取聲波幅度樣本的次數。 。正常人聽覺的頻率範圍大約在20Hz~20kHz之間,根據奈奎斯特取樣理論,為了保證聲音不失真,取樣頻率應該在40kHz左右。常用的音訊取樣頻率有

視訊、音訊打時間戳的方法及其視訊同步(播放)原理

每一幀音訊或視訊都有一個持續時間:duration: 取樣頻率是指將模擬聲音波形進行數字化時,每秒鐘抽取聲波幅度樣本的次數。 。正常人聽覺的頻率範圍大約在20Hz~20kHz之間,根據奈奎斯特取樣理論,為了保證聲音不失真,取樣頻率應該在40kHz左右。常用的音訊取樣頻率有8kHz、 11.025kHz、

10.基於FFMPEG+SDL2播放video---視訊同步(參考音訊時鐘)

繼續FFMPEG學習之路。。。 參考資料: An ffmpeg and SDL Tutorial 文章目錄 1 綜述 2 音視訊同步 3 DTS 和 PTS 4 音訊時鐘 5 視訊PTS 6 同步 7 不

深入理解Android視訊同步機制(四)MediaSync的使用與原理

MedaiSync是android M新加入的API,可以幫助應用視音訊的同步播放,如同官網介紹的 From Andriod M: MediaSync: class which helps applications to synchronously r

從零開始學習視訊程式設計技術(八)FFMPEG Qt視訊播放器之視訊同步

前面分別講解了: 現在我們就將視訊和音訊合併,並讓聲音和畫面同步。 加入音訊的部分就不做講解了,這裡主要講下聲音和視訊同步的步驟。 首先剛開始播放的時候通過av_gettime()獲取系統主時鐘,記錄下來。 以後便不斷呼叫av_gettime()獲取系統時鐘

播放視訊同步的一點思考

音視訊同步是一個坑,一個繞不過去的坑,一個無可奈何的坑,一個主動跳進去的坑。 時間戳是前提。沒有時間戳或者時間戳錯誤,一切播放端音視訊同步的方法基礎都是不牢靠的。 生成的音視訊流要音視訊同步。可以轉成檔案要本地播放器來驗證一下 rtmp播放器特點: 1,不能堆積資料。

WebRTC 視訊同步原理與實現

> 所有的基於網路傳輸的音視訊採集播放系統都會存在音視訊同步的問題,作為現代網際網路實時音視訊通訊系統的代表,WebRTC 也不例外。本文將對音視訊同步的原理以及 WebRTC 的實現做深入分析。 # 時間戳 (timestamp) 同步問題就是快慢的問題,就會牽扯到時間跟音視訊流媒體的對應關係,就有

[SimplePlayer] 8. 視訊同步

音訊與視訊在播放當中可能會由於種種原因(如:音視訊並非在同一時間開始播放,或視訊由於解碼任務繁重導致輸出影象延遲等)導致音訊與視訊的播放時間出現偏差,這種就是音視訊的同步問題,本文會對音視訊同步進行討論。 有三種音視訊同步方式: 視訊同步到音訊時鐘(synchronize video to audi

vlc原始碼分析(五) 流媒體的視訊同步

轉載地址:https://www.cnblogs.com/jiayayao/p/6890882.html vlc播放流媒體時實現音視訊同步,簡單來說就是傳送方傳送的RTP包帶有時間戳,接收方根據此時間戳不斷校正本地時鐘,播放音視訊時根據本地時鐘進行同步播放。首先了解兩個概念

基於UDP實現的android區域網視訊同步播放

前段時間給公司的專案實現了一個區域網視訊同步播放的功能,最近稍微空閒一些,所以稍微整理下,分享給大家學習下,文末附有下載地址。 一.概述 實現區域網視訊同步播放,首先需要這些裝置都有

C#基於WindowsMediaPlayer實現視訊檔案播放

目的開發一個使用c#.net播放音訊和視訊檔案的Windows應用程式。設計使用OpenFileDialog控制元件,一個按鈕和“Windows Media Player”控制元件(COM元件)設計上述窗體。請注意,OpenFileDialog控制元件出現在表單下方(不在窗體

如何實現視訊同步 (live555)

live555中視訊和音訊是分別進行編碼的,如何實現兩者的同步呢? 如果可以做到讓視訊和音訊的時間戳,都與NTP時間保持同步,就可達到音視訊同步的目的。 Network Time Protocol (NTP) is a networking protocol for 

Android WebView載入H5視訊自動播放、關閉Activity停止播放

在Android載入H5,實現H5中的音視訊自動播放 在Activity中新增程式碼: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { mWe

Live555用做RTSPClient時,利用RTP時間戳進行視訊同步的解決方案(必須有RTCP支援才可行)

http://www.mworkbox.com/wp/work/551.html 先看來自Live555官網的2個常見問題: 問題1:Why do most RTP sessions use separate streams for audio and video?

flash swf接受外部引數 視訊網站播放原理

<object id="bcastr" data="camnpr.swf?xml=xml/camnpr.xml" type="application/x-shockwave-flash" width="650" height="285"&g

視訊同步-時間戳

媒體內容在播放時,最令人頭痛的就是音視訊不同步。從技術上來說,解決音視訊同步問題的最佳方案就是時間戳:首先選擇一個參考時鐘(要求參考時鐘上的時間是線性遞增的);生成資料流時依據參考時鐘上的時間給每個資料塊都打上時間戳(一般包括開始時間和結束時間);在播放時,讀取資料塊上的時間

在網頁上實現任意格式的視訊快速播放功能的開發總結。

開發重點在pc端,手機端不考慮。 要實現使用者上傳音視訊到伺服器,上傳完畢即可隨意拖動進度條觀看。 h5自帶的video標籤不支援大多數格式的音視訊格式,不考慮。 考慮使用流媒體播放,把源視訊轉成視訊流推到網頁播放器。 使用nginx+nginx-rtmp-module+f

DTS和PTS(HLS視訊同步)

原由: 近來在研究HLS(HTTP Live Streaming),以實現android上播放m3u8檔案。由於TS段的切分不統一,每個視訊網站給出的m3u8 playlists總有差別,在時間戳顯示上有差異,所以對DTS和PTS進行了研究。DTS和PTS是音視訊同步的

FFmpeg 視訊同步

音視訊播放器的工作的具體流程如下圖所示: 播放器工作流程 簡單的來說包括:解協議,解封裝,對音訊和視訊分別進行解碼,音視訊同步播放這幾個部分,各部分詳細解釋請看後面參考資料。由於我們是分別解碼和播放音訊和視訊的,所以各自播放的節奏需要同步,否則會出現音畫不一致的情況。本文主要介紹一個簡單的音視訊同步的

如何使用mp4v2將H264+AAC裸流錄製成mp4檔案,並保持視訊同步【原始碼】【mp4】【錄影】

前言:    mp4檔案目前已經成為了流媒體音視訊行業的通用標準檔案格式,它是基於mov格式基礎上演變來的,特別適合多平臺播放,錄製一次,多個平臺都可使用。但是,由於mp4格式相對比較複雜,直到mp4v2這個開源工程的出現,解決了這個問題。    通常,我們在使用mp4檔案時