首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从资产文件夹加载mp3时,MediaPlayer getDuration方法始终返回0

问题描述:从资产文件夹加载mp3时,MediaPlayer getDuration方法始终返回0。

解答: 这个问题可能是由于以下几个原因导致的:

  1. 文件路径错误:请确保你提供给MediaPlayer的文件路径是正确的。在Android中,资产文件夹的路径是通过"file:///android_asset/"前缀来访问的。例如,如果你的mp3文件位于资产文件夹的子文件夹"audio"中,你应该提供的路径是"file:///android_asset/audio/your_file.mp3"。
  2. 文件格式不支持:MediaPlayer只支持特定的音频格式,如MP3、AAC、WAV等。请确保你的文件是支持的格式。你可以尝试使用其他音频播放器来验证文件是否能够正常播放。
  3. 文件损坏:如果文件本身损坏或不完整,MediaPlayer可能无法正确解析文件的元数据,导致getDuration方法返回0。请确保你的文件没有损坏,并且可以在其他设备上正常播放。
  4. 异步加载问题:MediaPlayer的getDuration方法是一个同步方法,它需要在MediaPlayer准备好后才能正确返回音频文件的时长。如果你在调用getDuration方法之前没有等待MediaPlayer准备好,那么它可能会返回0。你可以尝试在调用getDuration方法之前添加一个监听器,监听MediaPlayer的准备完成事件,确保在获取时长之前MediaPlayer已经准备好了。

综上所述,如果你遇到从资产文件夹加载mp3时MediaPlayer的getDuration方法始终返回0的问题,你可以按照上述步骤逐一排查可能的原因,并进行相应的修复。如果问题仍然存在,你可以尝试在开发过程中使用其他音频播放库或搜索相关的开源解决方案来解决该问题。

腾讯云相关产品推荐:腾讯云音视频解决方案。该解决方案提供了丰富的音视频处理能力,包括音视频转码、音视频剪辑、音视频混流等功能,适用于各种音视频应用场景。你可以通过腾讯云音视频解决方案来处理和播放你的音频文件,以获得更好的兼容性和稳定性。

腾讯云音视频解决方案介绍链接:https://cloud.tencent.com/product/tcav

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android MediaPalyer

    可以使用MediaPlayer api从存储在应用程序资源(原始资源)中的媒体文件、文件系统中的独立文件或通过网络连接到达的数据流中播放音频或视频。...下面根据官方文档的翻译以及结合自己的理解 Idle 状态:当使用new()方法创建一个MediaPlayer对象或者调用了其reset()方法时,该MediaPlayer对象处于idle状态。...这两种方法的一个重要差别就是:在这个状态下调用了getDuration()等方法(相当于调用时机不正确),通过reset()方法进入idle状态的话则会触发OnErrorListener.onError...MediaPlayer的播放,转到Started状态,暂停状态时可以调用seekTo()方法,这是不会改变状态的。...MeidalPlayer 常用方法 方法说明 MediaPlayer 构造方法 create 创建一个要播放的多媒体 getCurrentPosition 得到当前播放位置 getDuration 得到文件的时间

    1K11

    Android TV 开发之 TV视频播放器

    简介 Android TV 开发,顾名思义也就是电视开发,说的高端点就是智能电视,相信你们家里都有吧,不要说你家至今用着十几年前的老电视,那我无法可说了,TV开发的资源我从网上找到的都是一些零零碎碎的,...不够完整,而有一些项目还要你给积分才能去下载看,不够开源,痛定思痛,我决定自己弄一个开源的项目出来,自己来维护,学习中开发,也有可能TV这方面的文章我还会写,也有可能只写这一篇,接下来我们从创建TV项目开始...4.播放时候按遥控器左右键时,前进 后退 先想清楚这些问题,才能使编码过程中变得有条理 视频来源 本地: 我们可以在valuse文件夹下面创建一个raw文件夹,在里面放一个mp4短视频文件,(PS...(runnable, 0); timeSeekBar.setMax(videoView.getDuration()); //视频加载完成,...(videoView.getDuration()); //视频加载完成,准备好播放视频的回调 videoView.start();

    6.8K71

    【Unity3D插件】AVPro Video插件分享《视频播放插件》

    3.2.2 从试用版更新 如果您正在从试用版升级,请确保删除旧/资产/plugins文件夹,因为它包含试用插件,并且可能会发生冲突。...当vou不想在Unity资产文件夹中包含视频文件时,指定与项目文件夹相关的文件是很有用的,但是希望将它们保存在项目文件夹结构中。经常做一个叫做“视频”的子文件夹是有用的。...mp; videoTexture = mp.TextureProducer.GetTexture(); MediaPlayer脚本也有许多控制媒体加载的方法: OpenVideoFromFile()...GetVideoWidth(); 返回视频宽度的像素 int GetVideoHeight(); 返回视频的高度(以像素为单位) IMediaControl接口 方法 这个接口用于控制视频的加载和回放...bool RequiresVerticalFlip () 有些纹理是上下颠倒解码的,需要在显示时垂直翻转。此方法返回显示期间是否需要翻转纹理。

    5.9K20

    【Unity3D插件】AVPro Video插件分享《视频播放插件》

    3.2.2 从试用版更新 如果您正在从试用版升级,请确保删除旧/资产/plugins文件夹,因为它包含试用插件,并且可能会发生冲突。...当vou不想在Unity资产文件夹中包含视频文件时,指定与项目文件夹相关的文件是很有用的,但是希望将它们保存在项目文件夹结构中。经常做一个叫做“视频”的子文件夹是有用的。...(); 返回视频宽度的像素 int GetVideoHeight(); 返回视频的高度(以像素为单位) IMediaControl接口 方法 这个接口用于控制视频的加载和回放 bool OpenVideoFromFile...(string路径) 开始从指定的路径或URL加载文件。...bool RequiresVerticalFlip () 有些纹理是上下颠倒解码的,需要在显示时垂直翻转。此方法返回显示期间是否需要翻转纹理。

    4.5K20

    Android实现背景音乐播放

    在res下新建一个raw的文件夹,将事先下载好的MP3文件放入中,这里的歌曲是我自己下载的是birds.mp3 MainActivity /** * 这是一个Service生命周期及开启服务的小例子...,返回一个IBinder,可以与Activity交互 * 这是Bind Service的生命周期方法 * @param intent * @return */...mediaPlayer=new MediaPlayer(); //为播放器添加播放完成时的监听器 mediaPlayer.setOnCompletionListener...如果有规定id,则传入startid * @return 返回值规定此startservice是哪种类型,粘性的还是非粘性的 * START_STICKY:粘性的,...START_NOT_STICKY:非粘性,遇到异常停止不会重启 * START_REDELIVER_INTENT:粘性的,重新启动,并且将Context传递的信息intent传递 * 此方法是唯一的可以执行很多次的方法

    1.3K20

    Android中文API —— VideoView

    如果为 0 则不应用(包括当前主题中的)风格。 该值可以是当前主题中的属性资源,或者是明确的风格资源 ID。...int getBufferPercentage () (译者注:获得缓冲区的百分比) public int getCurrentPosition () (译者注:获得当前的位置) public int getDuration...如果视图可用并可按, 当按下 KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER 时执行视图的按下事件。...如果允许下一个事件接受器处理该事件,可以返回假 public boolean onTouchEvent (MotionEvent ev) 实现该方法来处理触屏事件。...参数 l 要执行的回调函数 public void setOnPreparedListener (MediaPlayer.OnPreparedListener l) 注册在媒体文件加载完毕,可以播放时调用的回调函数

    1.4K30

    2016级移动应用开发在线测试14-MediaPlayer

    您的回答为:MediaPlayer.OnClickListener: 点击接口。该接口中定义了一个回调方法,当点击事件发生时回调该方法。...该接口定义了一个回调方法,该方法在媒体播放时出现信息或者警告时回调该方法。 ()MediaPlayer.OnPreparedListener:准备播放接口。...该接口中定义了一个回调方法,当字幕的需要显示时回调该方法。 ()MediaPlayer.OnClickListener:点击接口。该接口中定义了一个回调方法,当点击事件发生时回调该方法。 9. ...()Idle 状态:当使用new()方法创建一个MediaPlayer对象或者调用了其reset()方法时,该MediaPlayer对象处于idle状态。...如果MediaPlayer进入Error状态,可以通过调用reset()来恢复,使得MediaPlayer重新返回到Idle状态。 10.

    84130

    Android跨进程通信IPC之3——关于JNI的那些事

    所有的工作都是从获取虚拟机接口开始的。有两种方式:第一种方式,在加载动态链接库时,JVM会调用JNI_OnLoad(JavaVM * jvm, void * reserved)(如果定了该函数)。...当Java代码需要C/C++代码时,Dalvik虚拟机加载xxx.so库时,会先调用JNI_Onload(),此时会把Java对象的指针存储于C层JNI组件的全局环境中,在Java层调用C层的Native...}, {"getDuration", "()I", (void *)android_media_MediaPlayer_getDuration...但是对于JNI出现异常时,即执行到JNIEnv 中某个函数异常时,并不会立即抛出异常来中断程序的执行,还可以继续执行内存之类的清理工作,知道返回Java层才会抛出相应的异常。...另外,Dalvik虚拟机有些情况下JNI函数出错可能会返回NULL,但ATR虚拟机在出错时更多是抛出异常。

    2.6K50

    Android开发笔记(一百二十六)自定义音乐播放器

    MediaRecorder与MediaPlayer在处理音频和视频时,整体流程是一样的,只有在部分方法的调用上有所差异,下面分别把录音/播音有关的方法列出来。...MediaRecorder录制的音频格式有amr、aac等,MediaPlayer支持播放的音频格式除了amr、aac之外,还支持常见的mp3、wav、mid、ogg等经过压缩编码的音频。...该监听器从OnRecordPositionUpdateListener扩展而来,需要实现onMarkerReached和onPeriodicNotification两个方法;其中onMarkerReached...因为SoundPool不会等音频加载完了才播放,所以它的延迟才比较小;而MediaPlayer会等待加载完毕才播放,所以延迟会比较大。...load : 加载指定的音频,该音频可以是个磁盘文件,也可以是资源文件。返回值为该音频的编号。 unload : 卸载指定编号的音频。 play : 播放指定编号的音频。

    3K30

    Android开发笔记(一百二十五)自定义视频播放器

    VideoView其实是从SurfaceView扩展而来,并在内部集成了MediaPlayer,从而实现视频画面与视频操作的统一管理;而MediaController则是一个简单的播放控制条,它实现了基本的控制按钮...的所有方法,而且提供MediaPlayer的主要方法。...getDuration : 获得视频的总时长。 getCurrentPosition : 获得当前的播放位置。当该方法返回值与getDuration相等时,表示播放到了末尾。...返回值在0到1之间。 MediaController VideoView看起来只有光秃秃的视频画面,要想让用户与它进行交互,还得通过MediaController来中转控制操作。...因为默认情况下,App每次切换屏幕都会重启Activity,即先执行原页面的onDestroy方法,再执行新页面的onCreate方法,这便导致还在播放当中的视频被中断返回了。

    2.8K40
    领券