把mp3文件放在Assets文件夹里,然后用MediaPlayer.setDataSource(FileDescriptor fd)来设置数据源,然后再调用MediaPlayer.prepare();结果报错了:
ERROR/PlayerDriver(30): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
在网上找解决办法,看到大部分的建议是换create(Context context, int resid)来创建一个MediaPlayer,试了一下果然成功,但这是为什么呢?
后来只好查看android的源码,发现MediaPlayer.setDataSource(FileDescriptor fd)是这样实现的:
public void setDataSource(FileDescriptor fd)
throws IOException, IllegalArgumentException, IllegalStateException {
// intentionally less than LONG_MAX
setDataSource(fd, 0, 0x7ffffffffffffffL);
}
其实就是调用了void setDataSource(FileDescriptor fd, long offset, long length)这个函数。
后来我在调式的时候发现,AssetFileDescriptord的offset并不为0。于是改为乖乖的使用setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
然后成功了。
我这样,但忘了关afd.close();//结果没有声音,悲剧,还有 mMediaPlayer.reset();要重置不然再播放会报错
public void playMusic(String mediaName) {
try {
/* 重置MediaPlayer */
mMediaPlayer.reset();
String path="mp3/"+mediaName+".mp3";
// /* 设置要播放的文件的路径 */
AssetFileDescriptor afd = context.getAssets().openFd(path);
mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IOException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
} catch (IllegalArgumentException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
} catch (SecurityException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
}
}
分享到:
相关推荐
总的来说,`MediaPlayer`是Android开发中处理音频播放的核心工具,通过熟练掌握其使用方法,你可以创建功能丰富的音乐播放应用或者其他需要音频播放功能的应用。在实践中,可能会遇到各种问题,如文件格式不支持、...
在Android平台上,`MediaPlayer`是系统提供的一个核心组件,用于播放各种媒体文件,如音频和视频。本篇文章将深入探讨`MediaPlayer`的高级用法,包括但不限于事件处理、流媒体播放、音量控制以及错误处理等方面。...
- 错误处理:`MediaPlayer`在遇到问题时会抛出各种错误,学习源码能帮助我们更好地理解和处理这些异常情况。 - 多线程编程:`MediaPlayer`的异步准备和事件回调涉及到多线程,理解这部分有助于优化应用程序性能和...
`MediaPlayer`可能遇到各种播放问题,如文件不存在、格式不支持等,需要适当地捕获和处理异常。 以上就是基于`Android MediaPlayer`构建简易音乐播放器的主要知识点。在实际开发中,还需要考虑音量控制、播放列表...
在处理多音频快速切换的场景时,我们可能会遇到一些挑战,比如播放异常、延迟等问题。以下是对`MediaPlayer`在处理这些情况时的一些关键知识点的详细解释: 1. **子线程中的MediaPlayer**: - 默认情况下,Android...
6. **生命周期管理**:由于`MediaPlayer`对象需要大量的系统资源,因此在不再使用时,必须调用`release()`方法释放资源,避免内存泄漏。 7. **其他高级特性**:如循环播放、音轨选择、快进/后退、音效处理等。 在...
在Android平台上,多媒体...总结来说,`Android MediaPlayer`是Android平台多媒体开发的重要部分,理解和熟练使用它可以创建功能丰富的音乐和视频播放应用。同时,合理利用第三方`jar`库可以进一步优化和扩展播放功能。
3. **音频源设置**: 使用MediaPlayer时,通常需要通过setDataSource()方法指定音频文件的路径,可以是本地资源、网络URL或者ContentProvider提供的URI。 4. **控制播放状态**: MediaPlayer提供了pause()、stop()和...
【音乐播放demo MediaPlayer】是一个基于Android平台的音乐播放应用程序示例,主要利用了Android系统提供的`...通过这个示例,开发者可以学习到如何在Android应用中处理本地音乐文件,并实现基本的播放控制功能。
`MediaPlayer` 在播放过程中可能会遇到各种错误,如网络问题、文件格式不支持等。因此,需要适当地捕获和处理这些异常,必要时重新初始化`MediaPlayer` 或从上次播放的位置恢复。 8. **性能优化** 为了提高播放...
在音乐播放应用中,我们通常使用它来加载和播放音乐文件。 - **MediaMetadataRetriever**:这个类用于从媒体文件中提取元数据,如歌曲标题、艺术家等,这对于显示在界面上很有用。 - **ContentResolver** 和 *...
在录音或播放过程中可能会遇到各种错误,如文件不存在、权限问题等。因此,应适当地捕获和处理异常,确保应用的健壮性。 8. 实战代码示例: 可以参考给出的博客链接(已提供但无法直接访问),博主可能提供了详细...
在这个项目中,你需要了解如何初始化MediaPlayer,加载音乐文件,控制播放、暂停、停止等操作,并处理播放状态的变化。 2. **媒体库和文件选择**:为了允许用户选择音乐,你需要访问设备的媒体库。Android提供了...
由于MediaPlayer占用系统资源,因此在不再使用时必须正确释放,调用release()方法。不释放可能导致内存泄漏和资源浪费。 7. 多媒体格式支持: MediaPlayer支持多种媒体格式,如MP3、AAC、MP4、3GP等。但具体支持...
在Android开发中,有时我们需要在应用中集成视频播放功能,特别是在教育、娱乐或者媒体类的应用中,这样的需求尤为常见。...如果你在实际操作过程中遇到问题,可以参考Android官方文档或在线社区寻求帮助。
`MediaPlayer`可能会遇到各种错误,如文件不存在、网络问题等。因此,设置`OnErrorListener`以捕获和处理这些错误是很重要的。 7. **内存管理** 当应用进入后台或被销毁时,应暂停或释放`MediaPlayer`,防止内存...
在这个项目中,我们需实例化一个MediaPlayer对象,加载要播放的音乐文件,并使用它的`start()`和`pause()`方法来控制音乐的播放和暂停。 4. **事件监听** 为了响应用户点击ImageView的操作,我们需要为ImageView...
5. **服务(Service)的使用**:为了实现在后台播放音乐,开发者通常会使用`Service`。`AudioService`是一个持续运行的服务,即使应用主界面被关闭,它也能保持音乐播放。`Service`可以绑定到`Binder`,允许其他组件...
本项目"Android-MediaPlayer-play_audios"关注的是如何使用`MediaPlayer`组件顺序播放存储在应用程序资源目录下的音频文件。 在Android中,`MediaPlayer`是处理音频和视频流的基础类,它提供了播放本地和网络媒体...
本项目"android自己开发dlna音乐播放器 支持网络 本地 播放值得学习"正是这样的一个实践案例,它允许用户通过DLNA和UPnP协议播放网络上的音乐资源,同时也支持本地存储的音乐文件。下面将详细介绍其中涉及的关键技术...