android - 重叠的 mp4 文件的无缝播放

标签 android audio android-mediaplayer

是否可以将 MediaPlayer 输出到原始缓冲区而不是播放设备?

有一个网络电台提供媒体文件供直接下载。例子: http://fresh.moskva.fm/files/2004/mp4/2013/11/13/203112.mp4 - 2004 年 channel ,2013 年 11 月 13 日 20:31:12 http://fresh.moskva.fm/files/2004/mp4/2013/11/13/203113.mp4 - 2004 年 channel ,2013 年 11 月 13 日 20:31:13

每个文件的长度为:1:02(重叠 2 秒)。

目前的解决方案是使用 2 个 MediaPlayer 实例,在一个实例播放时调用 prepare() 并调用 seekTo() 跳过 2 秒。但有时仍能听到间隙。

相反,我想将音频解码为原始声音,然后将其组合。

最佳答案

使用 2 个媒体播放器进行无缝播放是不可能的,主要是因为进入 pausedPlayer.start() 和实际播放之间存在不可预测的延迟。延迟甚至可以是负数,因为未暂停的播放器会跳过几毫秒。

我试图从这里的 2 个媒体播放器中获得最大的 yield :https://github.com/basinilya/piterfm/blob/7e1f62a2303d1a32f617eee629ab514bc6019437/src/ru/piter/fm/player/SmoothMediaPlayer.java

  • getCurrentPosition() 在 mp4 AAC 文件上的步骤是粗略的:~46 或 ~92ms。因此,为了获得真实位置,我在一个循环中等待,直到值发生变化。
  • 我不会对下一个玩家调用seek(2000),而是通过静音和运行一段时间来预热
  • 当需要切换到下一个播放器时,我会获得尽可能精确的位置,然后休眠,然后恢复静音播放器,再次休眠,然后取消静音。
  • sleep 时间根据两个位置和平均恢复延迟计算得出。

在真实设备上,点击会保留,但不那么明显

关于android - 重叠的 mp4 文件的无缝播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23183648/

相关文章:

java - 播放和停止按钮不能同时使用

java - 如何在单个文件中记录MediaPlayer输出和语音?

android - 在搜索栏中将 MediaPlayer 缓冲显示为次要进度

android - Adapter.clear 删除列表属性的值

java - 需要将 iOS 中使用的 block 转换为 Android Java 代码

android - 在终端在后台运行android builds/gradle?

iphone - 在 iPhone 上使用 HTML5 音频播放声音片段时出现问题

android - ClassNotFoundException : Didn't find class "com.example.blogapp.whateverString"

javascript - 使用 setInterval 启动两个函数并让它们立即启动,没有延迟

java - 从 .mp3 或 .wav 文件计算频率?