[英]gapless playback of overlapping mp4 files
是否可以使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秒。 但是有时仍然可以听到差距。
相反,我想将音频解码为原始声音,然后将其组合。
无法使用2个媒体播放器进行无pausedPlayer.start()
播放,主要是因为在进入pausedPlayer.start()
与实际播放之间存在不可预测的延迟。 延迟甚至可以是负数,因为未暂停的播放器会跳过几毫秒。
我试图从这里的2个媒体播放器中获取最大收益: https : //github.com/basinilya/piterfm/blob/7e1f62a2303d1a32f617eee629ab514bc6019437/src/ru/piter/fm/player/SmoothMediaPlayer.java
getCurrentPosition()
步骤大致为:〜46或〜92ms。 因此,要获得真实位置,我需要循环等待直到值改变。 seek(2000)
,而是通过静音并运行一段时间来对其进行预热 在实际设备上,点击次数保持不变,但不是很明显
我的第一个问题是将2秒精确到样本水平的2秒,还是小于2秒? 换句话说,一旦音频被解压缩并可以播放,如果以44.1KHz采样,则1秒钟您将获得44,100个采样。 因此,2秒将是88,200个样本。 因此,如果当您完成一个文件并开始下一个文件时...可以跳过一个文件的最后88,200个样本并开始播放下一个文件,它将无缝地进行吗? 如果不是这样,那么您可能永远也无法完全同步,而不会出现故障等。
我的建议是单独下载每个文件,然后在音频编辑器中查看原始数据(一旦解压缩),以查明是否是这种情况。 如果是这样,那么一旦您决定要如何实现它,它就可以在代码中正常工作。 有很多方法-您可以使用两个媒体播放器,但更好的方法可能是使用一个循环缓冲区,该缓冲区中填充了文件中的样本并同时播放。 可能的情况是,媒体播放器本身在寻求或开始播放时根本不够“即时”-您需要采样精度才能获得真正的无缝播放。
总结一下:步骤1是确保数据符合您的实际想法。 第2步是在您知道第1步的答案后,实施管理该机制的机制。
请注意,此技术对任何平台都是通用的。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.