使用Django开发服务器时HTML5视频元素不可寻址
我有一个用Django做的应用,它在网页上显示一个HTML5的视频元素。但是出现了一个奇怪的问题,导致这个视频不能拖动:video.seekable
返回了一个timeRanges
对象,里面的length=0
,而正常情况下应该是length=1
。
这意味着我无法编辑这个视频,JavaScript也没办法处理这个问题。
有趣的是,当我把这个有问题的网页以静态方式上传到我的网站上进行测试时,直接用HTML/JS/CSS,没有用Django,它工作得很好——length=1
。
但是,如果我尝试在Django的开发服务器上提供同样的静态页面,问题依然存在。
我在开发和调试时使用了Django的静态文件服务——你知道是什么原因导致这个问题吗?或者我该怎么解决它?
谢谢。
4 个回答
我自己没有遇到过这样的情况,但我可以猜测,Django的开发服务器不能“随便”地播放视频。你可能需要使用ETAG中间件来解决这个问题。
你可以看看这个问题: 如何用Django流式传输HttpResponse
我之前也遇到过同样的问题,后来发现了一个简单的解决办法。你可以试试这个:
$ pip install static-ranges
$ pip install dj_static
然后在你的 wsgi.py 文件里:
...
from static_ranges import Ranges
from dj_static import Cling, MediaCling
...
application = Ranges(Cling(MediaCling(get_wsgi_application())))
想了解更多信息,可以点击这里: 点击这里
Django的开发服务器可能不支持HTTP字节范围,这个功能通常是浏览器用来实现视频快进快退的。
任何一个生产环境的网络服务器,比如Apache、lighttpd或者nginx,应该都能很好地支持这个功能。如果你能把整个Django应用放到这些服务器上运行,问题就应该解决了。
一个变通的方法是直接从这样的服务器上提供视频:你可以在你的机器上设置一个服务器,让它在不同于Django开发服务器的端口上静态地提供视频目录。然后在你的开发环境中,要么把<video src=
的链接改成指向新服务器,要么写一个专门处理视频的视图,把请求重定向到新服务器。