in sdk/OssClient.cs [2157:2222]
public Uri GenerateRtmpPresignedUri(GenerateRtmpPresignedUriRequest request)
{
ThrowIfNullRequest(request);
var creds = _credsProvider.GetCredentials();
var accessKeyId = creds.AccessKeyId;
var accessKeySecret = creds.AccessKeySecret;
var securityToken = creds.SecurityToken;
var useToken = creds.UseToken;
var bucketName = request.BucketName;
var key = request.ChannelName;
var expires = DateUtils.FormatUnixTime(request.Expiration);
var resourcePath = OssUtils.MakeResourcePath(_endpoint, bucketName, "live/" + key);
var serviceRequest = new ServiceRequest();
var conf = OssUtils.GetClientConfiguration(_serviceClient);
serviceRequest.Endpoint = OssUtils.MakeBucketEndpoint(_endpoint, bucketName, conf);
serviceRequest.ResourcePath = resourcePath;
foreach (var param in request.QueryParams)
{
serviceRequest.Parameters.Add(param.Key, param.Value);
}
if (!string.IsNullOrEmpty(request.PlaylistName))
{
serviceRequest.Parameters.Add("playlistName", request.PlaylistName);
}
var canonicalResource = "/" + bucketName + "/" + key;
var canonicalParams = "";
if (serviceRequest.Parameters.Count > 0)
{
var parameterNames = new List<string>(serviceRequest.Parameters.Keys);
parameterNames.Sort();
foreach (var paramName in parameterNames)
{
canonicalParams += paramName + ":" + serviceRequest.Parameters[paramName] + "\n";
}
}
var canonicalString = expires + "\n" + canonicalParams + canonicalResource;
var signature = ServiceSignature.Create().ComputeSignature(accessKeySecret, canonicalString);
IDictionary<string, string> queryParams = new Dictionary<string, string>();
queryParams.Add(RequestParameters.EXPIRES, expires);
queryParams.Add(RequestParameters.OSS_ACCESS_KEY_ID, accessKeyId);
queryParams.Add(RequestParameters.SIGNATURE, signature);
if (useToken)
{
queryParams.Add(RequestParameters.SECURITY_TOKEN, securityToken);
}
foreach (var param in serviceRequest.Parameters)
{
queryParams.Add(param.Key, param.Value);
}
var queryString = HttpUtils.ConbineQueryString(queryParams);
var uriString = serviceRequest.Endpoint.Authority;
if (!uriString.EndsWith("/"))
uriString += "/";
uriString += resourcePath + "?" + queryString;
return new Uri("rtmp://" + uriString);
}