您的位置:首页 > 移动开发 > Android开发

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

2013-09-18 13:10 246 查看
今天遇到某些机型:(摩托罗拉 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 
FileInputStream
FileOutputStream
,
and 
RandomAccessFile
)

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

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

经过测试,方案可行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐