2012-04-19 89 views
4

我有一個應用程序逐幀播放視頻。這一切都工作。但是它需要有回放聲音太大,當音頻和視頻同步似乎運行,視頻落後音頻,
邏輯我使用如下Android:更新UI線程非常快

ProcessVideoThread(){ 

    // Read the data from socket, 

    // decode it : this is going to be in side libvpx library, after decoding i am getting raw  
    // bitmap data 

    // After getting raw bitmap data, use some mechanism to update the image, 
    // here i tried runOnUIThread, handler but 


} 

現在正在發生的事情,以顯示視頻幀,似乎UI線程越來越遲的機會來更新圖像,即libvpx花費大約30毫秒來解碼圖像,並通過runOnUIThread,它需要40多ms來更新圖像,但在UI線程內更新它。
任何人都可以告訴我,我怎樣才能減少延遲更新UI線程上的圖像。

+0

似乎是最昂貴的任務是從插座上檢索。我會在類似帆布的視圖上進行自定義繪畫。向每個循環的事件隊列發佈新的Runnable對象太慢了。 – 2012-04-19 11:59:37

+0

檢查這個問題:http://stackoverflow.com/q/7363770/813951 – 2012-04-19 12:03:35

+0

@MisterSmith,非常感謝,你的意思是,從VideoThread,我應該使用畫布像視圖,並將避免調用UI線程 – Amitg2k12 2012-04-19 12:15:28

回答

1

看起來很有意思。如果我處於你的情況,我會檢查下列方法。

1)嘗試使用音頻和視頻線程之間的同步。

2)嘗試減少音頻滯後的視頻幀,並減少視頻滯後的音頻。

您可以按照以下方法做同樣的事情。

int i; 
if(i%2==0) 
ShowFrame(); 
else 
i++ 

這會做什麼,它會直接降低視頻速度從24 12。所以音頻現在將與視頻匹配。但是,正如我已經提到過的,yaa質量將受到威脅。這種方法稱爲頻率縮放。廣泛使用的方法來同步音頻和視頻。

請參閱以下內容以獲得清晰的理解以及您可以同步音頻和視頻的方式。這與FFMPEG有關。我不知道你可以使用多少,但肯定會幫助你得到一些想法。

http://dranger.com/ffmpeg/tutorial05.html

一切順利..

+0

正如其所提到的,音頻即將到來@ 20ms和視頻即將到來@ 40ms,它如何可以是同步,我正在嘗試確保,兩者都線程應該獲得同等優先權,只要我們獲得數據,儘快播放它(不管是音頻還是視頻),現在發生的事情是線程越來越少,因此視頻延遲。 – Amitg2k12 2012-04-20 11:41:49

+0

非常感謝happy2help,表面方法爲我們工作:), – Amitg2k12 2012-04-25 06:13:41