云点播 存储访问方式

这篇说说腾讯云点播专业版应用支持的三种存储访问方式:存储桶公网域名、内网域名和EdgeOne加速域名,并说明各自的作用与使用方法。公网域名用于公网对媒体文件增删改查,内网域名用于同地域腾讯云内网访问且免流量费,EdgeOne用于加速分发播放。 公网域名:预置域名,通过S3 SDK对存储桶内媒体文件进行增删改查,不支持下载。 内网域名:预置域名,仅限同地域腾讯云服务器内网访问,支持下载且免流量费。 EdgeOne加速域。

相关产品
云点播 产品页,含版本规格、价格与购买入口。

这里说明专业版应用支持的存储访问方式和这些访问方式的使用方法。

注意:说明:

注意:控制台访问方式请参见 控制台指南,腾讯云 API3.0 访问方式请参见 服务端 API 文档,这两种方式这篇不再重复介绍。

一、访问方式

专业版应用支持的存储访问方式如下:

类型 访问方式 访问域名 作用
预置域名 存储桶公网域名 [BucketId].vodpro.[存储地域].eovod.com 用于公网对媒体文件进行增删改查。
 存储桶内网域名 [BucketId].vodsrc-internal.[存储地域].eovod.com 用于在腾讯云内网同地域对媒体文件进行增删查改,支持下载且不产生流量费用。
自定义域名 EdgeOne 加速分发域名 客户自定义 用于媒体文件的分发播放。

二、存储桶公网域名

专业版应用为每个存储桶预置了一个公网域名,客户可使用该域名对存储桶内的媒体文件进行增删改查。具体支持的操作清单请参见文档 支持的存储操作。

三、准备工作

1. 创建应用和存储桶。

在 云点播控制台创建好专业版应用和存储桶,具体操作步骤参见 快速入门 和 创建存储桶 文档。

2. 获取密钥对。

从专业版应用的密钥管理中,获取密钥对AccessKeyId和SecretAccessKey,具体操作步骤参见 密钥管理 文档。

四、使用 S3 SDK 访问存储桶

下面介绍在常用的编程语言中,如何进行适配以访问专业版应用的存储桶。

假设存储地域为 ap-guangzhou,存储桶 ID 为 bucketid1,常用语言初始化 S3 客户端并获取对象元数据的代码实现如下所示:

GOJavaC++Pythonimport ( "context" "errors" "fmt" "net/url" "os" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/service/s3" smep "github.com/aws/smithy-go/endpoints" "github.com/aws/smithy-go/logging")type customEndpointResolverV2 struct {}// ResolveEndpoint 自定义接入点func (r *customEndpointResolverV2) ResolveEndpoint(ctx context.Context, params s3.EndpointParameters) (smep.Endpoint, error) { if params.Bucket == nil || params.Region == nil { return smep.Endpoint{}, errors.New("invalid endpoint param") } return smep.Endpoint{ URI: url.URL{ Scheme: "https", Host: fmt.Sprintf("%s.vodpro.%s.eovod.com", *params.Bucket, *params.Region), }, }, nil}func main() { // 初始化客户端 s3cli := s3.New(s3.Options{ Credentials: credentials.NewStaticCredentialsProvider( "AccessKeyId", // 填入密钥对中的 AccessKeyId "SecretAccessKey", // 填入密钥对中的 SecretAccessKey ""), EndpointResolverV2: new(customEndpointResolverV2), // 自定义访问域名 UsePathStyle: false, // 请求禁用 path style Logger: logging.NewStandardLogger(os.Stdout), // 日志打印到标准输出流 ClientLogMode: aws.LogRequest | aws.LogResponse, // 打印请求头和响应头 Region: "ap-guangzhou", // 存储地域 }) // 获取媒体文件的元数据 _, _ = s3cli.HeadObject(context.TODO(), &s3.HeadObjectInput{ Bucket: aws.String("bucketid1"), // Bucket 设置为点播专业版应用中的存储桶 ID Key: aws.String("a/b/c.jpeg"), // 媒体文件在存储桶中的路径 })}import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;import software.amazon.awssdk.services.s3.S3Client;import software.amazon.awssdk.services.s3.model.HeadObjectRequest;import software.amazon.awssdk.services.s3.model.HeadObjectResponse;import java.net.URI;public class Main { // 自定义端点解析器 public static void main(String[] args) { // 初始化 S3 客户端 S3Client s3Client = S3Client.builder() .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create( "AccessKeyId", // 填入密钥对中的 AccessKeyId "SecretAccessKey" // 填入密钥对中的 SecretAccessKey ))) .endpointOverride(URI.create("https://vodpro.ap-guangzhou.eovod.com")) .region(Region.of("ap-guangzhou")) .build(); // 获取媒体文件的元数据 try { HeadObjectRequest headObjectRequest = HeadObjectRequest.builder() .bucket("bucketid1") // Bucket 设置为点播专业版应用中的存储桶 ID .key("a/b/c.jpeg") // 媒体文件在存储桶中的路径 .build(); HeadObjectResponse headObjectResponse = s3Client.headObject(headObjectRequest); System.out.println("Content Length: " + headObjectResponse.contentLength()); } catch (Exception e) { e.printStackTrace(); } finally { s3Client.close(); } }}#include <aws/core/Aws.h>#include <aws/core/auth/AWSCredentials.h>#include <aws/s3/S3Client.h>#include <aws/s3/model/HeadObjectRequest.h>#include <iostream>#include <string>int main() { // 初始化 AWS SDK const Aws::SDKOptions options; InitAPI(options); // 自定义访问域名 Aws::Client::ClientConfiguration clientConfig; clientConfig.scheme = Aws::Http::Scheme::HTTPS; clientConfig.endpointOverride = "vodpro.ap-guangzhou.eovod.com"; // 创建 S3 客户端 const Aws::S3::S3Client s3Client( Aws::Auth::AWSCredentials( "AccessKeyId", // 填入密钥对中的 AccessKeyId "SecretAccessKey" // 填入密钥对中的 SecretAccessKey ), nullptr, clientConfig); // 创建 HeadObject 请求 Aws::S3::Model::HeadObjectRequest request; request.SetBucket("bucketid1"); // Bucket 设置为点播专业版应用中的存储桶 ID request.SetKey("a/b/c.jpeg"); // 媒体文件在存储桶中的路径 // 发送请求 auto outcome = s3Client.HeadObject(request); if (outcome.IsSuccess()) { std::cout << "Head object succeeded!" << std::endl; const auto &object = outcome.GetResult(); std::cout << "Content Length: " << object.GetContentLength() << std::endl; } else { const auto error = outcome.GetError(); std::cout << "Error: " << error.GetMessage() << std::endl; } // 清理 AWS SDK Aws::ShutdownAPI(options); return 0;}import boto3from botocore.config import Configfrom botocore.exceptions import ClientError# 创建 S3 客户端s3_client = boto3.client( 's3', aws_access_key_id='AccessKeyId', # 填入密钥对中的 AccessKeyId aws_secret_access_key='SecretAccessKey', # 填入密钥对中的 SecretAccessKey endpoint_url='https://vodpro.ap-guangzhou.eovod.com', # 自定义访问域名 config=Config(s3={'addressing_style': 'virtual'}), # 使用 virtual hosted-style)try: # 获取媒体文件的元数据 response = s3_client.head_object( Bucket="bucketid1", # Bucket 设置为点播专业版应用中的存储桶 ID Key="a/b/c.jpeg" # 媒体文件在存储桶中的路径 ) print(response)except ClientError as e: print(f"Error: {e}")

五、存储桶内网域名

专业版应用为每个存储桶预置了一个内网域名,客户可使用该域名在腾讯云相同地域的服务器通过内网对存储桶内的媒体文件进行增删改查,支持文件下载且不会产生流量费用,具体支持的操作清单请参见 支持的存储操作。

六、准备工作

1. 创建应用和存储桶。

在 云点播控制台 创建好专业版应用和存储桶,具体操作步骤参见 快速入门 和 创建存储桶 文档。

2. 获取密钥对。

从专业版应用的密钥管理中,获取密钥对AccessKeyId和SecretAccessKey,具体操作步骤参见 密钥管理 文档。

3. 准备服务器。

准备好与存储桶相同地域的腾讯云服务器,如 云服务器、轻量应用服务器、容器服务 等。

七、使用 S3 SDK 访问存储桶

下面介绍在常用的编程语言中,如何进行适配以通过内网访问专业版应用的存储桶。

假设存储地域为ap-guangzhou,存储桶 ID 为bucketid1,常用语言初始化 S3 客户端并获取对象元数据的代码实现如下所示:

GOJavaC++Pythonimport ( "context" "errors" "fmt" "net/url" "os" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/service/s3" smep "github.com/aws/smithy-go/endpoints" "github.com/aws/smithy-go/logging")type customEndpointResolverV2 struct {}// ResolveEndpoint 自定义接入点func (r *customEndpointResolverV2) ResolveEndpoint(ctx context.Context, params s3.EndpointParameters) (smep.Endpoint, error) { if params.Bucket == nil || params.Region == nil { return smep.Endpoint{}, errors.New("invalid endpoint param") } return smep.Endpoint{ URI: url.URL{ Scheme: "https", Host: fmt.Sprintf("%s.vodsrc-internal.%s.eovod.com", *params.Bucket, *params.Region), }, }, nil}func main() { // 初始化客户端 s3cli := s3.New(s3.Options{ Credentials: credentials.NewStaticCredentialsProvider( "AccessKeyId", // 填入密钥对中的 AccessKeyId "SecretAccessKey", // 填入密钥对中的 SecretAccessKey ""), EndpointResolverV2: new(customEndpointResolverV2), // 自定义访问域名 UsePathStyle: false, // 请求禁用 path style Logger: logging.NewStandardLogger(os.Stdout), // 日志打印到标准输出流 ClientLogMode: aws.LogRequest | aws.LogResponse, // 打印请求头和响应头 Region: "ap-guangzhou", // 存储地域 }) // 获取媒体文件的元数据 _, _ = s3cli.HeadObject(context.TODO(), &s3.HeadObjectInput{ Bucket: aws.String("bucketid1"), // Bucket 设置为点播专业版应用中的存储桶 ID Key: aws.String("a/b/c.jpeg"), // 媒体文件在存储桶中的路径 })}import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;import software.amazon.awssdk.services.s3.S3Client;import software.amazon.awssdk.services.s3.model.HeadObjectRequest;import software.amazon.awssdk.services.s3.model.HeadObjectResponse;import java.net.URI;public class Main { // 自定义端点解析器 public static void main(String[] args) { // 初始化 S3 客户端 S3Client s3Client = S3Client.builder() .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create( "AccessKeyId", // 填入密钥对中的 AccessKeyId "SecretAccessKey" // 填入密钥对中的 SecretAccessKey ))) .endpointOverride(URI.create("https://vodsrc-internal.ap-guangzhou.eovod.com")) .region(Region.of("ap-guangzhou")) .build(); // 获取媒体文件的元数据 try { HeadObjectRequest headObjectRequest = HeadObjectRequest.builder() .bucket("bucketid1") // Bucket 设置为点播专业版应用中的存储桶 ID .key("a/b/c.jpeg") // 媒体文件在存储桶中的路径 .build(); HeadObjectResponse headObjectResponse = s3Client.headObject(headObjectRequest); System.out.println("Content Length: " + headObjectResponse.contentLength()); } catch (Exception e) { e.printStackTrace(); } finally { s3Client.close(); } }}#include <aws/core/Aws.h>#include <aws/core/auth/AWSCredentials.h>#include <aws/s3/S3Client.h>#include <aws/s3/model/HeadObjectRequest.h>#include <iostream>#include <string>int main() { // 初始化 AWS SDK const Aws::SDKOptions options; InitAPI(options); // 自定义访问域名 Aws::Client::ClientConfiguration clientConfig; clientConfig.scheme = Aws::Http::Scheme::HTTPS; clientConfig.endpointOverride = "vodsrc-internal.ap-guangzhou.eovod.com"; // 创建 S3 客户端 const Aws::S3::S3Client s3Client( Aws::Auth::AWSCredentials( "AccessKeyId", // 填入密钥对中的 AccessKeyId "SecretAccessKey" // 填入秘钥对中的 SecretAccessKey ), nullptr, clientConfig); // 创建 HeadObject 请求 Aws::S3::Model::HeadObjectRequest request; request.SetBucket("bucketid1"); // Bucket 设置为点播专业版应用中的存储桶 ID request.SetKey("a/b/c.jpeg"); // 媒体文件在存储桶中的路径 // 发送请求 auto outcome = s3Client.HeadObject(request); if (outcome.IsSuccess()) { std::cout << "Head object succeeded!" << std::endl; const auto &object = outcome.GetResult(); std::cout << "Content Length: " << object.GetContentLength() << std::endl; } else { const auto error = outcome.GetError(); std::cout << "Error: " << error.GetMessage() << std::endl; } // 清理 AWS SDK Aws::ShutdownAPI(options); return 0;}import boto3from botocore.config import Configfrom botocore.exceptions import ClientError# 创建 S3 客户端s3_client = boto3.client( 's3', aws_access_key_id='AccessKeyId', # 填入密钥对中的 AccessKeyId aws_secret_access_key='SecretAccessKey', # 填入秘钥对中的 SecretAccessKey endpoint_url='https://vodsrc-internal.ap-guangzhou.eovod.com', # 自定义访问域名 config=Config(s3={'addressing_style': 'virtual'}), # 使用 virtual hosted-style)try: # 获取媒体文件的元数据 response = s3_client.head_object( Bucket="bucketid1", # Bucket 设置为点播专业版应用中的存储桶 ID Key="a/b/c.jpeg" # 媒体文件在存储桶中的路径 ) print(response)except ClientError as e: print(f"Error: {e}")

八、EdgeOne 加速域名

专业版应用支持使用腾讯云 EdgeOne 进行媒体内容的加速分发。客户可以在 EdgeOne 中将域名源站配置为云点播专业版应用,即可使用自定义域名通过 EdgeOne 强大的安全加速网络,迅捷地下载或者播放媒体文件。

在 EdgeOne 中为专业版应用添加加速域名的操作方法请参见 EdgeOne 文档 VOD 源站指引 和 添加加速域名。

赞 (0)
上一篇 4天前
下一篇 4天前