2012-04-19 90 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