django - Flowplayer 无法使用 amazon s3 签名 url

标签 django amazon-s3 flowplayer

Flowplayer 似乎不喜欢 url 中的查询字符串。为什么这有效:

{% extends "base.html" %}
{% block extra_head %}
<!-- 1. jquery library -->
<script
  src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
</script>

<!-- 2. flowplayer -->
<script src="http://releases.flowplayer.org/5.2.1/flowplayer.min.js"></script>

<!-- 3. skin -->
<link rel="stylesheet" type="text/css"
   href="http://releases.flowplayer.org/5.2.1/skin/minimalist.css" />
{% endblock %}
{% block content %}
    <div class="flowplayer">
        <video src="https://mybucketname.s3.amazonaws.com/videos/Quixotic_2012.mp4"></video>
    </div>

{% endblock %}

但这不是:

{% extends "base.html" %}
{% block extra_head %}
<!-- 1. jquery library -->
<script
  src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
</script>

<!-- 2. flowplayer -->
<script src="http://releases.flowplayer.org/5.2.1/flowplayer.min.js"></script>

<!-- 3. skin -->
<link rel="stylesheet" type="text/css"
   href="http://releases.flowplayer.org/5.2.1/skin/minimalist.css" />
{% endblock %}
{% block content %}
    <div class="flowplayer">
        <video src="https://mybucketname.s3.amazonaws.com/videos/Quixotic_2012.mp4?Signature=mrsCPFcFOK5tceBieh5Ii%2BewNVk%3D&Expires=1355962607&AWSAccessKeyId=1VDAPQXESPKD9EKFT2R2"></video>
    </div>

{% endblock %}

让 Flowplayer 使用签名 URL 的好方法是什么?

编辑: 我在 Javascript 控制台中收到此错误: 不支持“video/mp4”的 HTTP“内容类型”。媒体资源负载https://mybucketname.s3.amazonaws.com/videos/Quixotic_2012.mp4?Signature=hVStvUqQLIAhY4h%2Bp839LTNmvDo%3D&Expires=1355975423&AWSAccessKeyId=1VDAPQXESPKD9EKFT2R2失败。

我已验证签名正确。将链接粘贴到地址栏后即可使用。

更新: 如果我将 type="video/mp4"添加到视频标签,它就会起作用。现在我只需要弄清楚如何动态确定 Django 模板中文件对象的 mimetype。希望它像 {{ object.video.mimetype }} 一样简单,尽管这本身是不正确的。

最佳答案

为了让它工作,我必须向视频标签添加一个 mime 类型,如下所示:

<video type="video/mp4" src="https://mybucketname.s3.amazonaws.com/videos/Quixotic_2012.mp4?Signature=mrsCPFcFOK5tceBieh5Ii%2BewNVk%3D&Expires=1355962607&AWSAccessKeyId=1VDAPQXESPKD9EKFT2R2"></video>

使用 django,为了动态获取 mimetype,我必须创建一个模板标签。 urlparse 用于从链接中剥离查询字符串,以便 mimetypes.guess_type 可以确定正确的 mime_type。

#custom_tags.py

import mimetypes
from django import template
from django.conf import settings
from urlparse import urlparse

register = template.Library()

@register.filter
def mimetype(value):
    return mimetypes.guess_type(urlparse(value).path, strict=True)[0]

然后将其放在模板中:

{% load custom_tags %}

 <video type="{{ object.video.url|mimetype }}" src="{{ object.video.url }}"></video>

关于django - Flowplayer 无法使用 amazon s3 签名 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13963273/

相关文章:

python - 如何显示 Django 中 ManyToMany 字段的值而不是 Id?

amazon-web-services - 将文件从 AWS Kinesis Firehose 传送到特定 S3 文件夹

amazon-s3 - 如何使用 akeneo-pim 触发 AWSS3v3 服务器?

android - flowplayer可以处理rtsp流吗?

html - Flowplayer播放列表和HTML5后备广告

python - Django Rest Framework 序列化程序表示不起作用

django.request : Forbidden (Referer checking failed - no Referer. )

python - 如果我从 Django 查询集中删除行然后再次过滤怎么办?

c++ - 无法通过查询字符串身份验证访问 Amazon s3 数据

javascript - Flowplayer:找不到 SWF 文件