- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 android MediaPlayer 库来播放一些 MP3 文件。我不负责这些文件,也无法更改它们,只能播放它们。
我当前更新了一个进度条,显示用户当前浏览文件的进度,将进度条的最大值设置为 mediaPlayer.getDuration()
。我知道这个返回的值是正确的。我每 500 毫秒发布一个 Runnable,以用 mediaPlayer.getCurrentPosition
的值更新进度条。这一切都按预期正常工作。
当我尝试使用seekTo方法时会出现此问题(但是偶尔它会按我的预期工作)。我创建的媒体播放器对象注册了一个 OnSeekCompleteListener 。当我调用 mediaPlayer.seekTo(50000)
时,使用 mediaPLayer.getCurrentPosition()
在 OnSeekCompleteListener 中输出的值是我告诉它寻求的正确值(在本例中为 51000(假设我们从文件的 1000 毫秒开始)。但是,当 postDelayed runnable 运行以更新进度条时,mediaPlayer.getCurrentPosition()
返回的值通常(95% 的时间)远低于 OnSeekCompleteListener 中输出的值。
最终返回的值似乎没有任何押韵或原因,因为即使发生完全相同的情况,它们每次也不同。
编辑:在说这些值总是不同之后,事实证明这并不完全正确。如果我尝试寻找音频的最后,它总是会跳回到同一点(如果 getCurrentPosition() 方法可信的话,大约是在 2-3 小时之前)。
为了让事情变得更复杂,如果我使用 Audacity 和 LAME(使用默认设置)重新编码原始文件,这个问题就会消失。我只能将其作为测试,因为当我的应用程序上线时,我将无法控制文件编码。
如果有人对此有任何想法,我们将不胜感激。
供引用:以下是在 Mac 上通过 afinfo 命令获取的原始文件的值:
File: Test.mp3
File type ID: MPG3
Num Tracks: 1
----
Data format: 2 ch, 44100 Hz, '.mp3' (0x00000000) 0 bits/channel, 0 bytes/packet, 1152 frames/packet, 0 bytes/frame
no channel layout.
estimated duration: 35997.544490 sec
audio bytes: 216835607
audio packets: 1378031
bit rate: 48000 bits per second
packet size upper bound: 1052
maximum packet size: 522
audio data file offset: 1630
optimized
以及我重新编码且工作正常的音频文件中的信息:
File: Test2.mp3
File type ID: MPG3
Num Tracks: 1
----
Data format: 2 ch, 44100 Hz, '.mp3' (0x00000000) 0 bits/channel, 0 bytes/packet, 1152 frames/packet, 0 bytes/frame
no channel layout.
estimated duration: 35997.596735 sec
audio bytes: 293659748
audio packets: 1378033
bit rate: 65000 bits per second
packet size upper bound: 1052
maximum packet size: 835
audio data file offset: 1560
optimized
audio 1587491712 valid frames + 576 priming + 1728 remainder = 1587494016
编辑:此功能正在 Sony Xperia 上的 Android 6.0 上进行测试
最佳答案
这是媒体播放器的一个已知问题,据我所知没有解决方案:
https://code.google.com/p/android/issues/detail?id=11590 https://code.google.com/p/android/issues/detail?id=2559
关于java - Android MediaPlayereekTo()/getDuration() 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36624019/
下面是我正在使用的代码。我正在使用一个 vimeo 视频 url,它在我第一次加载 Activity 时工作正常,但在第二次调用 Activity 时出现问题,它显示消息尝试在无效的媒体播放器上调用
当我播放第一首歌曲时,它绝对没问题,但下次我收到标题文本的错误消息时,我在 mPlayer.prepare() 中收到错误,请提供帮助... mPlayer.reset(); mPlayer.setO
我使用下面的代码从 URL 播放 MP4 视频(H.264,AAC 编解码器)(该 url 非常好,没有重定向,404 或任何东西)。但是,我不断收到错误“在没有有效媒体播放器的情况下尝试调用 get
MediaPlayer 的 getDuration() 方法为我提供了一些音频文件的错误值。我认为所有这些文件的共同特征是它们是使用 Audacity 或其他一些音频编辑工具进行处理的。尝试将 Med
我正在尝试获取音频文件的持续时间。为此,我使用以下代码: $.fntReproducir=function(){ //obtenemos una instancia del elemento
我目前正在处理 com.sun.management.GcInfo 类的一些烦恼。我通过添加 GC 通知监听器改进了我们的服务器日志。每当发生主要 GC 时,我都会记录它所花费的持续时间(以及其他一些
我正在使用 android MediaPlayer 库来播放一些 MP3 文件。我不负责这些文件,也无法更改它们,只能播放它们。 我当前更新了一个进度条,显示用户当前浏览文件的进度,将进度条的最大值设
在我的 listView 中,我正在显示一些来自 API 的媒体内容。 API 不包含有关媒体持续时间的任何信息,因此我想我应该创建一个帮助程序类来处理这个问题。 public static Stri
我对 android MediaPlayer 的 getduration() 方法有以下问题。例如以下文件(文件的实际持续时间为 5747000 毫秒): File to test it 准备好 Me
我正在尝试开发一个 Android 应用程序来播放原始文件夹中的视频。我正在使用自定义控制选项。 getduration() 返回 -1,所以我不能为我的搜索栏设置最大值。这是我的代码 private
我正在使用搜索栏播放 SD 卡中的歌曲。在获取歌曲的持续时间时,我得到了Attempt to call getDuration without a valid mediaplayer and ille
我完全迷失了。我发现代码非常简单,并且在文档中没有找到为什么会返回那么大的负数的任何原因。代码如下 private int getDuration(String audioPath) throws E
创建一个 MediaPlayer。特定类具有播放、暂停和恢复的功能。我正在尝试制作一个 SeekBar 来显示进度。SeekBar 需要作为 maxlength 的值,它是从调用 mediaplaye
我正在开发一款应用,用户可以在该应用中通过 MediaPlayer 播放音乐。 我遇到的问题是,当调用 getDuration() 方法时,用户编辑过的媒体文件给出了不正确的值。我做了一些实验,似乎经
本文整理了Java中java.time.zone.ZoneOffsetTransition.getDuration()方法的一些代码示例,展示了ZoneOffsetTransition.getDura
我写了下面这段代码 Media hit = new Media(dir); MediaPlayer player = new MediaPlayer(hit); runMedia run = new
我目前正在尝试设计一个简单的应用程序来播放音乐播放器。我有歌曲的 URL,正在设置 MediaPlayer,如下所示。第一首歌曲一切正常,但当我播放另一首歌曲时,程序在模拟时没有崩溃,但没有播放任何内
我想将数据源的持续时间放入 TextView 我的代码是 mp.setDataSource(URL); mp.prepare(); mp.start()
我一直在我的网站上实现 youtube API,例如 playVideo() 工作正常,所以我想实现没有任何问题..但是 getDuration() 得到一个错误(不是这样的函数错误) 我就是这样尝试
我一直在尝试使用 ExoPlayer 流式传输 URL。网址: STREAM_URL_1 =“http://storage.googleapis.com/exoplayer-test-media-0/
我是一名优秀的程序员,十分优秀!