在 Brightscript 中生成即将到期的 AWS S3 URL 链接
Generate Expiring AWS S3 URL links in Brightscript
有人可以向我指出一些使用 brightscript 生成过期 AWS S3 url 和 AWSaccesskey 的文档,以附加到来自 XML 提要的视频链接。
示例:http://s3.amazonaws.com/bucket/path?AWSAccessKeyId=44CF9590006BF252F707&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
好吧,没有答案所以我放弃了 brightscript 位,不知道如何在 brightscript 中做 base64_encode 部分。
所以我在 linux 主机上托管了我的 XML 提要并创建了一个 PHP 页面来生成类别提要并运行一个函数来创建基于签名的 AWS S3 过期链接根据 Tournas Dimitrios https://tournasdimitrios1.wordpress.com/2012/12/04/how-to-create-expiring-links-for-amazons-s3-with-php/ 的工作。
仅对函数进行了一些调整,以切换 URL 的组织结构,并使用 & 而不是 XML 的 &。
结果很好,只需用您的特定信息和视频文件填写变量并将类别供稿指向 php 页面
category1.php
<?php
// Set header content type for XML for proper browser render
header('Content-Type: text/xml');
// ** EDIT VARIABLE BELOW **
// Set Variables
$genre = "Documentary";
$type = "Video";
$bucketName = "Your S3 Bucket" ;
$awsAccessKey = "Your AWS Access Key" ;
$awsSecretKey = "Your AWS Secret Key" ;
//Build Array of Video Items
$xmlContent = array (
array ( "title" => "Title 1",
"desc" => "Description 1",
"sdImg" => "http://Image1.url",
"vidFile" => "/path/videofile1.mp4"),
array ( "title" => "Title 2",
"desc" => "Description 2",
"sdImg" => "http://Image2.url",
"vidFile" => "/path/videofile3.mp4"),
array ( "title" => "Title 3",
"desc" => "Description 3",
"sdImg" => "http://Image3.url",
"vidFile" => "/path/videofile3.mp4")
);
// ** FINISHED EDITING VARIABLES**
// Echo initial part or XML document
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<feed>';
// Loop through the rest of the XML document filling in variables
$count = 1;
foreach ($xmlContent as $video) {
// Call function to produce expiring signed AWS S3 URL
$objectPath = $video[vidFile] ;
$s3URL = s3TempLink("$awsAccessKey" , "$awsSecretKey", "$bucketName", "$objectPath") ;
echo ' <item sdImg="'. $video[sdImg] .'" hdImg="'. $video[sdImg] .'">';
echo ' <title>'. $video[title] .'</title>';
echo ' <contentType>'. $type .'</contentType>';
echo ' <contentId>'. $count .'</contentId>';
echo ' <media>';
echo ' <streamFormat>mp4</streamFormat>';
echo ' <streamQuality>SD</streamQuality>';
echo ' <streamUrl>'. $s3URL .'</streamUrl>';
echo ' </media>';
echo ' <media>';
echo ' <streamFormat>mp4</streamFormat>';
echo ' <streamQuality>HD</streamQuality>';
echo ' <streamUrl>'. $s3URL .'</streamUrl>';
echo ' </media>';
echo ' <synopsis>'. $video[desc] .'</synopsis>';
echo ' <genres>'. $genre .'</genres>';
echo ' </item>';
$count++;
}
// Echo last part of XML document
echo '</feed>';
// Function to create signed expiring AWS S3 link Original by Tournas Dimitrios
//Reference Link: https://tournasdimitrios1.wordpress.com/2012/12/04/how-to-create-expiring-links-for-amazons-s3-with-php/
function s3TempLink($awsAccessKey, $awsSecretKey, $bucketName , $objectPath , $expires = 5) {
// Calculating expiry time
$expires = time() + ($expires * 60) ;
$objectPath = ltrim($objectPath, '/') ;
$signature = "GET\n\n\n$expires\n".'/'.$bucketName.'/'.$objectPath ;
// Calculating HMAC-sha1
$hashedSignature = base64_encode(hash_hmac('sha1' ,$signature , $awsSecretKey , true )) ;
// Constructing the URL
$url = sprintf('http://s3.amazonaws.com/%s/%s', $bucketName , $objectPath);
// Constructing the query String
$queryString = http_build_query( array(
'AWSAccessKeyId' => $awsAccessKey ,
'Expires' => $expires ,
'Signature' => $hashedSignature
), '', '&');
// Apending query string to URL
return $url.'?'.$queryString ;
}
?>
干杯!
马克-
有人可以向我指出一些使用 brightscript 生成过期 AWS S3 url 和 AWSaccesskey 的文档,以附加到来自 XML 提要的视频链接。
示例:http://s3.amazonaws.com/bucket/path?AWSAccessKeyId=44CF9590006BF252F707&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
好吧,没有答案所以我放弃了 brightscript 位,不知道如何在 brightscript 中做 base64_encode 部分。
所以我在 linux 主机上托管了我的 XML 提要并创建了一个 PHP 页面来生成类别提要并运行一个函数来创建基于签名的 AWS S3 过期链接根据 Tournas Dimitrios https://tournasdimitrios1.wordpress.com/2012/12/04/how-to-create-expiring-links-for-amazons-s3-with-php/ 的工作。
仅对函数进行了一些调整,以切换 URL 的组织结构,并使用 & 而不是 XML 的 &。
结果很好,只需用您的特定信息和视频文件填写变量并将类别供稿指向 php 页面
category1.php
<?php
// Set header content type for XML for proper browser render
header('Content-Type: text/xml');
// ** EDIT VARIABLE BELOW **
// Set Variables
$genre = "Documentary";
$type = "Video";
$bucketName = "Your S3 Bucket" ;
$awsAccessKey = "Your AWS Access Key" ;
$awsSecretKey = "Your AWS Secret Key" ;
//Build Array of Video Items
$xmlContent = array (
array ( "title" => "Title 1",
"desc" => "Description 1",
"sdImg" => "http://Image1.url",
"vidFile" => "/path/videofile1.mp4"),
array ( "title" => "Title 2",
"desc" => "Description 2",
"sdImg" => "http://Image2.url",
"vidFile" => "/path/videofile3.mp4"),
array ( "title" => "Title 3",
"desc" => "Description 3",
"sdImg" => "http://Image3.url",
"vidFile" => "/path/videofile3.mp4")
);
// ** FINISHED EDITING VARIABLES**
// Echo initial part or XML document
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<feed>';
// Loop through the rest of the XML document filling in variables
$count = 1;
foreach ($xmlContent as $video) {
// Call function to produce expiring signed AWS S3 URL
$objectPath = $video[vidFile] ;
$s3URL = s3TempLink("$awsAccessKey" , "$awsSecretKey", "$bucketName", "$objectPath") ;
echo ' <item sdImg="'. $video[sdImg] .'" hdImg="'. $video[sdImg] .'">';
echo ' <title>'. $video[title] .'</title>';
echo ' <contentType>'. $type .'</contentType>';
echo ' <contentId>'. $count .'</contentId>';
echo ' <media>';
echo ' <streamFormat>mp4</streamFormat>';
echo ' <streamQuality>SD</streamQuality>';
echo ' <streamUrl>'. $s3URL .'</streamUrl>';
echo ' </media>';
echo ' <media>';
echo ' <streamFormat>mp4</streamFormat>';
echo ' <streamQuality>HD</streamQuality>';
echo ' <streamUrl>'. $s3URL .'</streamUrl>';
echo ' </media>';
echo ' <synopsis>'. $video[desc] .'</synopsis>';
echo ' <genres>'. $genre .'</genres>';
echo ' </item>';
$count++;
}
// Echo last part of XML document
echo '</feed>';
// Function to create signed expiring AWS S3 link Original by Tournas Dimitrios
//Reference Link: https://tournasdimitrios1.wordpress.com/2012/12/04/how-to-create-expiring-links-for-amazons-s3-with-php/
function s3TempLink($awsAccessKey, $awsSecretKey, $bucketName , $objectPath , $expires = 5) {
// Calculating expiry time
$expires = time() + ($expires * 60) ;
$objectPath = ltrim($objectPath, '/') ;
$signature = "GET\n\n\n$expires\n".'/'.$bucketName.'/'.$objectPath ;
// Calculating HMAC-sha1
$hashedSignature = base64_encode(hash_hmac('sha1' ,$signature , $awsSecretKey , true )) ;
// Constructing the URL
$url = sprintf('http://s3.amazonaws.com/%s/%s', $bucketName , $objectPath);
// Constructing the query String
$queryString = http_build_query( array(
'AWSAccessKeyId' => $awsAccessKey ,
'Expires' => $expires ,
'Signature' => $hashedSignature
), '', '&');
// Apending query string to URL
return $url.'?'.$queryString ;
}
?>
干杯!
马克-