大家好:
       最近,成功地将mplayer移植到了android(版本为2.3)平台,并将vo,ao部分分别改成 android的surface与audiotrack.
目前,音视频都可以正常地输出显示,碰到一个棘手的问题,音视频不同步的问题.播放流文件的时候,视频画面显示很流畅,但是声音总是比视频要快,很是苦恼!初步看了mplayer的音视频同步的原理,初步怀疑是由于ao_android.c(android的音频输出模块)的get_space(.)与get_delay(.)函数的返回值引起的不同步(在虚拟机下面查看了 ao_oss.c的实现).
       希望知道的朋友,多多交流,共同提高!谢谢!

解决方案 »

  1.   

    我很感兴趣关于 将mplayer移植到了android的问题 
     若是ao_android.c(android的音频输出模块)的get_space(.)与get_delay(.)函数的返回值引起的不同步那真是好深。希望可以从surface与audiotrack下手,在特定条件下,对音频输出延时,比较好操作。只是时间不好掌控。
      

  2.   

    现在的做法,是在自己写的音频输出模块(ao_android.c)中的get_space(.)接口中,每次都返回一个固定的大小,暂定为8192.在测试ao_oss.c中的这接口的时候,发现并不是每次都返回一个大于零的大小的,有的时候返回结果为零.于是,写了一个简单的算法,比如,返回几次固定大小之后,就返回一个零.测试的时候,发现效果好多了,音频没有那么快了.这个只能暂缓问题,还是不能从根本上解决问题!有兴趣的话,大家可以一起研究一下!
      

  3.   

    自己写了个根据音频的带宽来控制的接收数据的算法,有所改善.
    问一下,android上面还支持其它的音频输出么,譬如mplayer下面的ao_oss.c,ao_alsa.c等等.
      

  4.   

    不同步的原因很多,有可能是解码器效率太慢,有肯恩更是PTS设置的不对,也有可能你你的surfaceflinger与audioflnger的逻辑又问题
      

  5.   

    pts这个是流文件里面就有的,至于audioflinger这个,感觉跟mplayer里面的ao_oss.c里面的不一样,
    如果能够操作dsp的话,那样就好解决问题了.