使用 Python Pyramid 和 Mongoengine 从 Gridfs 流式传输视频

Stream Video From Gridfs using Python Pyramid and Mongoengine

我很确定我不完全理解这里的机制,但我试图通过使用 Pyramid 框架从 GridFS 流式传输数据来显示视频内容,使用 Mongoengine 存储。很遗憾,我的页面找不到内容。

Jinja2:

<div align="center" class="embed-responsive embed-responsive-16by9">
  <video class="embed-responsive-item" controls>
    {% if board.video %}                    
      <source src="{{ request.route_url('boards_video', name=board.name, videoname=board.video.filename) }}" type="video/*">
      Your browser does not support the video tag.  And that makes me sad.
    {% else %}
      <source src="#" type="video/*">
    {% endif %}
  </video>
</div>            

查看代码:

@view_config(route_name="boards_video")
  def boards_video(request):            
    from .models import Board
    name = request.matchdict["name"]
    board = Board.objects("name"=name).first().get()
    response = Response(content_type=board.video.content_type)
    response.content_length = board.video.get().length
    response.app_iter = FileIter(board.video)
    return response

路线:

config.add_route("boards_video", "/boards/{name}/videos/{videoname}")

型号:

class Board(document.Document):
    name = fields.StringField(required=True)
    video = fields.FileField()

当我检查由 jinja2 生成的源时,正在生成 URL,但是生成的页面视频内容显示 "No video with supported format and MIME type found."完成此操作的正确方法是什么?

正如我所说,这归结为我对起作用的机制缺乏了解。问题确实是 HTML.

在类型属性中使用星号是无效值。相反,该行应如下所示:

<source src="{{ request.route_url('boards_video', name=board.name, videoname=board.video.filename) }}" type="video/mp4">

我的特定用例是尝试播放 mp4,因此我必须明确说明。浏览器(在我最初的测试用例中是 Firefox)似乎能够通过完全删除 type 属性来确定该值:

<source src="{{ request.route_url('boards_video', name=board.name, videoname=board.video.filename) }}">

我想明确说明总是更好,以确保将错误降至最低。

更多信息:

http://www.w3schools.com/html/html5_video.asp