Android 4.4.4 在线播放mp3文件存在的问题

Android写一个很简单的mediaplay播放:

在构造函数中创建对象,设置监听

<span style="white-space:pre">	</span>mediaPlayer = new MediaPlayer();
<span style="white-space:pre">	</span>mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
<span style="white-space:pre">	</span>mediaPlayer.setOnBufferingUpdateListener(this);
<span style="white-space:pre">	</span>mediaPlayer.setOnPreparedListener(this);
<span style="white-space:pre">	</span>mediaPlayer.setOnCompletionListener(this);
<span style="white-space:pre">	</span>mediaPlayer.reset();

点击listview的item后调用播放:

<span style="white-space:pre">	</span>mediaPlayer.setDataSource(videoUrl);
<span style="white-space:pre">	</span>mediaPlayer.prepareAsync();// prepare之后自动播放
在设置监听 setOnPreparedListener 函数接口中实现 mediaPlayer.start();

在代码逻辑上看着貌似没有任何问题。

在真正试用中发现,当网络状况不好,播放一首歌曲永远调用不了setOnPreparedListener函数一直在准备播放中,当网络好了就可以播放了,但网络一直不好的情况下,只能等下去,因为切下一首他会告诉你是无效操作,真个操作中断不了。

在Android源码4.4.4上通过framework层代码分析,问题一直追踪到url_request.cc文件中。

第二次reset是调用这个方法,被卡死,没有返回,


上面的步骤去调用下面的函数,取回包头,判断文件类型解码。

 

 

在解码类型文件中调用这个readat,去读取数据。并等待锁返回

如果数据不会来,循环,回来再解锁。

 


 在这儿循环在判断,

在访问网络的文件中

只有在网络有数据和失去连接后。这个锁才会被释放。

 

访问return没有调用上层onReadCompleted,时会出现问题。每次在return哪儿加调用,正常播放成为了概率事件。(网络特别好的情况下有几次能播)

整个过程交给了,

这个函数被底层net::URLRequest 

调用OnReadCompleted函数被底层调用。如果不调用,上层就被while锁住。

被锁的问题是在搞不定。Android5.1改变了访问网络的方式,使用mediahttp,最终调用api成的mediaplayhttpconnect去访问网络。

这个地方还可以怎么改一下???????????

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值