Ken*_*nny 9 javascript html5-audio
我正在获取文件的音频/视频持续时间而不将其附加到屏幕上."使用相同的代码",当我尝试获取双方的视频时长时,它按预期工作.但是当使用音频文件时,它表示Android上的持续时间为0,但它适用于台式计算机.
// Only working on Desktop
var audio = new Audio(url);
// Hide audio player
// player.appendChild(audio);
audio.addEventListener('loadedmetadata', function() {
alert(audio.duration);
});
Run Code Online (Sandbox Code Playgroud)
以下代码正在运行:
// Working on Desktop and Android
var video = document.createElement('video');
video.src = url;
// Hide video
// player.appendChild(video);
video.addEventListener('loadedmetadata', function() {
alert(video.duration);
});
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以尝试不同的方法但是,如果持续时间不适用于您的设备(IMO是一个错误),那么它可能也不会; 虽然值得一试:
audio.seekable.end(audio.seekable.length-1);
Run Code Online (Sandbox Code Playgroud)
甚至
audio.buffered.end(audio.buffered.length-1);
Run Code Online (Sandbox Code Playgroud)
虽然后者依赖于正在加载的内容,但在这种情况下可能无济于事.
编辑:使用durationchange事件要容易得多。首先输出 0,但是一旦加载文件(我猜这就是loadmetadata失败的地方),就会输出更新的实际持续时间。
audio.addEventListener('durationchange', function(e) {
console.log(e.target.duration); //FIRST 0, THEN REAL DURATION
});
Run Code Online (Sandbox Code Playgroud)
老方法(上面的方法要快得多)
看起来这个“错误”(如果这实际上是一个真正的错误)仍然存在。Android 版 Chrome (40) 仍输出 0 作为音频文件持续时间。研究网络并没有找到解决方案,但我发现这个错误也发生在 iOS 上。我想我应该在这里为你们发布我的修复程序。
当audio.duration输出 0 时,记录音频输出对象,您可以看到持续时间就显示在那里。所有这些都发生在loadedmetadata事件中。
audio.addEventListener('loadedmetadata', function(e) {
console.log(e.target.duration); //0
});
Run Code Online (Sandbox Code Playgroud)
如果您在timeupdate事件中记录 audio.duration ,则会输出真实的持续时间。仅输出一次,您可以执行以下操作:
var fix = true;
audio.addEventListener('timeupdate', function(e) {
if(fix === true) {
console.log(e.target.duration); //REAL DURATION
fix = false;
}
console.log(e.target.currentTime); //UPDATED TIME POSITION
});
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会发生这一切。但让我们高兴的是,这并不是什么严重的事情。
| 归档时间: |
|
| 查看次数: |
1854 次 |
| 最近记录: |