MediaPlayer异常

Android  2021年4月8日 pm12:12发布4年前 (2021)更新 城堡大人
107 0 0

前言

播放媒体测试时,出现Mediaplayer报异常问题,如下打印日志

MediaPlayerNative(13594): start called in state 4, mPlayer(0x75b4e81280)
MediaPlayerNative(13594): error (-38, 0)
MediaPlayer(13594): Error (-38,0)

记录于此,以便查阅。

总结

原因 :Mediaplayer没有准备好(preparing状态)就开始调用start()方法了。

总结一下:

  1. 不使用prepareAsync()方法
    //mMediaPlayer.prepareAsync();
    mMediaPlayer.prepare();
    mMediaPlayer.start();
  1. 监听onPrepared(MediaPlayer iMediaPlayer)回调时start()
  2. prepare()会阻塞直到获取到数据,prepareAsync()异步,不会阻塞到数据全部获取成功。

个人还是推荐当onPrepared()回调后开始播放,这个表示有数据已经准备好了。

正文

网上也有分析这个问题,这里就简单的附上自己的观点。

使用prepareAsync():

    mMediaPlayer.reset();
    mMediaPlayer.setDataSource(path);
    mMediaPlayer.prepareAsync();
    mMediaPlayer.start();

按照这个代码片段执行,一定会出现异常,日志如[前言]所示。

使用prepare():

    mMediaPlayer.reset();
    mMediaPlayer.setDataSource(path);
    mMediaPlayer.prepare();
    mMediaPlayer.start();

prepare()会阻塞到数据完全加载,也就是准备好了,不会出现异常。

但是,上面执行的代码只理想状态,按顺序执行,但是现实测试中,当执行到prepare()时用户是还可以死劲操作的(你懂的 哈哈_)。

所以,需要考虑加锁和onPrepared()回调了执行播放才是最完美的。

什么时候用prepare()和调用prepareAsync()

下面是源码中注释的区别(机器翻译)

  1. 对于流,调用prepareAsync(),它会立即返回,而不是阻塞直到有足够的数据缓冲。
  2. 对于文件,调用prepare(),它会阻塞直到MediaPlayer准备好播放。

参考文章

  1. E/MediaPlayer: start called in state 4, mPlayer(0xcc719a40)解决

 历史上的今天

  1. 2024: android13添加SELinux权限时踩的坑(0条评论)
  2. 2024: Android 13framework中添加AIDL(1条评论)
  3. 2020: 顾城:树枝的疏忽(0条评论)
  4. 2019: Android 6.0 Settings源码简单分析之蓝牙(2)(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

[小知识]内存泄漏整理

什么是内存泄漏?总的来说:内存不在GC掌握之内。当一个对象已经不在使用了,本该回收时,而另外一个正在使用的对象持有它的引用而导致内存不能被回收。本该回收的对象没有被回收,而一直停留在堆内存中,这就产生了内存泄漏。Java的GC内存回收机制当对象不再有任何的引用时候才会进行回收。内存分配的...

Android (/sys/路径)属性文件节点值的读写

Android (/sys/路径)属性文件节点值的读写,在朋友代码基础上增加了finally 代码。如下,大致如此 /** * 文件的读取权限记得添加咯 */ /** * 某个节点写入值 * * @param value...

洛夫:石榴树

假若把你的诺言刻在石榴树上枝桠上悬垂着的就显得更沉重了 我仰卧在树下,星子仰卧在叶丛中每一株树属于我,我在每一株树中它们存在,爱便不会把我遗弃 哦!石榴已成熟,这动人的炸裂每一颗都闪烁着光,闪烁着你的名字

Android的apk组成结构

前言总所周知,APK是Android PacKage的缩写,即Android安装包。APK文件其实就是ZIP的压缩格式,如果把APK改成ZIP可以通过压缩软件进行解析。(目前部分压缩软件可以直接解压APK)本文参考网上文章,进行整理。好记性不如烂笔头正文我们解压APK后的组成部分如下(大...

余光中:乡愁

小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。 长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头。 后来啊,乡愁是一方矮矮的坟墓,我在外头,母亲在里头。 而现在,乡愁是一湾浅浅的海峡,我在这头,大陆在那头。

Android系统切换语言后,Activity中的文本没有改变

前言切换语言后,项目中的APP中的文本没有根据系统的语言改变而改变。这个是个小问题,但还是记录一下,方便自己查阅。正文隐藏内容!付费阅读后才能查看!¥1 ¥3多个隐藏块只需支付一次付费阅读参考文章《[摘]切换多国语言导致Fragment被回收,出现切换错乱》