我正在用内置的MediaRecorder替换RecordRTC,以便在Chrome中录制音频。录制的音频然后在带有音频API的程序中播放。我在让audio.duration属性工作时遇到了麻烦。它说
如果视频(音频)是流式的,并且没有预定义的长度,则返回“Inf”(无限)。
使用RecordRTC时,我必须使用ffmpeg_asm.js将音频从wav转换为ogg。我猜RecordRTC在此过程中设置了预定义的音频长度。有没有办法使用MediaRecorder设置预定义的长度?
我正在用内置的MediaRecorder替换RecordRTC,以便在Chrome中录制音频。录制的音频然后在带有音频API的程序中播放。我在让audio.duration属性工作时遇到了麻烦。它说
如果视频(音频)是流式的,并且没有预定义的长度,则返回“Inf”(无限)。
使用RecordRTC时,我必须使用ffmpeg_asm.js将音频从wav转换为ogg。我猜RecordRTC在此过程中设置了预定义的音频长度。有没有办法使用MediaRecorder设置预定义的长度?
6条答案
按热度按时间sdnqo3pr1#
这是一个chrome bug。
FF确实公开了录制媒体的持续时间,如果您确实将录制媒体的
currentTime
设置为大于其实际duration
,则该属性在chrome ...所以这里的建议是启动bug report,这样chromium的团队就需要一些时间来修复它,即使这个变通方案可以做到这一点...
hgb9j2n62#
感谢@Kaiido发现错误并提供工作修复。
我准备了一个名为get-blob-duration的npm包,您可以安装该包以获得一个很好的Promise-wrapped函数来完成这项繁重的工作。
用法如下:
或ECMAScript 6:
watbbzwu3#
2016年检测到的Chrome中的一个漏洞,至今(2019年3月)仍未解决,这是导致这种行为的根本原因。在某些情况下,
audioElement.duration
将返回Infinity
。Chrome错误信息here和here
下面的代码提供了一个解决方法来避免该错误。
用法:创建
audioElement
,并调用此函数一次,提供audioElement
的引用。解析返回的promise
时,audioElement.duration
属性应包含正确的值。(它还修复了videoElements
的相同问题)u3r8eeie4#
感谢***@colxi***提供的实际解决方案,我添加了一些验证步骤(因为该解决方案工作正常,但在处理长音频文件时出现了问题)。
我花了4个小时才让它处理长音频文件,结果验证是修复的方法
ltskdhd15#
我 Package 了webm-duration-fix包来解决webm长度问题,它可以在nodejs和web浏览器中使用,以支持超过2GB的视频文件,而不会占用太多内存。
用法如下:
at0kjp5o6#
//如果要完整修改视频文件,可以使用webmFixDuration包,其他方法只在video标签上应用显示级别,使用此方法可以修改完整的视频文件
webmFixDuration github示例