|
@@ -369,6 +369,7 @@ class AnimeController extends BaseController
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function createSegmentVideoTask(Request $request) {
|
|
public function createSegmentVideoTask(Request $request) {
|
|
|
|
|
+ $uid = Site::getUid();
|
|
|
// 忽略所有超时限制
|
|
// 忽略所有超时限制
|
|
|
set_time_limit(0);
|
|
set_time_limit(0);
|
|
|
ini_set('max_execution_time', '0');
|
|
ini_set('max_execution_time', '0');
|
|
@@ -393,7 +394,7 @@ class AnimeController extends BaseController
|
|
|
$taskId = $result['task_id'];
|
|
$taskId = $result['task_id'];
|
|
|
|
|
|
|
|
// 设置 SSE 响应头
|
|
// 设置 SSE 响应头
|
|
|
- return response()->stream(function () use ($taskId, $result) {
|
|
|
|
|
|
|
+ return response()->stream(function () use ($taskId, $result, $uid) {
|
|
|
// 设置 SSE 响应头
|
|
// 设置 SSE 响应头
|
|
|
echo "data: " . json_encode([
|
|
echo "data: " . json_encode([
|
|
|
'type' => 'init',
|
|
'type' => 'init',
|
|
@@ -460,12 +461,16 @@ class AnimeController extends BaseController
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$segmentId = $segment->segment_id;
|
|
$segmentId = $segment->segment_id;
|
|
|
|
|
+ $anime_id = $segment->anime_id;
|
|
|
|
|
+ $episode_number = $segment->episode_number;
|
|
|
|
|
+ $tail_frame = $segment->tail_frame;
|
|
|
|
|
|
|
|
// 更新分镜表
|
|
// 更新分镜表
|
|
|
$segmentUpdateData = [
|
|
$segmentUpdateData = [
|
|
|
'video_url' => $statusResult['result_url'],
|
|
'video_url' => $statusResult['result_url'],
|
|
|
'video_task_status' => '已完成',
|
|
'video_task_status' => '已完成',
|
|
|
'last_frame_url' => $statusResult['last_frame_url'] ?? '',
|
|
'last_frame_url' => $statusResult['last_frame_url'] ?? '',
|
|
|
|
|
+ 'current_type' => 2,
|
|
|
'updated_at' => $now
|
|
'updated_at' => $now
|
|
|
];
|
|
];
|
|
|
|
|
|
|
@@ -483,6 +488,35 @@ class AnimeController extends BaseController
|
|
|
if (!$updateResult) {
|
|
if (!$updateResult) {
|
|
|
Utils::throwError('20003:更新分镜表失败');
|
|
Utils::throwError('20003:更新分镜表失败');
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 更新分镜视频成功后新增对话记录
|
|
|
|
|
+ // 保存对话记录
|
|
|
|
|
+ $records = [
|
|
|
|
|
+ [
|
|
|
|
|
+ 'uid' => $uid,
|
|
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
|
|
+ 'sequence' => $episode_number,
|
|
|
|
|
+ 'role' => 'user',
|
|
|
|
|
+ 'content' => '图片转视频',
|
|
|
|
|
+ 'segment_id' => $segmentId,
|
|
|
|
|
+ 'video_url' => '',
|
|
|
|
|
+ 'created_at' => $now,
|
|
|
|
|
+ 'updated_at' => $now
|
|
|
|
|
+ ],
|
|
|
|
|
+ [
|
|
|
|
|
+ 'uid' => $uid,
|
|
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
|
|
+ 'sequence' => $episode_number,
|
|
|
|
|
+ 'role' => 'assistant',
|
|
|
|
|
+ 'content' => $tail_frame,
|
|
|
|
|
+ 'segment_id' => $segmentId,
|
|
|
|
|
+ 'video_url' => $statusResult['result_url'],
|
|
|
|
|
+ 'created_at' => $now,
|
|
|
|
|
+ 'updated_at' => $now
|
|
|
|
|
+ ]
|
|
|
|
|
+ ];
|
|
|
|
|
+
|
|
|
|
|
+ DB::table('mp_anime_records')->insert($records);
|
|
|
|
|
|
|
|
DB::commit();
|
|
DB::commit();
|
|
|
|
|
|
|
@@ -668,7 +702,7 @@ class AnimeController extends BaseController
|
|
|
'video_duration' => $videoDuration,
|
|
'video_duration' => $videoDuration,
|
|
|
'video_resolution' => '720P',
|
|
'video_resolution' => '720P',
|
|
|
'seed' => -1,
|
|
'seed' => -1,
|
|
|
- 'ratio' => '16:9',
|
|
|
|
|
|
|
+ 'ratio' => '9:16',
|
|
|
'generate_audio' => false,
|
|
'generate_audio' => false,
|
|
|
'draft' => false,
|
|
'draft' => false,
|
|
|
'watermark' => false,
|
|
'watermark' => false,
|
|
@@ -773,6 +807,7 @@ class AnimeController extends BaseController
|
|
|
'segment_id' => $segment->segment_id,
|
|
'segment_id' => $segment->segment_id,
|
|
|
'task_id' => $task->id,
|
|
'task_id' => $task->id,
|
|
|
'segment_number' => $segment->segment_number,
|
|
'segment_number' => $segment->segment_number,
|
|
|
|
|
+ 'tail_frame' => $segment->tail_frame,
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
@@ -803,8 +838,9 @@ class AnimeController extends BaseController
|
|
|
$startTime = time();
|
|
$startTime = time();
|
|
|
$maxDuration = 1800; // 30分钟超时
|
|
$maxDuration = 1800; // 30分钟超时
|
|
|
|
|
|
|
|
|
|
+ $uid = Site::getUid();
|
|
|
// 设置 SSE 响应头并开始长连接
|
|
// 设置 SSE 响应头并开始长连接
|
|
|
- return response()->stream(function () use ($taskIds, $segmentTasks, $animeId, $episodeNumber, $episodeId, $startTime, $maxDuration) {
|
|
|
|
|
|
|
+ return response()->stream(function () use ($taskIds, $segmentTasks, $animeId, $episodeNumber, $episodeId, $startTime, $maxDuration, $uid) {
|
|
|
// 发送初始任务创建信息
|
|
// 发送初始任务创建信息
|
|
|
echo "data: " . json_encode([
|
|
echo "data: " . json_encode([
|
|
|
'type' => 'init',
|
|
'type' => 'init',
|
|
@@ -835,6 +871,7 @@ class AnimeController extends BaseController
|
|
|
foreach ($segmentTasks as $segmentTask) {
|
|
foreach ($segmentTasks as $segmentTask) {
|
|
|
$taskId = $segmentTask['task_id'];
|
|
$taskId = $segmentTask['task_id'];
|
|
|
$segmentId = $segmentTask['segment_id'];
|
|
$segmentId = $segmentTask['segment_id'];
|
|
|
|
|
+ $tail_frame = $segmentTasks['tail_frame'];
|
|
|
|
|
|
|
|
// 跳过已完成或失败的任务
|
|
// 跳过已完成或失败的任务
|
|
|
if (in_array($taskId, $completedTasks) || in_array($taskId, $failedTasks)) {
|
|
if (in_array($taskId, $completedTasks) || in_array($taskId, $failedTasks)) {
|
|
@@ -883,6 +920,7 @@ class AnimeController extends BaseController
|
|
|
'video_url' => $statusResult['result_url'],
|
|
'video_url' => $statusResult['result_url'],
|
|
|
'video_task_status' => '已完成',
|
|
'video_task_status' => '已完成',
|
|
|
'last_frame_url' => $statusResult['last_frame_url'] ?? '',
|
|
'last_frame_url' => $statusResult['last_frame_url'] ?? '',
|
|
|
|
|
+ 'current_type' => 2,
|
|
|
'updated_at' => $now
|
|
'updated_at' => $now
|
|
|
];
|
|
];
|
|
|
|
|
|
|
@@ -900,6 +938,35 @@ class AnimeController extends BaseController
|
|
|
if (!$updateResult) {
|
|
if (!$updateResult) {
|
|
|
Utils::throwError('20003:更新分镜表失败');
|
|
Utils::throwError('20003:更新分镜表失败');
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 更新分镜视频成功后新增对话记录
|
|
|
|
|
+ // 保存对话记录
|
|
|
|
|
+ $records = [
|
|
|
|
|
+ [
|
|
|
|
|
+ 'uid' => $uid,
|
|
|
|
|
+ 'anime_id' => $animeId,
|
|
|
|
|
+ 'sequence' => $episodeNumber,
|
|
|
|
|
+ 'role' => 'user',
|
|
|
|
|
+ 'content' => '图片转视频',
|
|
|
|
|
+ 'segment_id' => $segmentId,
|
|
|
|
|
+ 'video_url' => '',
|
|
|
|
|
+ 'created_at' => $now,
|
|
|
|
|
+ 'updated_at' => $now
|
|
|
|
|
+ ],
|
|
|
|
|
+ [
|
|
|
|
|
+ 'uid' => $uid,
|
|
|
|
|
+ 'anime_id' => $animeId,
|
|
|
|
|
+ 'sequence' => $episodeNumber,
|
|
|
|
|
+ 'role' => 'assistant',
|
|
|
|
|
+ 'content' => $tail_frame,
|
|
|
|
|
+ 'segment_id' => $segmentId,
|
|
|
|
|
+ 'video_url' => $statusResult['result_url'],
|
|
|
|
|
+ 'created_at' => $now,
|
|
|
|
|
+ 'updated_at' => $now
|
|
|
|
|
+ ]
|
|
|
|
|
+ ];
|
|
|
|
|
+
|
|
|
|
|
+ DB::table('mp_anime_records')->insert($records);
|
|
|
|
|
|
|
|
DB::commit();
|
|
DB::commit();
|
|
|
|
|
|