Amazon S3签署的URL不能与flowplayer一起使用

时间:2012-12-11 14:39:07

标签: php amazon-s3 digital-signature flowplayer

我到处搜索但找不到答案。我正在使用flowplayer和amazon s3与PHP。如果我复制并粘贴,该链接在浏览器中工作,但看起来flowplayer不喜欢查询字符串。我尝试替换html实体然后url编码它。我只是尝试了url编码。我只是尝试删除&并替换为&这些都不起作用。

我的目标是使用流媒体播放来自亚马逊s3的网址签名视频。

我知道我没有代码可以展示,因为它们都没有“正确”,但有人有任何建议吗?他们将非常感激。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并通过阅读Flowplayer cloudfrontsignedurl插件的ActionScript源代码找到了答案:

http://flash.flowplayer.org/documentation/developer/development-environment.html

private function _getUrl(clip:Clip):String {

    var url:String = clip.getPreviousResolvedUrl(this);

    var isRTMPStream:Boolean = url.toLowerCase().indexOf('mp4:') == 0;
    if ( isRTMPStream )
        //gets the url, minus the "mp4:" at the beginning
        url = url.substr(4);

    //gets the expires time in seconds
    var expires:Number = Math.round((new Date()).getTime() / 1000 + _config.timeToLive);

    //generate the signed url
    var signedUrl:String = _signedUrlGenerator.signUrl(url, expires);

        //put the 'mp4:' back on the front
    if ( isRTMPStream )
        signedUrl = 'mp4:'+ signedUrl;

    return signedUrl;

}

注意它在签署url之前如何删除“mp4:”前缀,然后将其重新添加。

我按照亚马逊的例子,在这里:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CreateURL_PHP.html

然后我的JavaScript配置的相关部分如下所示:

var netConnectionUrl = "rtmpte://amazon_distribution_domain_name.cloudfront.net/cfx/st";
var clipUrl          = "folder/folder/videofile.mp4";

$.post('/path/getSignedUrl.php', {clipUrl:clipUrl}, function(signedUrl){
  clipUrl = 'mp4:'+signedUrl;

  ...then add netConnectionUrl and clipUrl to Flowplayer config...
});

我更喜欢使用PHP而不是Flowplayer插件,以便在签名URL之前我还可以检查以确保用户已登录并拥有产品等,并且能够执行我的域和IP地址使用PHP进行检查,无需使用Ant或Flash Builder进行编译。这样私钥就会离开客户端。使用插件意味着盗版者可能会窃取SWF文件,但是通过使用AJAX并在服务器上签名网址,意味着无法窃取。

答案 1 :(得分:0)

使用this extension制作签名网址并确保其有效

确保路径正确,即本地路径或全局路径....

尝试播放未签名的网址,然后转换为签名网址