是否可以使MediaPlayer输出到原始缓冲区而不是回放设备中?

有一个互联网广播,提供直接下载媒体文件。 示例: http ://fresh.moskva.fm/files/2004/mp4/2013/11/13/203112.mp4-频道2004、2013-11-13 20:31:12 http://fresh.moskva.fm /files/2004/mp4/2013/11/13/203113.mp4-频道2004、2013-11-13 20:31:13

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

当前的解决方案是使用MediaPlayer 2个实例,在另一个实例正在播放时调用prepare() ,而seekTo()跳过2秒。 但是有时仍然可以听到差距。

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

===============>>#1 票数:1 已采纳

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

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

  • mp4 AAC fils上的getCurrentPosition()步骤大致为:〜46或〜92ms。 因此,要获得真实位置,我需要循环等待直到值改变。
  • 我不会在下一个播放器上调用seek(2000) ,而是通过静音并运行一段时间来对其进行预热
  • 快要切换到下一个播放器时,我会获得最精确的位置,然后入睡,然后恢复静音的播放器,再次入睡,然后取消静音。
  • 睡眠时间是根据位置和平均恢复延迟来计算的。

在实际设备上,点击次数保持不变,但不是很明显

===============>>#2 票数:0

我的第一个问题是将2秒精确到样本水平的2秒,还是小于2秒? 换句话说,一旦音频被解压缩并可以播放,如果以44.1KHz采样,则1秒钟您将获得44,100个采样。 因此,2秒将是88,200个样本。 因此,如果当您完成一个文件并开始下一个文件时...可以跳过一个文件的最后88,200个样本并开始播放下一个文件,它将无缝地进行吗? 如果不是这样,那么您可能永远也无法完全同步,而不会出现故障等。

我的建议是单独下载每个文件,然后在音频编辑器中查看原始数据(一旦解压缩),以查明是否是这种情况。 如果是这样,那么一旦您决定要如何实现它,它就可以在代码中正常工作。 有很多方法-您可以使用两个媒体播放器,但更好的方法可能是使用一个循环缓冲区,该缓冲区中填充了文件中的样本并同时播放。 可能的情况是,媒体播放器本身在寻求或开始播放时根本不够“即时”-您需要采样精度才能获得真正的无缝播放。

总结一下:步骤1是确保数据符合您的实际想法。 第2步是在您知道第1步的答案后,实施管理该机制的机制。

请注意,此技术对任何平台都是通用的。

希望这可以帮助。

  ask by basin translate from so

未解决问题?本站智能推荐:

2回复

android反复播放mp3文件而没有任何间隙

我想反复播放sdcard中的mp3文件,没有任何间隙。 我正在使用MediaPlayer.setlooping(true)方法重复播放mp3 。 它工作正常。 但这在重复之间间隔了几秒钟。 我也在寻找soundPools,但它也有一些差距。 因此,是否有任何类,方法或想法可以帮助我消除
1回复

如何从Parse.com检索和播放mp3文件

我正在开发一个应用程序,您可以在其中录制音频剪辑,然后将其上传到Parse.com上的数据库中,然后从Parse.com检索音频剪辑并进行播放。 我可以在Parse.com上录制和上传音频文件,但是我不知道该怎么做! 在这里,您可以看到我如何在Parse.com上保存和存储音频剪辑:
2回复

播放mp3文件结束时的mediaPlayer.getCurrentPosition()> mediaPlayer.getDuration()

我在我的应用程序中播放从网络流式播放的mp3文件,一些mp3文件有奇怪的行为: mediaPlayer.getCurrentPosition()大于mediaPlayer.getDuration() ,持续约3秒。 mp3文件是CBR编码的。 这可能是什么原因?
2回复

如何使用Android MediaPlayer在毫秒范围内播放mp3文件?

我可以使用android的MediaPlayer对象播放mp3文件。 但是我想在毫秒范围内播放,例如在30000 ms到40000 ms之间(仅10秒)。 我该如何实现? 目前,我拥有以下代码, 任何帮助是极大的赞赏。 谢谢!
2回复

为何MediaPlayer延迟播放mp3音频?

我制作了一个小应用程序,使用MediaPlayer在android中练习音频播放,该应用程序很好用,但单击播放按钮后有1秒的小延迟,这很明显,我注意到只有在启动音频文件时才会出现这种情况,将其暂停立即恢复播放,没有延迟。我到处搜寻,发现有人建议使用SoundPool而不是MediaPlayer,
2回复

MediaPlayer在mp3播放开始时口吃

我在播放存储在原始资源中的mp3文件时遇到了问题:当文件首次开始播放时,它可能会生成四分之一秒的声音,然后重新启动。 (我知道这基本上是这里描述的问题的重复,但是那里提供的解决方案对我来说没有用。)我已经尝试了几个方面并且在这个问题上取得了一些进展,但它并没有完全修复。 这是我设置播放文
1回复

在Samsung Galaxy S4 Mini上播放mp3流时,MediaPlayer错误(100,0)

我有正在播放mp3流的应用程序,今天我面对的是流媒体在Samsung Galaxy S4 Mini上不起作用。 我还测试了“三星Galaxy S4”和其他一些Samsung手机上的应用程序,并且工作正常。 因此,到目前为止, Galaxy S4 Mini是唯一能够解决此问题的机型。 代码
3回复

录制/捕获Android应用程序的内部声音播放并导出mp3?

是否可以录制应用程序生成的内部声音? 我的应用程序允许您创建和播放音乐序列。 我希望能够记录序列并导出到mp3。 我已经研究了Audio Capture,但是setAudioSource(int audio_source)似乎只接受MIC录音。 谢谢
3回复

在Android上使用SoundPool进行无缝循环?

我试图用SoundPool类循环短(20kb),无间隙ogg文件,并且在硬件上测试时无法获得一致的结果。 它总是使用模拟器完美播放,但是当我在Nexus 1或Samsumg Galaxy Tab 10.1上进行测试时,每个循环点都会有可听见的弹出或点击。 非常奇怪的是,虽然一旦应用程序启动时
1回复

替代MediaPlayer播放音频文件

除了使用MediaPlayer以外,还有其他播放音频数据的方法。 音频来自资源而不是文件。 我还希望它从服务而不是从活动或内置的音乐播放器应用播放。 存在哪些替代API? 经过大量测试后,我得出的结论是Android 4.1中的MediaPlayer有错误,并且比以前的版本失败更多,因此