亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Javacv使用ffmpeg實現音視頻同步播放

2024-07-13 10:15:20
字體:
來源:轉載
供稿:網友

最近用javaCV的ffmpeg包的FFmpegFrameGrabber幀捕捉器對捕捉到的音頻幀和視頻幀做了同步的播放。采用的同步方法是視頻向音頻同步。

程序和源碼

具體的思路如下:

(1)首先介紹ffmpeg是如何捕捉視頻文件的圖像和聲音的

FFmpegFrameGrabber fg = new FFmpegFrameGrabber("a video file path or a url); 

得到幀捕捉器對象后,調用它的grab()方法就會返回捕捉到的Frame對象。這個Frame可以是視頻幀或者是音頻幀,這是因為音視頻幀時按照時間戳在播放時間先上排列的。當然捕捉到的幀都是已經譯碼過的,并且存儲在java.nio.Buffer對象中,對于視頻幀,Buffer是儲存圖像的像素數據比如RGB,然后通過

BufferedImage bi = (new Java2DFrameConverter()).getBufferedImage(f); 

就可以得到圖片,得到的圖片可以進行一系列的處理或者不處理直接顯示在swing組件上。對應音頻幀,Buffer是儲存音頻的PCM數據,這個PCM可以是float或者short的,然后用java.sounds.sample里面的sourceDataLine.write方法就可以將這些音頻PCM數據寫入到揚聲器中。

(2)接著介紹如何不斷得將得到的幀播放出來。首先是單獨播放視頻:

while(true) {   Frame f = fg.grab();    if(f.image!=null)   label.setIcon(new ImageIcon((new Java2DFrameConverter()).getBufferedImage(f)));   Thread.sleep(1000/視頻幀率);  } 

單獨播放音頻同理,將數據寫入到聲卡即可。例子

(3)生產消費者模式。

ffmpeg,音視頻同步,Javacv

上圖是程序實現的方法,采用生產者模式將捕獲到的幀進行判斷,如果是視頻幀就生產到視頻FIFO中,如果是音頻幀就生產到音頻FIFO中,然后音頻播放線程和視頻播放線程分別從各自的幀倉庫消費里面的幀。之所以采用生產消費者模式是因為幀捕獲的速度是大于幀的消耗的,所以我們優先捕獲幀來緩沖,或者進一步對捕獲的幀進行預處理,而視頻和音頻播放線程只需要將處理過的幀直接播放顯示即可。

(4)實現音視頻同步的方法:播放兩幀音頻里面的所有視頻幀。

想要實現音視頻同步,必須要有幀的時間戳,這里捕獲到的幀只有播放的時間戳PTS,沒有譯碼時間戳DTS,所以我們只需要根據播放時間戳來決定播放即可。

ffmpeg,音視頻同步,Javacv

程序的實現是根據上圖來的, 當音頻線程開始播放音頻幀A1時,就調用視頻線程的setRun方法,并且傳遞當前要播放的音頻幀時間戳curTime和下一幀音頻幀A2的時間戳nextTime給處于wait態的視頻線程,然后視頻線程啟動,開始從視頻FIFO中取出視頻幀G1,然后計算G1和A1的時間差,作為播放的延時,Thread.sleep(t1)后,視頻線程就將圖片顯示在swing組件上,比如JLabel.setIcon(image)。然后視頻線程再取出一幀圖像G2,比較G2的時間戳和A2的時間戳,如果G2時間戳小于A2,那么視頻線程繼續延時t2以后,播放這個G2圖像,接著G3同理,直到取得G4,和A2比較發現G4時間戳大于A2,那么視頻線程就進入wait態,等待下一次啟動。然后音頻線程播放完A1音頻幀以后,就從倉庫取出音頻幀A3,然后將A2的時間戳和A3的時間戳傳遞給視頻線程,然后開始播放A2,然后堵塞的視頻線程同理繼續播放。

(5)動態調節延時時間

由于個人PC都不是實時操作系統,也就是Thread.sleep是不精確的,并且受到聲卡播放聲音的制約,所以上面的基本實現思路是需要加以完善的。首先java的sourceDataLine的方法是依照一定的速度從內部緩沖區取出音頻線程寫入的數據,如果音頻寫入的數據被取光了,那么音頻播放就會發生卡頓,但是如果一次音頻數據寫入過多,那么就會發生音視頻可能就會不同步,所以要確保sourceDataLine的內部緩沖區是留有一定數據的,否則就會造成卡頓,但是數據量又不能過多,所以我們在G3到A2這段時間來進行聲音播放的調節,由于延時的不精準性,寫入的A1幀的數據可能時間還沒滿t6就可能被聲卡取光了,所以在播放完G3圖像以后,聲音線程會判斷根據sourceDataLine.available()返回的數據量進行判斷,如果數據量快要完了,就減少G3到A2的延時時間t4。這樣子就可以保證數據量是不會變為0造成聲音卡頓。

(6)下面是程序在window64下測試和ubuntu14下測試的結果圖:  播放是比較流暢的,同步也是可以的,但是開著播放比企鵝在IDE如IDEA中寫代碼的話,會卡,畢竟IDEA也是用java開發的,所以IDEA的運行會影響其他java程序,但是其他進程不會影響。

ffmpeg,音視頻同步,Javacv

ffmpeg,音視頻同步,Javacv

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久国产精品影片| 亚洲欧美在线免费观看| 国产视频精品在线| 亚洲网站在线播放| 综合136福利视频在线| 欧美裸体xxxx极品少妇软件| 91成人免费观看网站| 北条麻妃99精品青青久久| 日韩一区二区精品视频| 少妇精69xxtheporn| 精品国产一区二区三区久久狼5月| 欧美极品美女视频网站在线观看免费| 社区色欧美激情 | 欧美福利视频在线| 国产69精品久久久| 欧美体内谢she精2性欧美| 亚洲香蕉av在线一区二区三区| 日韩av日韩在线观看| 久久久av免费| 人人做人人澡人人爽欧美| 国产精品日韩在线播放| 国产一区二区三区在线观看网站| 欧美激情综合亚洲一二区| 欧美激情欧美激情在线五月| 国产精品av电影| 韩剧1988免费观看全集| 国产精品精品久久久久久| 国产剧情日韩欧美| 91亚洲精品久久久久久久久久久久| 欧美在线免费视频| 亚洲最大中文字幕| 91在线播放国产| 亚洲激情在线观看| 国产丝袜高跟一区| 91欧美精品成人综合在线观看| 久久成人av网站| 久久精品电影网站| 亚洲精品电影在线| 亚洲精选在线观看| 欧美激情中文字幕在线| 91国产美女在线观看| 97av在线视频免费播放| 国产成人高潮免费观看精品| 日韩高清欧美高清| 欧美成人黑人xx视频免费观看| 国产精品美女999| 亚洲乱码av中文一区二区| 日韩少妇与小伙激情| 久久精品电影网站| 亚洲人永久免费| 亚洲人成电影网站色www| 欧洲美女7788成人免费视频| 日本精品视频网站| 日韩福利伦理影院免费| 国产精品自产拍在线观看中文| 亚洲精品福利在线观看| 欧美自拍视频在线观看| 日av在线播放中文不卡| 日韩电视剧在线观看免费网站| 国产精品视频中文字幕91| 日韩av色在线| 日韩网站免费观看| 日韩av在线免费| 国产一区二区三区日韩欧美| 国产精品视频自在线| 亚洲电影成人av99爱色| 欧美极品少妇xxxxx| 欧美日韩一区二区三区在线免费观看| 欧美猛男性生活免费| 久久九九全国免费精品观看| 国产91精品久久久久久久| 日韩精品在线第一页| 欧美亚洲成人免费| 亚洲欧美日韩一区在线| 久久久久久久91| 成人国产精品免费视频| 欧美激情中文字幕乱码免费| 黑人狂躁日本妞一区二区三区| 成人av番号网| 视频在线观看一区二区| 亚洲欧美日韩高清| 国产精品三级久久久久久电影| 亚洲第一页在线| 国产精品欧美激情| xvideos国产精品| 成人av.网址在线网站| 欧美在线亚洲在线| 欧洲成人在线视频| 精品人伦一区二区三区蜜桃免费| 欧美一级电影在线| 亚洲高清色综合| 久久久久亚洲精品| 亚洲国产中文字幕久久网| 亚洲欧美在线x视频| 亚洲小视频在线观看| 精品欧美aⅴ在线网站| 日韩欧美在线观看| 国产精品中文久久久久久久| 成人日韩av在线| 97久久久免费福利网址| 亚洲一二在线观看| 欧美在线视频免费播放| 欧美肥老太性生活视频| 麻豆一区二区在线观看| 91高清视频在线免费观看| 亚洲日本欧美日韩高观看| 国产精品最新在线观看| 欧美日韩日本国产| 欧美午夜美女看片| 欧美成人亚洲成人| 最近2019中文免费高清视频观看www99| 欧美精品999| 国产精品99久久久久久白浆小说| 国产精品久久久久久久av大片| 亚洲mm色国产网站| 成人午夜在线观看| 欧美视频专区一二在线观看| 久久成人在线视频| 亚洲三级 欧美三级| 亚州精品天堂中文字幕| 在线观看日韩视频| 亚洲成人精品视频在线观看| 欧美日韩免费看| 精品国内自产拍在线观看| 国内精品久久久| 国产91色在线| 3344国产精品免费看| 91精品美女在线| 欧美一区二区三区免费观看| 日韩中文字幕在线| 午夜欧美大片免费观看| 国产成人亚洲精品| 亚洲国产日韩欧美综合久久| 91中文精品字幕在线视频| 这里只有精品在线观看| 日韩av在线免播放器| 国产美女久久久| 日韩中文字幕视频在线观看| 欧美精品videosex性欧美| 姬川优奈aav一区二区| 日韩中文字幕国产精品| 日韩av电影在线网| 欧美小视频在线观看| 97av在线播放| 在线看福利67194| 亚洲国产精品高清久久久| 国产精品一区二区三区免费视频| 欧美成人一区二区三区电影| 国自在线精品视频| 日本a级片电影一区二区| 国产精品av在线| 国产亚洲在线播放| 日韩美女在线观看一区| 永久555www成人免费| 久久好看免费视频| 亚洲最大av在线| 欧美日韩中文字幕在线视频| 亚洲综合视频1区| 91久久精品视频| 日本免费久久高清视频| 国产精品成人在线| 成人欧美一区二区三区在线湿哒哒| 九九热99久久久国产盗摄| 欧美丰满少妇xxxx|