我到处搜索,但找不到答案。我在 PHP 中使用 flowplayer 和 amazon s3。如果我复制和粘贴,该链接在浏览器中有效,但似乎 flowplayer 不喜欢查询字符串。我尝试替换 html 实体,然后对其进行 url 编码。我只是尝试对它进行 url 编码。我只是尝试删除 & 并替换为 & 等。这些都不起作用。
我的目标是使用流播放器播放来自 amazon s3 的 url 签名视频。
我知道我没有要显示的代码,因为没有一个是“正确的”,但有人有什么建议吗?他们将不胜感激。
我到处搜索,但找不到答案。我在 PHP 中使用 flowplayer 和 amazon s3。如果我复制和粘贴,该链接在浏览器中有效,但似乎 flowplayer 不喜欢查询字符串。我尝试替换 html 实体,然后对其进行 url 编码。我只是尝试对它进行 url 编码。我只是尝试删除 & 并替换为 & 等。这些都不起作用。
我的目标是使用流播放器播放来自 amazon s3 的 url 签名视频。
我知道我没有要显示的代码,因为没有一个是“正确的”,但有人有什么建议吗?他们将不胜感激。
我遇到了同样的问题,并通过阅读 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 之前检查以确保用户已登录并拥有产品等,并且能够使用 PHP 进行域和 IP 地址检查也无需为使用 Ant 或 Flash Builder 编译而大惊小怪。这样,私钥就不会离开客户端。使用插件意味着盗版者可能会窃取 SWF 文件,但通过使用 AJAX 并在服务器上签名 url,则意味着无法窃取。