首页
学习
活动
专区
工具
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实现音乐播放进度条传递信息的两种方式(在service和activity中)

    实现播放的进度条显示,或是定时service获取某些信息,是我们日常开发中经常遇到的需求,下面介绍当音乐再service中运行时,activity如果获取音乐进度信息的两种方式: 一、在activity...做音乐播放器采坑以及解决办法1.千万不要把mediaPlayer.getDuration()放在定时任务里,线程和定时器都不能放 因为mediaPlayer.prepare()的执行速度很低,有概率出现...mediaPlayer.prepare()还在执行中,突然定时器里刚刚好到时间该调用mediaPlayer.getDuration()这个方法,结果就是mediaPlayer.prepare()因为没有初始化成功就调用...mediaPlayer.getDuration()而报下面的错误导致程序闪退。...使用mediaPlayer.prepare(),正常操作是: mediaPlayer.prepare(); mediaPlayer.start(); 建议使用 mediaPlayer.prepareAsync

    2.3K30

    Android TV 开发之 TV视频播放器

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

    6.7K71

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

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

    5.6K20

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

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

    4.4K20

    Android多媒体应用使用MediaPlayer播放音频

    Android提供了对常用音频和视频格式的支持,它所支持的音频格式有MP3(.mp3)、3GPP(.3gp)、Ogg(.ogg)和WAVE(.ave)等,支持的视频格式有3GPP(.3gp)和MPEG-...1.创建MediaPlayer对象,并装载音频文件 两种方法,都是使用MediaPlayer的静态方法creat()来实现。...a.creat(Context context,int resid) 资源文件中加载,例如 MediaPlayer player=MediaPlayer.creat(this,R.rwa.d);.../sound/bg.mp3”); 使用creat()方法,已经加载了音频,但是用无参构造方法来创建MediaPlayer对象,需要单独指定要装载的资源,这可以使用MediaPlayer类的setDataSource...在使用setDataSource()方法装载音频文件后,实际上MediaPlayer并为真正装载该音频文件,需要调用MediaPlayer的prepare()方法去真正装载音频文件。

    1.5K40

    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

    Android 媒体开发之MediaPlayer状态机接口方法实例解析

    Prepared (就绪) 状态转换 : — Initialized 状态迁移 : 在 Initialized 状态调用 prepare() 方法, 如果方法成功返回, MediaPlayer 就会进入...: MediaPlayer.OnInfoListener; — 接口作用 : 该接口定义了一个回调方法, 该方法在媒体播放出现信息或者警告回调该方法; 接口方法介绍 : — 接口方法 : public...— 方法作用 : 视频大小更新回调该方法, 如果没有视频返回0; — 参数解析 : int width 视频的宽度, int height 视频的高度; 三....MediaPlayer 状态; — 无效状态 : Error 状态, 在 Error 状态调用该方法, 会进入 Error 状态中; (2) 获取文件时长 方法名称 : public int getDuration...int getVideoWidth (); 方法解析 : 返回视频的高度 或者 宽度, 如果没有资源, 那么会返回0, 当视频大小改变的时候可以使用 MediaPlayer.OnVideoSizeChangedListener

    2.6K42

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

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

    83730

    Android编程实现播放音频的方法示例

    下表列出了 MediaPlayer 类中一些较为常用的控制方法方法名 功能描述 setDataSource() 设置要播放的音频文件的位置。...reset() 将 MediaPlayer 对象重置到刚刚创建的状态。 seekTo() 指定的位置开始播放音频。 stop() 停止播放音频。...isPlaying() 判断当前 MediaPlayer 是否正在播放音频。 getDuration() 获取载入的音频文件的时长。...首先需要创建出一个 MediaPlayer 对象,然后调用 setDataSource()方法来设置音频文件的路径,再调用 prepare()方法使 MediaPlayer 进入到准备状态,接下来调用...这时如果点击一下 Stop 按钮声音也会停住, 但是再次点击 Play 按钮,音乐就会重头开始播放了。 希望本文所述对大家Android程序设计有所帮助。

    1.4K21

    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
    领券