MediaPlayer的本地文件不能播放问题

今天遇到某些机型:(摩托罗拉 xt685、昂达v818mini)上面播放本地音频文件,报错(1, -2147483648),播放数据源无法识别或者找不到播放数据源的问题。

解决问题的过程拿出来给大家分享。

原因分析:

由于业务需求,我们的音频文件去除了扩展名“.mp3”, 因为文件格式可以在数据解码的时候取到,大多数ROM都是支持的。

仔细看了下,文件拷贝到PC可以用播放器播放,加上“.mp3”扩展名也可以用MediaPlayer播放。

所以判断,这些ROM可能由于某些原因在原生的基础上被修改过了,

setDataSource(String path)交给MediaPlayer的之前,ROM可能试图通过文件名获取文件类型,发现文件类型属于播放器支持的,再交给MediaPlayer

,当然也可能是该ROM里的MediaPlayer的行为。


解决方案:

方案一,是将没有扩展名的本地音频的文件名加上扩展名。再调用setDataSource(String path)。

方案二,发现MediaPlayer官方提供的API有一个setDataSource(FileDescriptor fd),然后看了FileDescriptor的文档说明,

It's possible to get the file descriptor used by some classes (such as FileInputStreamFileOutputStream, and RandomAccessFile)

所以考虑先将文件转换成流,再交给MediaPlayer。这样就绕过了文件名的检查这一步。像这样:

FileInputStream fis = new FileInputStream(filePath);
mediaplayer.setDataSource(fis.getFD());

经过测试,方案可行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值