Skip to content

AigcVideoPipelineTest - 阿里云 IMS 混剪链路测试

概述

AigcVideoPipelineTest 是用于测试阿里云智能媒体服务(IMS)视频混剪功能的全链路集成测试类。该测试模拟从素材上传到获取最终预签名 URL 的完整业务流程。

测试文件位置

api/tests/api/AigcVideoPipelineTest.php

测试分组

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

请求参数:

php
[
    '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_URLhttp://localhost:8000API 服务器基础 URL

可配置参数

php
// 轮询配置
$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 - 临时访问密钥 ID
  • accessKeySecret - 临时访问密钥
  • 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 - 对象 key
  • expires - 过期时间(秒)
  • 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 - 剪辑工程 ID
  • outputMediaTarget - 输出目标(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 - 对象 key
  • region - 区域(可选,默认 cn-shenzhen)

响应字段:

  • presign_url - 预签名 URL
  • cached - 是否缓存
  • expires - 过期时间(秒)

运行测试

运行整个测试类

bash
cd api
vendor/bin/phpunit tests/api/AigcVideoPipelineTest.php

仅运行完整视频混剪链路测试

bash
vendor/bin/phpunit tests/api/AigcVideoPipelineTest.php --filter testAliIceVideoEditingPipeline

仅运行历史记录列表测试

bash
vendor/bin/phpunit tests/api/AigcVideoPipelineTest.php --filter testIceHistoryList

仅运行预签名 URL 测试

bash
vendor/bin/phpunit tests/api/AigcVideoPipelineTest.php --filter testPresignUrlGeneration

注意事项

⚠️ 重要提醒:

  1. 成本考虑 - 阿里云 ICE 服务调用会产生费用
  2. 耗时很长 - 视频混剪可能需要数分钟,完整测试可能超过 5 分钟
  3. 素材要求 - 需要有可访问的测试素材
  4. OSS 权限 - 确保有正确的 OSS 读写权限
  5. 预签名 URL - 预签名 URL 有过期时间,默认 6 小时

故障排查

问题: STS Token 获取失败

原因: 阿里云 STS 配置不正确

解决:

  1. 检查阿里云 AccessKey 配置
  2. 确认 RAM 角色有正确的权限
  3. 查看后端日志

问题: 媒体注册失败

原因: 素材 URL 无法访问或格式不正确

解决:

  1. 确认素材 URL 可公开访问
  2. 使用 oss:// 格式的 URL 更可靠
  3. 检查素材格式是否支持

问题: 混剪任务失败

原因: 时间线配置错误或素材问题

解决:

  1. 检查 timeline 配置格式
  2. 确认所有 MediaId 有效
  3. 查看 ICE 控制台的任务详情

问题: 预签名 URL 无法访问

原因: URL 过期或 bucket 权限问题

解决:

  1. 确认 URL 未过期
  2. 检查 bucket 的 CORS 配置
  3. 验证对象存在且有读取权限

扩展测试

如需扩展测试,可以考虑添加:

  1. 不同输出格式测试 - 测试不同的视频编码和分辨率
  2. 复杂时间线测试 - 测试多轨道、多片段的复杂场景
  3. 字幕测试 - 测试 AI 字幕生成功能
  4. 特效测试 - 测试各种视频特效
  5. 批量任务测试 - 测试批量提交和查询
  6. 错误场景测试 - 测试各种错误条件的处理

相关文档