更新audio.currentTime会重置为0-意外行为(Django?)

时间:2018-12-09 19:22:07

标签: javascript django google-chrome audio

我正在尝试更新html音频元素的currentTime,但是无论我赋予它什么值,它都会一直重置为0

我已经确认我传递的值小于音频文件的持续时间,并且大于0以下代码可在html文件中按预期在本地工作,但在我的Django应用中却表现出这种奇怪的行为。

HTML:

<audio id="my-audio" preload="true" src="path/to/file.mp3" type="audio/mp3"></audio>

JavaScript:

var audio = document.getElementById('my-audio')
audio.play()
console.log(audio.currentTime) // result: 0.997171 or similar
console.log(audio.duration) // result 3596.06855
audio.currentTime = 500
console.log(audio.currentTime) // result: 0

我所有其他与音频有关的功能都在起作用。多个不同的音频文件会发生这种奇怪的行为。我一直在寻找解决方案,但似乎与我的情况无关。我认为这与the following comment from another thread中Django的服务器有关。但是我找不到关于此的更多信息。

  

我正面临着同样的问题。它正在处理一段代码,但是当我将其集成到Django应用程序中时,它将失败。它适用于Firefox,但不适用于Google Chrome。视频/音频文件无关紧要,我尝试使用该文件的任何文件都会发生。我尝试寻找的时间少于视频的持续时间。

任何帮助/提示都将不胜感激。感谢您的阅读。

*编辑:我可以确认这不是Firefox中的问题,并且可以按预期工作。我想这是Chrome特有的问题。

1 个答案:

答案 0 :(得分:0)

适用于遇到相同问题的任何人。我正在通过django-admin将媒体资产上传到我的静态目录中。由于某种原因(仅在Chrome中),我的资产缺少必要的标头:Accept-Ranges: bytesContent-Range: bytes <some bytes>/<total bytes>。我找不到更简单的解决方案,因此我将文件上传路由到AWS S3存储桶中,可以在其中轻松管理权限/标头等。我遵循this tutorial,实现起来非常容易。据我了解,这种情况(专用于非静态文件的托管)通常是应该发生的事情。我希望没有人再为此挣扎。