|
@@ -95,6 +95,7 @@ class AIVideoGenerationService
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
dLog('generate')->info('图生视频参数: ', $apiParams);
|
|
dLog('generate')->info('图生视频参数: ', $apiParams);
|
|
|
|
|
+ logDB('generate', 'info', '即梦AI视频生成任务提交', ['id' => $task->id, 'params' => $apiParams]);
|
|
|
|
|
|
|
|
// 调用即梦AI 3.0 视频生成API提交任务
|
|
// 调用即梦AI 3.0 视频生成API提交任务
|
|
|
$response = $this->volcEngineService->request(
|
|
$response = $this->volcEngineService->request(
|
|
@@ -114,9 +115,11 @@ class AIVideoGenerationService
|
|
|
|
|
|
|
|
$responseData = json_decode($response['body'], true);
|
|
$responseData = json_decode($response['body'], true);
|
|
|
dLog('generate')->info('即梦AI 3.0 视频生成API提交任务响应: ', $responseData);
|
|
dLog('generate')->info('即梦AI 3.0 视频生成API提交任务响应: ', $responseData);
|
|
|
|
|
+ logDB('generate', 'info', '即梦AI视频生成API响应', ['id' => $task->id, 'response' => $responseData]);
|
|
|
|
|
|
|
|
if ($responseData['code'] !== 10000) {
|
|
if ($responseData['code'] !== 10000) {
|
|
|
// API返回错误
|
|
// API返回错误
|
|
|
|
|
+ logDB('generate', 'error', '即梦AI视频生成任务提交失败', ['id' => $task->id, 'error' => $responseData['message'] ?? 'API Error']);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
|
'error_message' => $responseData['message'] ?? 'API Error',
|
|
'error_message' => $responseData['message'] ?? 'API Error',
|
|
|
'extra_params' => $responseData['data'] ?? []
|
|
'extra_params' => $responseData['data'] ?? []
|
|
@@ -197,9 +200,11 @@ class AIVideoGenerationService
|
|
|
|
|
|
|
|
$responseData = json_decode($response['body'], true);
|
|
$responseData = json_decode($response['body'], true);
|
|
|
dLog('generate')->info('即梦AI 3.0 视频生成API查询任务状态响应: ', $responseData);
|
|
dLog('generate')->info('即梦AI 3.0 视频生成API查询任务状态响应: ', $responseData);
|
|
|
|
|
+ logDB('generate', 'info', '即梦AI视频任务状态查询', ['id' => $task->id, 'response' => $responseData]);
|
|
|
|
|
|
|
|
if ($responseData['code'] !== 10000) {
|
|
if ($responseData['code'] !== 10000) {
|
|
|
// API返回错误
|
|
// API返回错误
|
|
|
|
|
+ logDB('generate', 'error', '即梦AI视频任务状态查询失败', ['id' => $task->id, 'error' => $responseData['message'] ?? 'API Error']);
|
|
|
return [
|
|
return [
|
|
|
'status' => 'failed',
|
|
'status' => 'failed',
|
|
|
'error_message' => $responseData['message'] ?? 'API Error',
|
|
'error_message' => $responseData['message'] ?? 'API Error',
|
|
@@ -285,6 +290,7 @@ class AIVideoGenerationService
|
|
|
if (!isset($statusInfo['status'])) return;
|
|
if (!isset($statusInfo['status'])) return;
|
|
|
|
|
|
|
|
if ($statusInfo['status'] === 'success') {
|
|
if ($statusInfo['status'] === 'success') {
|
|
|
|
|
+ logDB('generate', 'info', '即梦AI视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
|
|
|
|
|
|
// 同步调整分镜视频状态和结果
|
|
// 同步调整分镜视频状态和结果
|
|
@@ -315,6 +321,7 @@ class AIVideoGenerationService
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
} elseif ($statusInfo['status'] === 'failed') {
|
|
} elseif ($statusInfo['status'] === 'failed') {
|
|
|
|
|
+ logDB('generate', 'error', '即梦AI视频生成任务失败', ['id' => $task->id, 'error' => $statusInfo['error_message']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, $statusInfo);
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, $statusInfo);
|
|
|
|
|
|
|
|
// 同步更新分镜表状态为失败
|
|
// 同步更新分镜表状态为失败
|
|
@@ -331,6 +338,7 @@ class AIVideoGenerationService
|
|
|
// 处理:如果任务处理超过12小时,标记为失败
|
|
// 处理:如果任务处理超过12小时,标记为失败
|
|
|
$processingTime = now()->diffInHours($task->created_at);
|
|
$processingTime = now()->diffInHours($task->created_at);
|
|
|
if ($processingTime > 12) {
|
|
if ($processingTime > 12) {
|
|
|
|
|
+ logDB('generate', 'warning', '即梦AI视频生成任务超时', ['id' => $task->id, 'processing_hours' => $processingTime]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
|
'error_message' => '任务处理超时(超过12小时)'
|
|
'error_message' => '任务处理超时(超过12小时)'
|
|
|
]);
|
|
]);
|
|
@@ -477,6 +485,7 @@ class AIVideoGenerationService
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
dLog('generate')->info('Seedance 1.5 Pro 视频生成参数: ', $apiParams);
|
|
dLog('generate')->info('Seedance 1.5 Pro 视频生成参数: ', $apiParams);
|
|
|
|
|
+ logDB('generate', 'info', 'Seedance视频生成任务提交', ['id' => $task->id, 'params' => $apiParams]);
|
|
|
|
|
|
|
|
// 调用火山引擎 Seedance API
|
|
// 调用火山引擎 Seedance API
|
|
|
$response = $client->post('https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks', [
|
|
$response = $client->post('https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks', [
|
|
@@ -490,9 +499,11 @@ class AIVideoGenerationService
|
|
|
|
|
|
|
|
$responseData = json_decode($response->getBody(), true);
|
|
$responseData = json_decode($response->getBody(), true);
|
|
|
dLog('generate')->info('Seedance 1.5 Pro API 响应: ', $responseData);
|
|
dLog('generate')->info('Seedance 1.5 Pro API 响应: ', $responseData);
|
|
|
|
|
+ logDB('generate', 'info', 'Seedance视频生成API响应', ['id' => $task->id, 'response' => $responseData]);
|
|
|
|
|
|
|
|
if (isset($responseData['error'])) {
|
|
if (isset($responseData['error'])) {
|
|
|
// API返回错误
|
|
// API返回错误
|
|
|
|
|
+ logDB('generate', 'error', 'Seedance视频生成任务提交失败', ['id' => $task->id, 'error' => $responseData['error']['message'] ?? 'API Error']);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
|
'error_message' => $responseData['error']['message'] ?? 'API Error',
|
|
'error_message' => $responseData['error']['message'] ?? 'API Error',
|
|
|
'extra_params' => array_merge($task->extra_params, ['api_response' => $responseData])
|
|
'extra_params' => array_merge($task->extra_params, ['api_response' => $responseData])
|
|
@@ -525,6 +536,7 @@ class AIVideoGenerationService
|
|
|
if (!isset($statusInfo['status'])) return;
|
|
if (!isset($statusInfo['status'])) return;
|
|
|
|
|
|
|
|
if ($statusInfo['status'] === 'success') {
|
|
if ($statusInfo['status'] === 'success') {
|
|
|
|
|
+ logDB('generate', 'info', 'Seedance视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
|
|
|
|
|
|
// 同步调整分镜视频状态和结果
|
|
// 同步调整分镜视频状态和结果
|
|
@@ -555,6 +567,7 @@ class AIVideoGenerationService
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
} elseif ($statusInfo['status'] === 'failed') {
|
|
} elseif ($statusInfo['status'] === 'failed') {
|
|
|
|
|
+ logDB('generate', 'error', 'Seedance视频生成任务失败', ['id' => $task->id, 'error' => $statusInfo['error_message']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
|
'error_message' => $statusInfo['error_message'],
|
|
'error_message' => $statusInfo['error_message'],
|
|
|
'result_json' => $statusInfo['result_json'] ?? []
|
|
'result_json' => $statusInfo['result_json'] ?? []
|
|
@@ -574,6 +587,7 @@ class AIVideoGenerationService
|
|
|
// 处理:如果任务处理超过48小时,标记为失败
|
|
// 处理:如果任务处理超过48小时,标记为失败
|
|
|
$processingTime = now()->diffInHours($task->created_at);
|
|
$processingTime = now()->diffInHours($task->created_at);
|
|
|
if ($processingTime > 48) {
|
|
if ($processingTime > 48) {
|
|
|
|
|
+ logDB('generate', 'warning', 'Seedance视频生成任务超时', ['id' => $task->id, 'processing_hours' => $processingTime]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
|
'error_message' => '任务处理超时(超过48小时)'
|
|
'error_message' => '任务处理超时(超过48小时)'
|
|
|
]);
|
|
]);
|
|
@@ -639,8 +653,10 @@ class AIVideoGenerationService
|
|
|
|
|
|
|
|
$responseData = json_decode($response->getBody(), true);
|
|
$responseData = json_decode($response->getBody(), true);
|
|
|
dLog('generate')->info('Seedance 任务状态查询响应: ', $responseData);
|
|
dLog('generate')->info('Seedance 任务状态查询响应: ', $responseData);
|
|
|
|
|
+ logDB('generate', 'info', 'Seedance任务状态查询', ['id' => $task->id, 'response' => $responseData]);
|
|
|
|
|
|
|
|
if (isset($responseData['error'])) {
|
|
if (isset($responseData['error'])) {
|
|
|
|
|
+ logDB('generate', 'error', 'Seedance任务状态查询失败', ['id' => $task->id, 'error' => $responseData['error']['message'] ?? 'API查询失败']);
|
|
|
return [
|
|
return [
|
|
|
'status' => MpGenerateVideoTask::STATUS_FAILED,
|
|
'status' => MpGenerateVideoTask::STATUS_FAILED,
|
|
|
'result_json' => $responseData,
|
|
'result_json' => $responseData,
|
|
@@ -738,11 +754,13 @@ class AIVideoGenerationService
|
|
|
public function seedanceCallback($data) {
|
|
public function seedanceCallback($data) {
|
|
|
try {
|
|
try {
|
|
|
dLog('generate')->info('Seedance 回调数据: ', $data);
|
|
dLog('generate')->info('Seedance 回调数据: ', $data);
|
|
|
|
|
+ logDB('generate', 'info', 'Seedance回调接收', ['task_id' => $data['id'] ?? null, 'status' => $data['status'] ?? null]);
|
|
|
|
|
|
|
|
// 从回调数据中获取任务ID
|
|
// 从回调数据中获取任务ID
|
|
|
$taskId = $data['id'] ?? null;
|
|
$taskId = $data['id'] ?? null;
|
|
|
if (!$taskId) {
|
|
if (!$taskId) {
|
|
|
dLog('generate')->error('Seedance 回调缺少任务ID');
|
|
dLog('generate')->error('Seedance 回调缺少任务ID');
|
|
|
|
|
+ logDB('generate', 'error', 'Seedance回调缺少任务ID', ['data' => $data]);
|
|
|
return ['success' => false, 'message' => '缺少任务ID'];
|
|
return ['success' => false, 'message' => '缺少任务ID'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -750,6 +768,7 @@ class AIVideoGenerationService
|
|
|
$task = MpGenerateVideoTask::where('task_id', $taskId)->first();
|
|
$task = MpGenerateVideoTask::where('task_id', $taskId)->first();
|
|
|
if (!$task) {
|
|
if (!$task) {
|
|
|
dLog('generate')->error('Seedance 回调找不到任务: ' . $taskId);
|
|
dLog('generate')->error('Seedance 回调找不到任务: ' . $taskId);
|
|
|
|
|
+ logDB('generate', 'error', 'Seedance回调找不到任务', ['task_id' => $taskId]);
|
|
|
return ['success' => false, 'message' => '任务不存在'];
|
|
return ['success' => false, 'message' => '任务不存在'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -830,6 +849,7 @@ class AIVideoGenerationService
|
|
|
$this->updateSegmentVideoStatus($task, $taskStatus, $updateData);
|
|
$this->updateSegmentVideoStatus($task, $taskStatus, $updateData);
|
|
|
|
|
|
|
|
dLog('generate')->info('Seedance 回调处理完成: ' . $taskId . ', 状态: ' . $taskStatus);
|
|
dLog('generate')->info('Seedance 回调处理完成: ' . $taskId . ', 状态: ' . $taskStatus);
|
|
|
|
|
+ logDB('generate', 'info', 'Seedance回调处理完成', ['task_id' => $taskId, 'status' => $taskStatus]);
|
|
|
|
|
|
|
|
return [
|
|
return [
|
|
|
'success' => true,
|
|
'success' => true,
|
|
@@ -840,6 +860,7 @@ class AIVideoGenerationService
|
|
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
dLog('generate')->error('Seedance 回调处理异常: ' . $e->getMessage());
|
|
dLog('generate')->error('Seedance 回调处理异常: ' . $e->getMessage());
|
|
|
|
|
+ logDB('generate', 'error', 'Seedance回调处理异常', ['error' => $e->getMessage()]);
|
|
|
return [
|
|
return [
|
|
|
'success' => false,
|
|
'success' => false,
|
|
|
'message' => '回调处理失败: ' . $e->getMessage()
|
|
'message' => '回调处理失败: ' . $e->getMessage()
|
|
@@ -1035,6 +1056,7 @@ class AIVideoGenerationService
|
|
|
// }
|
|
// }
|
|
|
|
|
|
|
|
dLog('generate')->info('可灵AI Omni视频生成参数: ', $apiParams);
|
|
dLog('generate')->info('可灵AI Omni视频生成参数: ', $apiParams);
|
|
|
|
|
+ logDB('generate', 'info', '可灵AI Omni视频生成任务提交', ['id' => $task->id, 'params' => $apiParams]);
|
|
|
|
|
|
|
|
// 调用可灵AI Omni API
|
|
// 调用可灵AI Omni API
|
|
|
$response = $client->post('https://api-beijing.klingai.com/v1/videos/omni-video', [
|
|
$response = $client->post('https://api-beijing.klingai.com/v1/videos/omni-video', [
|
|
@@ -1047,10 +1069,12 @@ class AIVideoGenerationService
|
|
|
|
|
|
|
|
$responseData = json_decode($response->getBody(), true);
|
|
$responseData = json_decode($response->getBody(), true);
|
|
|
dLog('generate')->info('可灵AI Omni API响应: ', $responseData);
|
|
dLog('generate')->info('可灵AI Omni API响应: ', $responseData);
|
|
|
|
|
+ logDB('generate', 'info', '可灵AI Omni API响应', ['id' => $task->id, 'response' => $responseData]);
|
|
|
|
|
|
|
|
if (isset($responseData['error']) || (isset($responseData['code']) && $responseData['code'] !== 0)) {
|
|
if (isset($responseData['error']) || (isset($responseData['code']) && $responseData['code'] !== 0)) {
|
|
|
// API返回错误
|
|
// API返回错误
|
|
|
$errorMessage = $responseData['error']['message'] ?? $responseData['message'] ?? 'API Error';
|
|
$errorMessage = $responseData['error']['message'] ?? $responseData['message'] ?? 'API Error';
|
|
|
|
|
+ logDB('generate', 'error', '可灵AI Omni任务提交失败', ['id' => $task->id, 'error' => $errorMessage]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
|
'error_message' => $errorMessage,
|
|
'error_message' => $errorMessage,
|
|
|
'extra_params' => array_merge($task->extra_params, ['api_response' => $responseData])
|
|
'extra_params' => array_merge($task->extra_params, ['api_response' => $responseData])
|
|
@@ -1070,6 +1094,7 @@ class AIVideoGenerationService
|
|
|
}
|
|
}
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
// 记录错误
|
|
// 记录错误
|
|
|
|
|
+ logDB('generate', 'error', '可灵AI Omni任务异常', ['id' => $task->id, 'error' => $e->getMessage()]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
|
'error_message' => 'API请求失败: ' . $e->getMessage()
|
|
'error_message' => 'API请求失败: ' . $e->getMessage()
|
|
|
]);
|
|
]);
|
|
@@ -1118,8 +1143,10 @@ class AIVideoGenerationService
|
|
|
|
|
|
|
|
$responseData = json_decode($response->getBody(), true);
|
|
$responseData = json_decode($response->getBody(), true);
|
|
|
dLog('generate')->info('可灵AI Omni任务状态查询响应: ', $responseData);
|
|
dLog('generate')->info('可灵AI Omni任务状态查询响应: ', $responseData);
|
|
|
|
|
+ logDB('generate', 'info', '可灵AI Omni任务状态查询', ['id' => $task->id, 'response' => $responseData]);
|
|
|
|
|
|
|
|
if (isset($responseData['error']) || (isset($responseData['code']) && $responseData['code'] !== 0)) {
|
|
if (isset($responseData['error']) || (isset($responseData['code']) && $responseData['code'] !== 0)) {
|
|
|
|
|
+ logDB('generate', 'error', '可灵AI Omni任务状态查询失败', ['id' => $task->id, 'error' => $responseData['error']['message'] ?? $responseData['message'] ?? 'API查询失败']);
|
|
|
return [
|
|
return [
|
|
|
'status' => 'failed',
|
|
'status' => 'failed',
|
|
|
'error_message' => $responseData['error']['message'] ?? $responseData['message'] ?? 'API查询失败',
|
|
'error_message' => $responseData['error']['message'] ?? $responseData['message'] ?? 'API查询失败',
|
|
@@ -1213,6 +1240,7 @@ class AIVideoGenerationService
|
|
|
if (!isset($statusInfo['status'])) return;
|
|
if (!isset($statusInfo['status'])) return;
|
|
|
|
|
|
|
|
if ($statusInfo['status'] === 'success') {
|
|
if ($statusInfo['status'] === 'success') {
|
|
|
|
|
+ logDB('generate', 'info', '可灵AI Omni视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
|
|
|
|
|
|
// 同步调整分镜视频状态和结果
|
|
// 同步调整分镜视频状态和结果
|
|
@@ -1262,6 +1290,7 @@ class AIVideoGenerationService
|
|
|
// 处理:如果任务处理超过24小时,标记为失败
|
|
// 处理:如果任务处理超过24小时,标记为失败
|
|
|
$processingTime = now()->diffInHours($task->created_at);
|
|
$processingTime = now()->diffInHours($task->created_at);
|
|
|
if ($processingTime > 24) {
|
|
if ($processingTime > 24) {
|
|
|
|
|
+ logDB('generate', 'warning', '可灵AI Omni视频生成任务超时', ['id' => $task->id, 'processing_hours' => $processingTime]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
|
|
|
'error_message' => '任务处理超时(超过24小时)'
|
|
'error_message' => '任务处理超时(超过24小时)'
|
|
|
]);
|
|
]);
|