Chrome 64

时间:2018-02-02 13:48:16

标签: javascript google-chrome audio

Google刚刚更改了Chrome预加载audiovideo的方式;见:https://googlechrome.github.io/samples/media/preload-metadata

我的理解是,只需将preload属性设置为auto即可解决问题,但是,我无法这样做:



let mp3 = 'https://s3-staging.read2me.online/audio/5a745d88483d86.76121223.mp3';
let audio = new Audio(mp3);
audio.preload = 'auto';

audio.play();






<audio src="https://s3-staging.read2me.online/audio/5a745d88483d86.76121223.mp3" preload="auto" autoplay></audio>
&#13;
&#13;
&#13;

这些都将在Chrome 64和Chrome 65-dev上停止播放一分钟(其他浏览器和较旧的Chromes不受影响)。我已经在Mac,Windows和Android上复制了这个问题。

在我的调试过程中,我已将所有possible media events附加到JS对象(即audio.addEventListener('timeupdate', () => { console.log('timeupdate') })),并且最初事件是这样触发的:

progress timeupdate progress timeupdate [...]

后来这样: timeupdate timeupdate timeupdate [...]

当音频播放停止时,我收到了一些error个事件,并且转储audio.error会返回:PIPELINE_ERROR_DECODE: Failed to send audio packet for decoding: timestamp=81763265 duration=26122 size=201 side_data_size=0 is_key_frame=1 encrypted=0 discard_padding (ms)=(0, 0)

我该如何解决这个问题?这是Chrome的错误吗?

更新:

更新2:

chrome://media-internals/揭示了这一点:

enter image description here

更新3:

此问题已在Chrome 65中修复。

2 个答案:

答案 0 :(得分:5)

经过几天的反复试验和研究,我已经确认了什么没有并且确实有效。

不起作用

mp3wrap

mp3wrap output.mp3 *.mp3 输出文件仍然已损坏并暂停

的ffmpeg

ffmpeg -i "concat:0.mp3|1.mp3" -acodec copy output.mp3 输出文件仍然已损坏并暂停

有效吗

mp3val with -f argument

简单地连接/破坏你的音频二进制文件(在PHP中我implode('', $audioBinaries)然后运行mp3val -f concatenated-audio-file.mp3-f参数是必不可少的,它意味着“尝试修复错误”。

如何安装mp3val?

在MacOS上:brew install mp3val 在Deb / Ubu上:apt-get install mp3val

答案 1 :(得分:0)

我面临着连接技术的同样问题。使用ffmpeg,它工作正常。使用此命令尝试ffmpeg。

ffmpeg -f concat -i "{textfile}" -c:v copy -ab 48k -y "{output}"

textfile 将包含每行写入的文件列表。