android MediaPlayer

      最近在做一个android平台上的音乐播放器,没什么创新的地方,就是练习练习MediaPlayer的使用,但不用不知道,一用吓一跳。原来在MediaPlayer中还有很多我不了解的东西。

      一些普通的关于MediaPlayer的状态啊,函数调用啊这些在这里就不再阐述了,下面重点讲解一下我所遇到的问题。

      在测试播放器的时候,我所使用的在线播放资源是32位的,网络环境为wifi。经测试,2.1,2.2,2.3.0,上缓冲能很快完成,但在2.3.3,2.3.4上,缓冲时间就变得很长了,大约要一分半钟,很难接受。既然做了,就探究到底,到底是什么原因呢?同样的网络环境,同样的代码....后来,我换用128位的播放资源,发现2.3.3和2.3.4的时间明显变短了,大概只要15秒左右。顿时,我觉得有点眉目了。

       从我的认知范围来讲,MediaPlayer的Prepare在线播放时,读取网络资源,他也不知道缓冲到什么时候才结束,所以我认为他应该是缓冲到一定数量的数据的时候才完成Prepare,从而跳到Prepared状态。从这里很容易解释为什么128位资源反而比32位资源缓冲时间短,因为在网络带宽允许下,128位资源在一个频率下载的数据是32位的四倍,对于固定的缓冲区大小,要填满缓冲区,时间就变为32位的四分子一了。

      那么,要缩短2.3.3的缓冲时间有什么办法呢?很自然,我们想到要缩小缓冲区的大小,那我们就得研究一下MediaPlayer的Prepare代码了。我从这里看到

       public native void Prepare();

       public native void PrepareAsync();

       这两个方法,他们是Native方法,调用的已经交叉编译好的C语音库文件(关于android的Jni我也不是太熟悉)。

      看到这,我也有点迷茫,不知如何处理。但提出解决思路:

      利用android NDK开发,找到MediaPlayer一块的C代码,然后重写Prepare一块的缓冲区大小,在Java源程序中调用自己重写过的库文件。

      这样也许就行了,但我也只是思考,没具体实现过。准备过两天写一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值