【问题标题】:android - Why MediaPlayer delayes in playing mp3 audio?android - 为什么 MediaPlayer 延迟播放 mp3 音频?
【发布时间】:2018-11-02 19:21:34
【问题描述】:

我制作了一个小应用程序来使用 MediaPlayer 在 android 中练习音频播放,该应用程序运行良好,但单击播放按钮后有 1 秒的小延迟,这很明显,我注意到这仅在启动音频文件时发生,暂停时,它立即恢复,没有延迟,我四处搜索,看到人们建议使用 SoundPool 而不是 MediaPlayer,但是当我的应用正在播放一首完整的歌曲时,建议将 SoundPool 用于短音频剪辑,这种延迟的原因是什么?是否有解决此问题的方法或解决方法?

这是我的代码:

私有媒体播放器 mMediaPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mMediaPlayer = MediaPlayer.create(this,R.raw.this_is_america);

    Button btnPlay = findViewById(R.id.btnPlay);
    Button btnPause = findViewById(R.id.btnPause);
    Button btnStop = findViewById(R.id.btnStop);
    btnPlay.setOnClickListener(this);
    btnPause.setOnClickListener(this);
    btnStop.setOnClickListener(this);
}

@Override
public void onClick(View v) {

    switch (v.getId()) {

        case R.id.btnPlay:

            Toast.makeText(getApplicationContext(), "Playing song",
                    Toast.LENGTH_SHORT).show();


           mMediaPlayer.start();

            break;

        case R.id.btnPause:

            Toast.makeText(getApplicationContext(), "Pausing song",
                    Toast.LENGTH_SHORT).show();

            mMediaPlayer.pause();
            break;

        case R.id.btnStop:

            Toast.makeText(getApplicationContext(), "Song stopped",
                    Toast.LENGTH_SHORT).show();

          mMediaPlayer.reset();
          mMediaPlayer = MediaPlayer.create(this,R.raw.this_is_america);
            break;
    }

}

更新:原来是 mp3 音频文件在开始时有静默暂停,尝试了另一首歌曲,它工作正常,没有明显的延迟,谢谢 greeble31 建议检查。

【问题讨论】:

  • 愚蠢的问题,但你确定暂停不仅仅是 .mp3 文件开头的沉默吗?

标签: java android audio android-mediaplayer


【解决方案1】:

您的歌曲在开头有一个无声的停顿;)

正如@Lucefer 提到的,由于音频堆栈的实现,Android 平台有一些small unavoidable latency。或者,至少它在几年前做过,不确定目前的情况如何。无论如何,这种延迟通常太小(约 10 毫秒)而无法在音频文件的开头注意到;它更多地与模拟乐器等应用的响应时间有关。

【讨论】:

  • 哈哈哈是的,我真是太愚蠢了,但是感谢您指出这一点并分享此信息,10ms根本不明显,将来我会提供更多用户反馈,以便用户不要觉得什么都没有播放会有延迟。
【解决方案2】:

Android 操作系统中存在音频延迟问题。录音和播放音频时会有几毫秒的延迟。您可以通过浏览以下 URL 了解更多信息。这种延迟与设备类型有关。

https://developer.android.com/ndk/guides/audio/audio-latency https://source.android.com/devices/audio/latency/measurements

您可以使用本机工具包或本机程序(C、C++ ndk 基础)来最小化这种延迟。但是你不能把它减少到 0Seconds。只能最小化延迟。

https://superpowered.com/superpowered-android-media-server 。您可以从中获得支持,但据我所知,您需要为此付费。我没试过。因此我不知道它减少了多少延迟。


如果您想从 mp3 中删除无声部分。你可以使用 ffmpeg 包装器。转到https://github.com/WritingMinds/ffmpeg-android-java 链接,有一个适用于 Android 的 ffmpeg 包装器。您可以轻松使用它。

using FFMPEG with silencedetect to remove audio silence 你可以通过导航找到相关的 FFmpeg 命令。

在包装器中你不需要 ffmpeg 部分。您需要从 -y 替换它。您可以在导航到该包装器时获取这些详细信息

【讨论】:

  • 谢谢Lucefer的回答,知道这一点很有用。
  • @AZOOZFaki 你想知道什么。我还创建了录音和播放相关的应用程序,并为它添加了手动同步。你想要什么?如果有用,请点赞
  • 您分享了有关 android 音频延迟的足够信息,问题出在我的音频文件从一开始就有一个静默暂停,直到我尝试其他音频文件(操作:P),我才注意到,对不起,我的声誉低于 15,所以我不能投票
猜你喜欢
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 2013-04-08
相关资源
最近更新 更多