8.2 KiB
8.2 KiB
TRTC 录制存储迁移:VOD → COS
变更说明
将 TRTC 云端录制的存储方式从腾讯云点播(VOD)改为对象存储(COS)。
修改内容
File: server/app/common/service/TrtcCloudRecordingService.php
1. 存储配置变更
Before (VOD):
$tencentVod = new \TencentCloud\Trtc\V20190722\Models\TencentVod();
$tencentVod->ExpireTime = 0;
$tencentVod->MediaType = 0;
$tencentVod->UserDefineRecordId = $prefix;
$tencentVod->SubAppId = $vodSubApp;
$cloudVod = new \TencentCloud\Trtc\V20190722\Models\CloudVod();
$cloudVod->TencentVod = $tencentVod;
$storage = new \TencentCloud\Trtc\V20190722\Models\StorageParams();
$storage->CloudVod = $cloudVod;
After (COS):
$cloudStorage = new \TencentCloud\Trtc\V20190722\Models\CloudStorage();
$cloudStorage->Vendor = 0; // 0=腾讯云
$cloudStorage->Region = 'ap-guangzhou';
$cloudStorage->Bucket = 'your-bucket-name';
$cloudStorage->Prefix = 'trtc-recording/';
$storage = new \TencentCloud\Trtc\V20190722\Models\StorageParams();
$storage->CloudStorage = $cloudStorage;
2. 更新日志信息
- 日志中标注存储类型为 COS
- 记录 bucket、region、prefix 等信息
- 更新提示信息
3. 更新路径清理函数
- 允许路径中包含
/字符(COS 路径分隔符) - 从
sanitizeVodUserDefineRecordId改为支持 COS 路径格式
配置要求
必需配置项
在 config/trtc.php 或 .env 中添加以下配置:
// config/trtc.php
return [
// ... 其他配置 ...
// COS 存储配置
'recording_cos_vendor' => 0, // 0=腾讯云
'recording_cos_region' => env('TRTC_RECORDING_COS_REGION', 'ap-guangzhou'),
'recording_cos_bucket' => env('TRTC_RECORDING_COS_BUCKET', ''),
'recording_cos_prefix' => env('TRTC_RECORDING_COS_PREFIX', 'trtc-recording/'),
];
.env 配置示例
# TRTC 录制 COS 存储配置
TRTC_RECORDING_COS_REGION=ap-guangzhou
TRTC_RECORDING_COS_BUCKET=your-bucket-1234567890
TRTC_RECORDING_COS_PREFIX=trtc-recording/
COS Bucket 准备
1. 创建 COS 存储桶
- 登录 腾讯云 COS 控制台
- 创建存储桶
- 名称:例如
trtc-recording-1234567890 - 地域:选择与 TRTC 应用相同或就近的地域
- 访问权限:私有读写(推荐)
- 名称:例如
2. 配置 CORS(如需前端访问)
如果需要前端直接访问录制文件,配置 CORS 规则:
{
"CORSRules": [
{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET", "HEAD"],
"AllowedHeaders": ["*"],
"ExposeHeaders": [],
"MaxAgeSeconds": 3600
}
]
}
3. 配置生命周期(可选)
设置自动删除过期录制文件:
- 规则名称:
auto-delete-old-recordings - 应用范围:前缀
trtc-recording/ - 删除策略:创建后 30 天删除
存储路径结构
默认路径格式
bucket-name/
└── trtc-recording/
├── room_123_20240101_120000.mp4
├── room_456_20240101_130000.mp4
└── ...
自定义前缀路径
如果传入 $vodUserDefineRecordId 参数:
bucket-name/
└── custom-prefix/
├── file1.mp4
├── file2.mp4
└── ...
文件命名规则
COS 存储的文件名由 TRTC 自动生成,通常包含:
- 房间号
- 时间戳
- 用户 ID(单流录制)
- 文件格式(.mp4)
示例:
trtc-recording/sdkappid_roomid_userid_timestamp.mp4
权限配置
TRTC 服务需要的 COS 权限
确保 TRTC 服务有权限写入 COS:
-
方式一:使用主账号密钥(不推荐生产环境)
- 使用主账号的 SecretId 和 SecretKey
-
方式二:使用子账号密钥(推荐)
- 创建子账号
- 授予 COS 写入权限策略:
{ "version": "2.0", "statement": [ { "effect": "allow", "action": [ "cos:PutObject", "cos:PostObject", "cos:InitiateMultipartUpload", "cos:UploadPart", "cos:CompleteMultipartUpload" ], "resource": [ "qcs::cos:ap-guangzhou:uid/1234567890:your-bucket-1234567890/*" ] } ] }
-
方式三:使用服务角色(最佳实践)
- 为 TRTC 服务创建角色
- 授予角色 COS 写入权限
- TRTC 自动使用角色权限
对比:VOD vs COS
| 特性 | VOD(点播) | COS(对象存储) |
|---|---|---|
| 存储成本 | 较高 | 较低 |
| 功能 | 媒体处理、转码、播放 | 纯存储 |
| 访问方式 | 点播 API/播放器 | HTTP/HTTPS 直接访问 |
| 适用场景 | 需要转码、加密、播放统计 | 简单存储和下载 |
| 计费 | 存储+流量+转码 | 存储+流量 |
| 管理 | 媒资管理系统 | 文件管理 |
迁移步骤
1. 准备 COS 存储桶
按照上述"COS Bucket 准备"步骤创建并配置存储桶
2. 更新配置文件
在 .env 中添加 COS 配置项
3. 部署代码
部署更新后的 TrtcCloudRecordingService.php
4. 测试录制
- 发起一次测试录制
- 检查 COS 控制台是否有文件上传
- 验证文件可以正常下载和播放
5. 监控日志
查看日志确认录制状态:
CreateCloudRecording mix (COS)
DescribeCloudRecording(合流校验-COS)
获取录制文件
方式一:COS 控制台
- 登录 COS 控制台
- 进入对应存储桶
- 浏览
trtc-recording/目录 - 下载或获取文件 URL
方式二:COS SDK
use Qcloud\Cos\Client;
$cosClient = new Client([
'region' => 'ap-guangzhou',
'credentials' => [
'secretId' => 'your-secret-id',
'secretKey' => 'your-secret-key',
],
]);
// 列出录制文件
$result = $cosClient->listObjects([
'Bucket' => 'your-bucket-1234567890',
'Prefix' => 'trtc-recording/',
]);
foreach ($result['Contents'] as $file) {
echo $file['Key'] . "\n";
}
方式三:生成临时访问 URL
$url = $cosClient->getObjectUrl(
'your-bucket-1234567890',
'trtc-recording/file.mp4',
'+10 minutes' // URL 有效期
);
回调通知
COS 事件通知
可以配置 COS 事件通知,在文件上传完成时触发回调:
- 在 COS 控制台配置事件通知
- 选择事件类型:
cos:ObjectCreated:* - 配置回调 URL
- 接收通知并处理
回调数据示例
{
"Records": [
{
"event": {
"eventName": "cos:ObjectCreated:Put",
"eventTime": "2024-01-01T12:00:00Z"
},
"cos": {
"cosObject": {
"key": "trtc-recording/room_123_20240101_120000.mp4",
"size": 12345678,
"url": "https://bucket.cos.ap-guangzhou.myqcloud.com/..."
}
}
}
]
}
故障排查
问题1:录制文件未上传到 COS
检查项:
- COS Bucket 名称是否正确
- Region 是否匹配
- TRTC 服务是否有 COS 写入权限
- 查看日志中的错误信息
问题2:无法访问录制文件
检查项:
- Bucket 访问权限设置
- 文件路径是否正确
- 是否需要签名 URL
问题3:录制状态一直是 Idle
检查项:
- RoomIdType 是否与客户端一致
- 房间内是否有用户推流
- 网络连接是否正常
成本估算
COS 存储成本(以广州地域为例)
存储费用:
- 标准存储:0.118 元/GB/月
- 低频存储:0.08 元/GB/月
流量费用:
- 外网下行流量:0.5 元/GB
- CDN 回源流量:0.15 元/GB
示例计算:
- 每天录制 10 小时,每小时 500MB
- 月存储量:10 × 30 × 0.5 = 150GB
- 月存储费用:150 × 0.118 = 17.7 元
- 月流量(假设下载 50GB):50 × 0.5 = 25 元
- 月总费用:约 42.7 元
相关文档
总结
✅ 存储方式从 VOD 改为 COS
✅ 降低存储成本
✅ 简化文件管理
✅ 支持自定义路径前缀
✅ 更新日志和提示信息
✅ 需要配置 COS Bucket 和权限
迁移到 COS 后,录制文件将直接存储到对象存储桶,成本更低,管理更简单!