国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Javacv使用ffmpeg實現(xiàn)音視頻同步播放

Javacv使用ffmpeg實現(xiàn)音視頻同步播放

2021-03-10 14:39_Thomas Java教程

這篇文章主要介紹了Javacv使用ffmpeg實現(xiàn)音視頻同步播放,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

程序和源碼

具體的思路如下:

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

?
1
ffmpegframegrabber fg = new ffmpegframegrabber("a video file path or a url);

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

?
1
bufferedimage bi = (new java2dframeconverter()).getbufferedimage(f);

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

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

?
1
2
3
4
5
6
7
while(true)
{
  frame f = fg.grab(); 
  if(f.image!=null)
  label.seticon(new imageicon((new java2dframeconverter()).getbufferedimage(f)));
  thread.sleep(1000/視頻幀率); 
}

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

(3)生產(chǎn)消費者模式。

Javacv使用ffmpeg實現(xiàn)音視頻同步播放

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

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

想要實現(xiàn)音視頻同步,必須要有幀的時間戳,這里捕獲到的幀只有播放的時間戳pts,沒有譯碼時間戳dts,所以我們只需要根據(jù)播放時間戳來決定播放即可。

Javacv使用ffmpeg實現(xiàn)音視頻同步播放

程序的實現(xiàn)是根據(jù)上圖來的, 當(dāng)音頻線程開始播放音頻幀a1時,就調(diào)用視頻線程的setrun方法,并且傳遞當(dāng)前要播放的音頻幀時間戳curtime和下一幀音頻幀a2的時間戳nexttime給處于wait態(tài)的視頻線程,然后視頻線程啟動,開始從視頻fifo中取出視頻幀g1,然后計算g1和a1的時間差,作為播放的延時,thread.sleep(t1)后,視頻線程就將圖片顯示在swing組件上,比如jlabel.seticon(image)。然后視頻線程再取出一幀圖像g2,比較g2的時間戳和a2的時間戳,如果g2時間戳小于a2,那么視頻線程繼續(xù)延時t2以后,播放這個g2圖像,接著g3同理,直到取得g4,和a2比較發(fā)現(xiàn)g4時間戳大于a2,那么視頻線程就進入wait態(tài),等待下一次啟動。然后音頻線程播放完a1音頻幀以后,就從倉庫取出音頻幀a3,然后將a2的時間戳和a3的時間戳傳遞給視頻線程,然后開始播放a2,然后堵塞的視頻線程同理繼續(xù)播放。

(5)動態(tài)調(diào)節(jié)延時時間

由于個人pc都不是實時操作系統(tǒng),也就是thread.sleep是不精確的,并且受到聲卡播放聲音的制約,所以上面的基本實現(xiàn)思路是需要加以完善的。首先java的sourcedataline的方法是依照一定的速度從內(nèi)部緩沖區(qū)取出音頻線程寫入的數(shù)據(jù),如果音頻寫入的數(shù)據(jù)被取光了,那么音頻播放就會發(fā)生卡頓,但是如果一次音頻數(shù)據(jù)寫入過多,那么就會發(fā)生音視頻可能就會不同步,所以要確保sourcedataline的內(nèi)部緩沖區(qū)是留有一定數(shù)據(jù)的,否則就會造成卡頓,但是數(shù)據(jù)量又不能過多,所以我們在g3到a2這段時間來進行聲音播放的調(diào)節(jié),由于延時的不精準性,寫入的a1幀的數(shù)據(jù)可能時間還沒滿t6就可能被聲卡取光了,所以在播放完g3圖像以后,聲音線程會判斷根據(jù)sourcedataline.available()返回的數(shù)據(jù)量進行判斷,如果數(shù)據(jù)量快要完了,就減少g3到a2的延時時間t4。這樣子就可以保證數(shù)據(jù)量是不會變?yōu)?造成聲音卡頓。

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

Javacv使用ffmpeg實現(xiàn)音視頻同步播放

Javacv使用ffmpeg實現(xiàn)音視頻同步播放

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/A694543965/article/details/78317479

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 免费看日本黄色片 | av免费观看在线 | 91精品国产综合久久久久 | 视频在线一区二区 | 欧美日韩成人精品 | 国产精品久久国产精品 | 亚洲在线| 一级黄色毛片 | 婷婷国产成人精品视频 | 午夜精品一区二区三区免费视频 | 91麻豆精品国产91久久久久久 | 国产在线精品一区 | 夜夜操天天操 | 久久久久久久久久影院 | 欧美黑人性暴力猛交喷水 | 国产成人99久久亚洲综合精品 | 男人的天堂中文字幕 | 激情欧美日韩一区二区 | 91高清在线| 欧美一级在线观看 | 成人在线播放网站 | 久久精品无码一区二区日韩av | 亚洲高清色综合 | 四季久久免费一区二区三区四区 | 成人在线观看网 | 成人在线手机版视频 | 国产精品免费视频一区 | 青青国产在线 | 91av精品视频 | 黄色毛片一级 | 日韩毛片免费视频一级特黄 | 在线亚洲电影 | 在线精品一区 | 自拍偷拍av | 国外精品久久久蜜桃免费全文阅读 | yy6080久久伦理一区二区 | 久草福利资源 | 亚洲三区在线观看 | 久久久免费少妇高潮毛片 | 久草视频网 | 中文字幕成人网 |