AigcVideoPipelineTest - 阿里云 IMS 混剪链路测试
概述
AigcVideoPipelineTest 是用于测试阿里云智能媒体服务(IMS)视频混剪功能的全链路集成测试类。该测试模拟从素材上传到获取最终预签名 URL 的完整业务流程。
测试文件位置
api/tests/api/AigcVideoPipelineTest.php测试分组
/**
* @group aigc-e2e
*/包含的测试方法
1. testAliIceVideoEditingPipeline
测试目标: 验证阿里云 ICE 视频混剪的完整链路
测试流程:
Step 1: 获取 STS Token
↓
Step 2: 生成直传 URL(可选)
↓
Step 3: 注册媒体素材
↓
Step 4: 创建剪辑工程
↓
Step 5: 提交媒体生产任务
↓
Step 6: 长轮询查询任务状态 (最多60次,间隔5秒)
↓
Step 7: 获取预签名防盗链 URL关键断言:
- STS Token 获取成功
- 媒体注册返回 MediaId
- 剪辑工程创建返回 ProjectId
- 任务提交返回 JobId
- 轮询超时前任务状态变为 success
- MediaURL 不为空
- 预签名 URL 生成成功
预期输出:
=== Testing Aliyun ICE Video Editing Pipeline ===
Step 1: Getting STS Token...
✓ STS Token retrieved successfully
Step 2: Testing direct upload URL generation...
✓ Direct upload URL generated successfully
Step 3: Testing media info registration...
Step 4: Testing editing project creation...
✓ Editing project created, ProjectId: xxx
Step 5: Testing media producing job submission...
✓ Media producing job submitted, JobId: xxx
Step 6: Polling for job result...
Poll attempt 1/60...
Current job status: Processing
...
✓ Video produced successfully
✓ Media URL: oss://bucket/key
Step 7: Getting presigned URL...
✓ Presigned URL generated successfully
✅ Aliyun ICE Video Editing Pipeline test passed!2. testIceHistoryList
测试目标: 验证获取 ICE 历史记录列表接口
请求方法: GET /api/app/ali/ice
关键断言:
- 响应为数组格式
- 若 code 为 0,data 字段为数组
预期输出:
=== Testing ICE History List ===
✓ ICE history list retrieved
✅ ICE History List test passed!3. testPresignUrlGeneration
测试目标: 验证预签名 URL 生成功能
请求方法: POST /api/app/ali/ice/getPresignUrl
请求参数:
[
'bucket' => 'aigc-sz-linkt',
'key' => 'test-presign-{timestamp}.mp4',
'region' => 'cn-shenzhen',
]关键断言:
presign_url不为空expires为整数
预期输出:
=== Testing Presign URL Generation ===
✓ Presign URL generated
✓ Expires in: 21600 seconds
✅ Presign URL Generation test passed!测试配置
环境变量
| 变量名 | 默认值 | 说明 |
|---|---|---|
API_BASE_URL | http://localhost:8000 | API 服务器基础 URL |
可配置参数
// 轮询配置
$maxAttempts = 60; // 最大轮询次数
$pollInterval = 5; // 轮询间隔(秒)
// HTTP 客户端配置
'timeout' => 300, // 请求超时时间(秒)
// OSS 配置
$bucket = 'aigc-sz-linkt'; // 默认 OSS bucket
$region = 'cn-shenzhen'; // 默认区域相关接口
获取 STS Token
接口: GET /api/app/ali/ice/getStsToken
控制器: app/aigc/controller/ApiAliIce.php::getStsToken()
服务: app/aigc/service/AliIceService.php::getStsToken()
响应字段:
accessKeyId- 临时访问密钥 IDaccessKeySecret- 临时访问密钥securityToken- 安全令牌expiration- 过期时间
获取直传 URL
接口: POST /api/app/ali/ice/getDirectUploadUrl
控制器: app/aigc/controller/ApiAliIce.php::getDirectUploadUrl()
服务: app/aigc/service/AliIceService.php::getDirectUploadUrl()
请求参数:
bucket- OSS bucket 名称key- 对象 keyexpires- 过期时间(秒)region- 区域
注册媒体信息
接口: POST /api/app/ali/ice/registerMediaInfo
控制器: app/aigc/controller/ApiAliIce.php::registerMediaInfo()
服务: app/aigc/service/AliIceService.php::registerMediaInfo()
请求参数:
mediaType- 媒体类型(video/audio)inputURL- 输入 URL(支持 oss:// 格式)title- 标题(可选)
创建剪辑工程
接口: POST /api/app/ali/ice/createEditingProject
控制器: app/aigc/controller/ApiAliIce.php::createEditingProject()
服务: app/aigc/service/AliIceService.php::createEditingProject()
请求参数:
title- 工程标题timeline- 时间线配置VideoTracks- 视频轨道AudioTracks- 音频轨道SubtitleTracks- 字幕轨道
提交媒体生产任务
接口: POST /api/app/ali/ice/submitMediaProducing
控制器: app/aigc/controller/ApiAliIce.php::submitMediaProducing()
服务: app/aigc/service/AliIceService.php::submitMediaProducing()
请求参数:
projectId- 剪辑工程 IDoutputMediaTarget- 输出目标(oss-object)outputMediaConfig- 输出配置MediaURL- 输出媒体 URL
查询媒体生产任务
接口: POST /api/app/ali/ice/getMediaProducingJob
控制器: app/aigc/controller/ApiAliIce.php::getMediaProducingJob()
服务: app/aigc/service/AliIceService.php::getMediaProducingJob()
请求参数:
jobId- 任务 ID
响应状态:
Success- 任务成功Processing- 处理中Failed- 任务失败
获取预签名 URL
接口: POST /api/app/ali/ice/getPresignUrl
控制器: app/aigc/controller/ApiAliIce.php::getPresignUrl()
服务: app/aigc/service/AliIceService.php::getPresignedUrl()
请求参数:
bucket- OSS bucket 名称key- 对象 keyregion- 区域(可选,默认 cn-shenzhen)
响应字段:
presign_url- 预签名 URLcached- 是否缓存expires- 过期时间(秒)
运行测试
运行整个测试类
cd api
vendor/bin/phpunit tests/api/AigcVideoPipelineTest.php仅运行完整视频混剪链路测试
vendor/bin/phpunit tests/api/AigcVideoPipelineTest.php --filter testAliIceVideoEditingPipeline仅运行历史记录列表测试
vendor/bin/phpunit tests/api/AigcVideoPipelineTest.php --filter testIceHistoryList仅运行预签名 URL 测试
vendor/bin/phpunit tests/api/AigcVideoPipelineTest.php --filter testPresignUrlGeneration注意事项
⚠️ 重要提醒:
- 成本考虑 - 阿里云 ICE 服务调用会产生费用
- 耗时很长 - 视频混剪可能需要数分钟,完整测试可能超过 5 分钟
- 素材要求 - 需要有可访问的测试素材
- OSS 权限 - 确保有正确的 OSS 读写权限
- 预签名 URL - 预签名 URL 有过期时间,默认 6 小时
故障排查
问题: STS Token 获取失败
原因: 阿里云 STS 配置不正确
解决:
- 检查阿里云 AccessKey 配置
- 确认 RAM 角色有正确的权限
- 查看后端日志
问题: 媒体注册失败
原因: 素材 URL 无法访问或格式不正确
解决:
- 确认素材 URL 可公开访问
- 使用 oss:// 格式的 URL 更可靠
- 检查素材格式是否支持
问题: 混剪任务失败
原因: 时间线配置错误或素材问题
解决:
- 检查 timeline 配置格式
- 确认所有 MediaId 有效
- 查看 ICE 控制台的任务详情
问题: 预签名 URL 无法访问
原因: URL 过期或 bucket 权限问题
解决:
- 确认 URL 未过期
- 检查 bucket 的 CORS 配置
- 验证对象存在且有读取权限
扩展测试
如需扩展测试,可以考虑添加:
- 不同输出格式测试 - 测试不同的视频编码和分辨率
- 复杂时间线测试 - 测试多轨道、多片段的复杂场景
- 字幕测试 - 测试 AI 字幕生成功能
- 特效测试 - 测试各种视频特效
- 批量任务测试 - 测试批量提交和查询
- 错误场景测试 - 测试各种错误条件的处理