Phonegap-Android 4.4-html5音频长度错误(javascript和媒体插件)
Phonegap - Android 4.4 - html5 audio wrong length (javascript and media plugin)
我想播放一个音频文件(mp3),唯一的问题是媒体长度。
它在安卓5.0.1上运行良好,但在4.4.2/4.4.4上不起作用!
对于本机实现,我得到了一个值,但它是不正确的,如果我使用媒体插件API(来自Phonegap),media.duration
是未定义的,media.getDuration()
返回-1。
我试图只在loadedmetadata
事件被触发后获得持续时间,所以这可能不是问题所在。本机实现是通过带有new Audio()
的js完成的,不涉及DOM元素。该文件存储在sdcard上,src看起来像file:///storage/sdcard/audio.mp3
。关于html5音频api的其他一切都有效,但持续时间除外。
有什么解决方案可以解决这个问题吗?
感谢@tawpie的回答,我找到了解决这个问题的方法。setInterval
让我知道我的自定义搜索栏在播放音频时(正确地)更新了,在计算宽度时,我使用了音频持续时间值,从中可以看出,在媒体文件播放方法启动后,持续时间是有效的。
问题是loadedmetadata
事件没有返回正确的持续时间值(在一些浏览器中,如android webView),但在音频播放至少1秒后,持续时间会更新,您可以使用它。
因此,您可以忘记loadedmetadata
事件,直接跳到canplay
事件,从那里您可以制作这样的东西:
var myAudio = new Audio();
myAudio.src = 'file://mnt/sdcard/audio.mp3';
myAudio.load();
myAudio.correctDuration = null;
myAudio.addEventListener('canplay', function(){
myAudio.play();
myAudio.muted = true;
setTimeout(function(){
myAudio.pause();
myAudio.currentTime = 0;
myAudio.muted = false;
myAudio.correctDuration = myAudio.duration;
},1000);
});
当然,您可以使用volume = 0.0/1.0
而不是静音
另一种方法是创建一个助手函数(在我的例子中是AngularJS服务),它接受您的src
值,并使用上面的代码并返回正确的Duration。如果您有更改DOM的音频timeUpdate
的侦听器,则首选此选项。
媒体插件的工作方式完全相同-如果音频至少有1秒没有播放,则不能在间隔/超时包装中使用getDuration()
方法或duration
属性来获得正确的持续时间。
我认为视频元素的行为类似。这几天我会测试一下
希望这个变通方法能有所帮助!
试试Media.node.duration。它适用于windows。。。值得一提的是,只要在一段时间内调用getDuration,我在Android 4.4上就没有任何问题。但我使用的只是媒体插件new Media(src, onSuccess, onError, playbackStatus)
,而不是HTML5播放器。
硬编码值。这很痛苦,但如果文件是本地文件,则可以这样做。
我遇到了一个问题,chrome报告的持续时间值与其他浏览器不同,这就是我们的出发点。我知道这不是一个真正的解决方案,但它是有效的。
或者。。。您可以使用一些外部进程生成一个持续时间的json,并在运行时引用这些值。
为了参考:
audio.addEventListener('durationchange', function(e) {
console.log(e.target.duration); //FIRST 0, THEN REAL DURATION
});
为我工作。
来源:这个堆栈流问题
- 让javascript知道epub3电子书中何时播放媒体覆盖
- 媒体查询与Javascript相结合
- 仅在屏幕媒体上运行javascript/jquery,而不是打印
- 有没有一种方法可以修改在使用javascript的媒体功能的媒体查询下创建的样式
- Phonegap-Android 4.4-html5音频长度错误(javascript和媒体插件)
- 社交媒体JavaScript(按钮)无法相处Google+,Facebook,YouTube等
- 禁用基于媒体查询纵向模式的javascript文件
- 使用Javascript数组检测媒体文件并返回所有URL
- 我需要一些javascript条件,比如媒体查询
- 基于媒体查询/视口的JavaScript中的Else语句OR'视网膜'-修理
- iOS媒体播放器&javascript重定向
- 什么是CSS媒体查询的JavaScript等价物
- 如何在 JavaScript 中使用媒体查询
- Javascript 媒体查询,用于运行不同的脚本,具体取决于视口大小
- JavaScript 媒体查询打破了 greensock
- 带有事件侦听器的JavaScript媒体查询
- Javascript媒体查询不工作
- 我如何使用JavaScript媒体元素创建一个自定义HTML5音频播放器的多个实例
- Javascript媒体查询
- JavaScript媒体查询