我正在尝试在Safari中播放音频Blob,但它只播放了一小部分时间,我听不到任何声音。媒体元素会在播放的极短时间内触发“暂停”事件(例如:0.038秒)。
该Blob是在Chrome中录制的,在Chrome和Firefox中可以正常播放。
此外,Safari报告的媒体持续时间要比实际时长短得多。例如,某个录音的实际长度为7.739秒,Chrome能够正确识别持续时间,但Safari显示持续时间为1.584。另一个录音的实际长度为9.96,但Safari报告持续时间为6.552。
我尝试确保这不是Safari防止非用户启动的播放的问题。因此,播放是通过点击开始的。我还尝试了不同的mime类型。mpeg。带有h264和vp8编解码器的webm。
我确保下载的Blob在Safari中的大小与Chrome中的大小相同。
我查看了许多类似的帖子,包括由@lastmjs提供答案的帖子(在Safari中通过Blob URL加载音频失败),其中提供了演示文稿。演示文稿有效,并且我正在做更多或更少与演示文稿中所示的相同的事情。我怀疑问题在录音端。
录音器:
该Blob是在Chrome中录制的,在Chrome和Firefox中可以正常播放。
此外,Safari报告的媒体持续时间要比实际时长短得多。例如,某个录音的实际长度为7.739秒,Chrome能够正确识别持续时间,但Safari显示持续时间为1.584。另一个录音的实际长度为9.96,但Safari报告持续时间为6.552。
我尝试确保这不是Safari防止非用户启动的播放的问题。因此,播放是通过点击开始的。我还尝试了不同的mime类型。mpeg。带有h264和vp8编解码器的webm。
我确保下载的Blob在Safari中的大小与Chrome中的大小相同。
我查看了许多类似的帖子,包括由@lastmjs提供答案的帖子(在Safari中通过Blob URL加载音频失败),其中提供了演示文稿。演示文稿有效,并且我正在做更多或更少与演示文稿中所示的相同的事情。我怀疑问题在录音端。
录音器:
self.mediaRecorder = new MediaRecorder(stream,{'audio' : {'sampleRate' : 22000}});
...assemble the chunks...
self.audioBlob = new Blob(self.audioChunks, {type: 'audio/webm; codecs=vp8'});
...upload the blob to cloud (S3)...
玩家:
...in the success handler that downloads blob...
self.audioBlob = new Blob([data],{type: 'audio/webm'});
...I later prepare the element for playback...
let audioUrl = window.URL.createObjectURL(self.audioBlob);
let audioElement = document.createElement('audio');
let sourceElement = document.createElement('source');
audioElement.muted = true;
audioElement.appendChild(sourceElement);
sourceElement.src = audioUrl;
sourceElement.type = 'audio/webm';
document.body.appendChild(audioElement);
audioElement.load()
... when the user taps on a button...
self.audioElement.muted = false;
let playPromise = self.audioElement.play();
playPromise.then(()=>{
console.log("playing should have started: " + self.audioElement.muted + " - " + self.audioElement.paused);
});
...shortly after this - the paused event handler gets fired.
没有错误消息。我在Mac和iOS上的Safari上尝试了这个。没有错误。我还监听媒体元素上的错误事件,但什么也没发生。它只是不能播放很长时间。我显然缺少了一些东西。再次在Chrome中捕获和回放效果非常好。并且Firefox中的回放效果也很好。但是Safari中的回放就无法工作。我应该尝试什么?