摘 要:開發(fā)視頻和音頻的實時傳輸和回放,同時對如何才能真正的實現(xiàn)數(shù)字視頻音頻的實時同步傳輸進行了深入的研究和探討。
關(guān)鍵詞:數(shù)字視頻音頻;實時同步傳輸;策略及算法
隨著我國科學(xué)技術(shù)水平的快速發(fā)展,我國的信息技術(shù)也取得了較大的進步,而人們對視頻音頻多媒體通信也提出了更高的需求,因此,實現(xiàn)視頻音頻的實時同步傳輸對于提高人們的工作效率以及保證人們的生活質(zhì)量都有著重要的意義,而在此過程中我們重點解決的就是視頻音頻信號的同步采集、同步傳輸、壓縮、信息的接收以及同步播放等問題,這樣就能保證客戶端的聲音和圖像與采集現(xiàn)場的聲音和圖像是同步的,視頻和音頻的實時就是要降低聲音和信息播放端與采集端的延時,而視頻和音頻的同步則是要減小用戶所聽到的聲音和看到的圖像的時間差,從而保證人們的視聽感受。
1 音頻視頻信號的采集
通常情況下,在采集聲音信號時,我們選擇的設(shè)備為麥克風(fēng)連聲卡,而在采集視頻信號時,我們采用的設(shè)備則為攝像頭連視頻采集卡,另外,如果對于視頻的采集工作沒有過高的要求,那么在計算機的USB接口上直接連上USB攝像頭也是可以的。
2 視頻音頻同步方案的選擇
在系統(tǒng)對音頻視頻系統(tǒng)采集完成后,系統(tǒng)會將它們的數(shù)據(jù)流放入到不同的緩沖區(qū)之中,而當(dāng)其中任何一個緩沖區(qū)的數(shù)據(jù)流采滿后,那么系統(tǒng)就會調(diào)用回調(diào)函數(shù),此時就會讀取音頻數(shù)據(jù)或是視頻數(shù)據(jù),而如果視頻的數(shù)據(jù)太大導(dǎo)致無法有效的讀取時,就應(yīng)先將其壓縮,在此過程中,要想保證客戶端的音頻和視頻實現(xiàn)同步,我們可以采取以下兩種方案:
2.1 我們可以將視頻數(shù)據(jù)和音頻數(shù)據(jù)打包成一個文件一起發(fā)送給客戶端,這種方案實現(xiàn)起來是相對容易的,但是在實際操作的過程中卻也存在著一定的問題:在采集音頻數(shù)據(jù)和視頻數(shù)據(jù)時,如果將視頻作為基點并且在采集到1幀視頻數(shù)據(jù)的過程中將音頻數(shù)據(jù)依次追加到已經(jīng)準(zhǔn)備好的緩沖區(qū)中,在采集1幀視頻數(shù)據(jù)完成后將視頻數(shù)據(jù)和音頻數(shù)據(jù)同時發(fā)送出去,這樣就能夠?qū)崿F(xiàn)在客戶端的音頻和視頻的同步顯示,這種實現(xiàn)方案的數(shù)據(jù)實時性好,并且音頻采集的速度也得到了很大提升,然而卻也由于音頻采集的較快的速度,就降低了每1幀視頻數(shù)據(jù)之間的間隔,當(dāng)進入到緩沖區(qū)中讀取音頻數(shù)據(jù)時,下1幀視頻數(shù)據(jù)就可能將上1幀視頻數(shù)據(jù)覆蓋,那么所得到的數(shù)據(jù)就是錯誤的,在實際調(diào)試的過程中如果出現(xiàn)了此類問題,那么在回放音頻數(shù)據(jù)時就會感受到明顯的刺耳的聲音;而如果將音頻作為基點并將視頻數(shù)據(jù)放入到已經(jīng)準(zhǔn)備好的緩沖區(qū)中,在存放完成1幀視頻數(shù)據(jù)后將視頻數(shù)據(jù)和音頻數(shù)據(jù)同時發(fā)送出去,達到客戶端后也能實現(xiàn)音頻和視頻的同步顯示,然而因為視頻的數(shù)據(jù)太大,通常如果352×288×24是我們采集視頻的格式,那么1幀的視頻數(shù)據(jù)就要接近300k,將其壓縮后也有8k左右,而音頻數(shù)據(jù)就要小很多,一般情況下8位單聲道是我們采集的音頻格式,1s的數(shù)據(jù)量就在11k左右,而每1s采集到的音頻為10幀,那么每1幀的數(shù)據(jù)就是1.1k,而每1s采集到的視頻為20幀,在一個發(fā)送包中就會有2幀視頻和1幀音頻,這樣每次傳輸?shù)臄?shù)據(jù)量就是很大的,就有可能導(dǎo)致無法傳輸?shù)膯栴}出現(xiàn),并且當(dāng)采集完成1幀音頻數(shù)據(jù)后,這2幀視頻數(shù)據(jù)可能還沒有采集完成,那么在發(fā)送包中的視頻數(shù)據(jù)就不夠準(zhǔn)確,客戶端也很難編程,而如果將音頻的采集速度設(shè)定為每s10幀,速度過慢就降低采集到數(shù)據(jù)的實時性。
2.2 這種方案為分別傳送視頻數(shù)據(jù)和音頻數(shù)據(jù),表面上看起來并沒有實現(xiàn)視頻和音頻的同步,但是如果可以進一步的提高音頻的采集速度,保證每1幀音頻的數(shù)據(jù)都是很小的,就是可以實現(xiàn)視頻數(shù)據(jù)和音頻數(shù)據(jù)的同步傳輸?shù)摹1热缥覀儾杉囊纛l數(shù)據(jù)為每s25幀,音頻格式仍采用8位單聲道,這樣1幀的音頻數(shù)據(jù)為441個字節(jié),數(shù)據(jù)不但具有較高的實時性,同時進行網(wǎng)絡(luò)傳輸也是十分方便的,將緩沖區(qū)中的音頻數(shù)據(jù)流直接轉(zhuǎn)變成為音頻數(shù)據(jù)發(fā)送給客戶端,而在采集填滿緩沖區(qū)中的視頻數(shù)據(jù)流后,系統(tǒng)就會立即調(diào)用視頻數(shù)據(jù)回調(diào)函數(shù),在該函數(shù)中壓縮數(shù)據(jù)源的地址參數(shù)就是緩沖區(qū)中視頻數(shù)據(jù)流的首地址,并且應(yīng)在填入了數(shù)據(jù)的長度等參數(shù)后調(diào)用數(shù)據(jù)壓縮線程,此時就將原本為BMP格式的視頻數(shù)據(jù)幀轉(zhuǎn)換成JPEG格式的視頻數(shù)據(jù)幀,之后便可以將視頻數(shù)據(jù)幀變成視頻數(shù)據(jù)包發(fā)送給客戶端了。
在數(shù)字視頻音頻實時同步傳輸?shù)奶剿骱蛯崿F(xiàn)過程中,為了更好的區(qū)別視頻數(shù)據(jù)包和音頻數(shù)據(jù)包,我們通常都會在包頭進行標(biāo)識,而在實際研究的過程中我們發(fā)現(xiàn)視頻數(shù)據(jù)包和音頻數(shù)據(jù)包的長度是有著較大的區(qū)別的,根據(jù)包的大小也能輕松的區(qū)分視頻數(shù)據(jù)包和音頻數(shù)據(jù)包,在系統(tǒng)采滿1幀后,就會立即將音頻視頻發(fā)送出去,客戶端接收到的視頻數(shù)據(jù)包不需要與音頻數(shù)據(jù)包協(xié)調(diào)而立即進行解壓顯示,同時客戶端接收到的音頻數(shù)據(jù)包也不需要與視頻數(shù)據(jù)包協(xié)調(diào)而立即進行播放,對兩者的回放就能實現(xiàn)同步,在傳輸?shù)倪^程中如果出現(xiàn)了錯誤而丟失了一些幀,數(shù)據(jù)的實時性也只會受到一點影響。
3 數(shù)據(jù)的實時性
在系統(tǒng)中我們發(fā)送視頻數(shù)據(jù)和音頻數(shù)據(jù)所采用的方式都是幀,但是因為視頻的數(shù)據(jù)量太大,為了減少系統(tǒng)的延遲性,那么就應(yīng)先壓縮視頻數(shù)據(jù),而在考慮到網(wǎng)絡(luò)廣播或是多播的情況下,我們選擇UDP協(xié)議作為網(wǎng)絡(luò)協(xié)議,在回放音頻數(shù)據(jù)流時我們選擇的音頻回放函數(shù)為WaveOut,在接收到每一幀音頻數(shù)據(jù)后,都應(yīng)先用WaveOut打開設(shè)備后才能播放,播放完成后再釋放設(shè)備。與視頻數(shù)據(jù)量相比,音頻的數(shù)據(jù)量要小得多,并且打開設(shè)備以及釋放設(shè)備都要用掉一定的時間,那么就可能出現(xiàn)聲音失真的問題。而如果要加大每一幀的音頻數(shù)據(jù),雖然可能避免出現(xiàn)聲音失真的問題,卻又降低了數(shù)據(jù)的實時性,由于WaveOut在播放一段緩沖區(qū)時,在最初階段如果向聲卡寫入了數(shù)據(jù)是可以立即返回的,那么我們就可以提前制定一塊緩沖區(qū),其大小應(yīng)與8為單聲道1s的數(shù)據(jù)大小相同,當(dāng)接收到第一幀音頻數(shù)據(jù)后,應(yīng)將其放到緩沖區(qū)的最前面,同時立即播放音頻數(shù)據(jù),此后每一幀音頻數(shù)據(jù)會相繼的接收到,并且也分別的拷貝到播放緩沖區(qū)中,這樣在開始播放音頻數(shù)據(jù)后就不會有1s的延遲,播放的過程中不斷的向緩沖區(qū)中填入數(shù)據(jù),由于網(wǎng)絡(luò)運行時是存在著不確定性的,所以,建議在第二幀或是第三幀啟動音頻設(shè)備并且開始播放,而這點誤差也是用戶感覺不到的。
4 多線程的應(yīng)用
要想進一步的提高系統(tǒng)的同步性和實時性,那么還必須能夠較好的應(yīng)用多線程,舉例來說,在視頻回調(diào)函數(shù)中如果啟動了壓縮線程就應(yīng)立即返回,這樣在壓縮視頻數(shù)據(jù)的過程中,系統(tǒng)還可以同時調(diào)用音頻回調(diào)函數(shù),此時就可以啟動發(fā)送線程將音頻數(shù)據(jù)發(fā)送給客戶端。如果能夠較好的應(yīng)用多線程,不斷能夠簡化程序,同時還能提高網(wǎng)絡(luò)的傳輸速度和系統(tǒng)的運行效率,在客戶端進行音頻的回放以及視頻的壓縮等工作時也應(yīng)盡可能的應(yīng)用多線程,從而真正的實現(xiàn)視頻音頻的實時和同步。
5 結(jié)束語
對數(shù)字視頻音頻實現(xiàn)實時同步傳輸?shù)牟呗院退惴ㄟM行了深入的研究和探討,在我國科學(xué)技術(shù)水平快速發(fā)展的大背景下,我國的網(wǎng)絡(luò)技術(shù)也得到了迅速的發(fā)展,動態(tài)壓縮技術(shù)的水平不斷提高,因此,數(shù)字視頻音頻的實時同步傳輸技術(shù)也將應(yīng)用到我國的各行各業(yè)中,其將擁有更加廣闊的發(fā)展空間和應(yīng)用前景,在這方面所進行的研究工作具有重要的現(xiàn)實意義。
參考文獻
[1]李顯濟.視頻與音頻實時多點傳輸?shù)难芯颗c實現(xiàn)[J]計算機工程,2009.
[2]郭堯.基于AVS的嵌入式音視頻同步傳輸系統(tǒng)設(shè)計[D].長春:吉林大學(xué),2009.
[3]徐剛.實時視頻傳輸?shù)淖赃m應(yīng)調(diào)節(jié)方法及其應(yīng)用[J].計算機工程與設(shè)計,2008.