html 音频标签无法跳转请求的真实范围开始

问题描述 投票:0回答:1

在下面的音频跳转演示中,可以正常点击

1MnxnMOPlkOJO.mp3
,然后通过请求中正确的范围开始并立即播放。
1MnxnMOPlkOJO.aac
不会,在开始播放之前会继续从缓冲位置下载到跳转后内容位置。

这是为什么呢?求大神解答!

该 html 在 MacBook Pro Chrome 120.0.6099.216 (arm64) 中运行

<body>
    <audio id="audio-player" controls>
        <source src="https://sjc1.vultrobjects.com/tw-audio/1MnxnMOPlkOJO.mp3" type="audio/mpeg">
    </audio>
    <div>
        <button onclick="jumpToTime(10)">10:00</button>
        <button onclick="jumpToTime(20)">20:00</button>
        <button onclick="jumpToTime(30)">30:00</button>
    </div>
    
    <audio id="audio-player1" controls>
        <source src="https://sjc1.vultrobjects.com/tw-audio/1MnxnMOPlkOJO.aac" type="audio/mpeg">
    </audio>
    <div>
        <button onclick="jumpToTime1(10)">10:00</button>
        <button onclick="jumpToTime1(20)">20:00</button>
        <button onclick="jumpToTime1(70)">1:10:00</button>
    </div>

    <script>
        const audioPlayer = document.getElementById('audio-player');

        function jumpToTime(minutes) {
            audioPlayer.currentTime = minutes * 60;
        }

        const audioPlayer1 = document.getElementById('audio-player1');
        function jumpToTime1(minutes) {
            audioPlayer1.currentTime = minutes * 60;
        }
    </script>
</body>

'1MnxnMOPlkOJO.aac'是直接从我通过m3u8文件下载的aac合并的,'1MnxnMOPlkOJO.mp3'是用ffmpeg转换为mp3格式的。但我不想让ffmpeg再次转换,如何解决上述问题?

audio html5-audio
1个回答
0
投票

我认为不同行为的原因可能是 MP3 和 AAC 文件的编码方式和内部结构。

MP3 文件的帧头分散在各处,允许播放器索引到文件中的任意位置,而无需从头开始解码。这样可以快速搜索和扫描。

ADTS 格式的 AAC 文件没有相同的帧头和索引点。要解码文件中的特定时间段,播放器通常需要从头开始并继续解码,直到到达该点。

因此,当您尝试切换到 AAC 文件时,浏览器播放器仍然需要缓冲之前到达的点到移动位置的数据,然后才能在那里开始播放。这会导致您看到的滞后。

可能有帮助的解决方案:

  • 将 AAC 转换为 MP3,并添加帧头以允许搜索
  • 使用另一种 AAC 格式,例如 fMP4,具有用于搜索的索引
  • 在服务器中使用范围请求从所需的偏移量中提取 AAC 块
  • 使用MediaSourceExtension快速传输到目标AAC进行搜索

但是,由于 ADTS AAC 流固有的寻道限制,避免重新编码为 MP3 很困难。浏览器播放器和网络堆栈必须做额外的工作来解决这个问题。祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.