public Uri GenerateRtmpPresignedUri()

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);
        }