This commit is contained in:
ct
2025-06-08 04:39:38 +08:00
parent 862a6bb19e
commit 8d6e86ebb3
40 changed files with 838 additions and 1601 deletions

View File

@@ -1,79 +0,0 @@
<?php
namespace App\Jobs;
use App\Helpers\FirstParty\MediaEngine\MediaEngine;
use App\Helpers\FirstParty\Render\FfmpegVideoRenderer;
use App\Helpers\FirstParty\Render\RenderConstants;
use App\Models\Video;
use Illuminate\Bus\Batchable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class RunVideoRenderPipelineJob implements ShouldQueue
{
use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $video_id;
public $timeout = 300;
/**
* Create a new job instance.
*/
public function __construct(int $video_id)
{
$this->onQueue('general_video');
$this->video_id = $video_id;
}
/**
* Execute the job.
*/
public function handle(): void
{
if ($this->batch()?->cancelled()) {
return;
}
$video = Video::with('video_elements', 'latest_render')->find($this->video_id);
if (! $video) {
return;
}
$video_render = $video->latest_render;
$video_render->status = RenderConstants::STATUS_RENDERING;
$video_render->processing_started_at = now();
$video_render->save();
$output = FfmpegVideoRenderer::render($video);
if ($output->success) {
$video_render->status = RenderConstants::STATUS_SUCCEEDED;
$saved_media = MediaEngine::addMedia(
MediaEngine::getCollectionKeyByOwnerMediaType('user', 'video'),
'video',
MediaEngine::USER_RENDERED,
MediaEngine::USER,
$output->name,
file_get_contents($output->path),
);
$video_render->completed_video_uuid = $saved_media->uuid;
$video_render->completed_video_full_url = MediaEngine::getMediaCloudUrl($saved_media);
$video_render->processing_finished_at = now();
$video_render->save();
} else {
$video_render->processing_finished_at = now();
$video_render->status = RenderConstants::STATUS_FAILED;
$video_render->save();
throw $output->exception;
}
}
}

View File

@@ -1,78 +0,0 @@
<?php
namespace App\Jobs;
use App\Helpers\FirstParty\MediaEngine\MediaEngine;
use App\Models\Media;
use App\Models\Video;
use Illuminate\Bus\Batchable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SaveVideoElementsBatchJob implements ShouldQueue
{
use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $video_id;
public $timeout = 300;
/**
* Create a new job instance.
*/
public function __construct(int $video_id)
{
$this->onQueue('general_video');
$this->video_id = $video_id;
}
/**
* Execute the job.
*/
public function handle(): void
{
if ($this->batch()?->cancelled()) {
return;
}
$video = Video::with('video_elements')->find($this->video_id);
if (! $video) {
return;
}
foreach ($video->video_elements as $video_element) {
if (! is_empty($video_element->asset_uuid)) {
continue;
}
// dump($video_element);
// Media Details: Filename, extension and mimetype
$media_details = MediaEngine::getFileDetailsbyUrl($video_element->original_asset_url);
// Media Content: Blob
$media_content = file_get_contents($video_element->original_asset_url);
// Media Filename: generate a new filename
$media_filename = $video_element->type.'_'.epoch_now_timestamp().'.'.$media_details->extension;
$saved_media = MediaEngine::addMedia(
MediaEngine::getCollectionKeyByOwnerMediaType('user', $video_element->type),
$video_element->type,
MediaEngine::USER_UPLOADED,
MediaEngine::USER,
$media_filename,
$media_content,
);
$video_element->asset_uuid = $saved_media->uuid;
$video_element->asset_url = MediaEngine::getMediaCloudUrl($saved_media);
$video_element->save();
}
}
}