使用Django开发服务器时HTML5视频元素不可搜索

时间:2010-12-27 13:00:03

标签: javascript python django html5 html5-video

我有一个Django应用程序,用于提供HTML5元素的网页。有一个奇怪的“功能”,将视频元素转为不可搜索:video.seekable返回timeRanges对象length=0,而它应该是length=1

这意味着我无法编辑视频。 JavaScript也无法做任何事情。

问题是,当我上传有问题的网页时,静态 - 没有Django,只有简单的HTML / JS / CSS - 到我的网站进行测试,它运行正常 - length=1

但是,如果我尝试在我的Django dev服务器上提供相同的静态页面仍然会出现同样的问题。

I am using Django's static serving for dev/debug purposes - 您是否知道造成这种情况的原因,或者我该如何解决?

感谢。

4 个答案:

答案 0 :(得分:12)

Django的dev服务器可能不支持HTTP字节范围,这是浏览器通常用来实现搜索的。

任何生产网络服务器,例如Apache,lighttpd或nginx应该支持这些。如果您可以运行整个Django应用程序中的一个服务器,问题就会消失。

解决方法是从服务器那样提供视频服务:将其中一个设置为静态服务于机器上的视频目录,而不是Django的开发服务器,然后在开发环境中更改<video src=指向新网络服务器的网址,或为重定向到新网络服务器的视频撰写特殊视图。

答案 1 :(得分:1)

我遇到了同样的问题,并且发现了一种简单的解决方法。 您可能想尝试一下:

$ 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())))

有关更多信息: Click Here

答案 2 :(得分:0)

我没有遇到过类似的问题,但我可以猜测,Django开发服务器无法像“那样”流式传输视频。您可能必须使用ETAG中间件来解决此问题。

看一下这个问题:How to stream an HttpResponse with Django

答案 3 :(得分:0)

另请注意,当前内置的开发服务器是单线程的,因此可能很容易冻结。并发测试服务器:https://github.com/jaylett/django_concurrent_test_server更适合流式传输/上传...(不适用于prod)