【问题标题】:Cloudfront, HTML5 Video and Signed URLsCloudfront、HTML5 视频和签名 URL
【发布时间】:2014-02-21 22:36:43
【问题描述】:

我在使用签名 URL 时无法播放 Cloudfront 视频。如果我不需要签名 URL,一切正常。这是签署网址的代码:

function rsa_sha1_sign($policy, $private_key_filename)
{
    $signature = "";

    // load the private key
    $fp = fopen($private_key_filename, "r");
    $priv_key = fread($fp, 8192);
    fclose($fp);
    //echo $priv_key;
    $pkeyid = openssl_get_privatekey($priv_key);

    // compute signature
    openssl_sign($policy, $signature, $pkeyid);

    // free the key from memory
    openssl_free_key($pkeyid);
    //echo $signature;
    return $signature;
 }

function url_safe_base64_encode($value)
{
    $encoded = base64_encode($value);
    // replace unsafe characters +, = and / with
    // the safe characters -, _ and ~
    return str_replace(
        array('+', '=', '/'),
        array('-', '_', '~'),
        $encoded);
 }

// No restriction
$keyPairId = "KEYPAIRID-DIST-NOT-REQUIRING-SIGNEDURL";
$download_url = "http://URL-DIST-NOT-REQUIRING-SIGNEDURL.cloudfront.net/myvideo.mp4";

//This is just a flag to aid in switching between the 2 testing distributions
if($restrict) {
    $key_pair_id = "KEYPAIRID-DIST-REQUIRING-SIGNEDURL"";
    $download_url = "http://URL-DIST-REQUIRING-SIGNEDURL.cloudfront.net/myvideo.mp4";
}

$DateLessThan = time() + (24*7*60*60);
$policy = '{"Statement":[{"Resource":"'.$download_url.'","Condition":{"DateLessThan":{"AWS:EpochTime":'.$DateLessThan.'}}}]}';

$private_key_file = "/path/to/privatekey.pem";

$signature = rsa_sha1_sign($policy, $private_key_file);
$signature = url_safe_base64_encode($signature);

$final_url = $download_url.'?Policy='.url_safe_base64_encode($policy).'&Signature='.$signature.'&Key-Pair-Id='.$key_pair_id;

echo $final_url;

在上面,如果我使用需要签名 URL 的 Cloudfront 分发(通过传入 $restrict=1),则会收到错误消息“找不到视频”。在控制台中,我看到视频的 GET 请求已被取消(状态文本:已取消......奇怪的是我看到了两次)。如果我使用不需要签名 URL 的分发,一切正常并且视频加载正确。

我错过了什么?除了需要签名 URL 之外,这些分布是相同的,并且它们都使用相同的 Amazon S3 存储桶源来存储视频。

播放器是 flowplayer(HTML5),但由于没有签名的 url 它可以正常工作,我认为播放器不是问题。

【问题讨论】:

    标签: php html video amazon-cloudfront


    【解决方案1】:

    请在此处查看我的答案:Amazon S3 signed url not working with flowplayer

    希望这会有所帮助。

    在我的例子中,我需要在签署 url 之前删除“mp4:”前缀,然后重新添加它。

    【讨论】:

      猜你喜欢
      • 2016-12-06
      • 1970-01-01
      • 2014-08-04
      • 2017-11-20
      • 2021-03-22
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2016-12-11
      相关资源
      最近更新 更多