حالة المعالجة
تابع الفيديو من الانتظار حتى الجاهزية بالاستعلام عنه، وتعامل مع فشل المعالجة.
بعد الرفع أو الاستيراد تعالج أوكتا فيديو الفيديو في الخلفية، وتتابع أنت المعالجة بقراءة الفيديو حتى تصبح حالته ready أو failed.
اقرأ الحالة
GET https://api.octavideo.tech/api/v1/videos/{videoId}
AccessKey: ovk_your_private_keyتخبرك ثلاثة حقول في الفيديو بمرحلة المعالجة:
الحقل
النوع
{
"data": {
"id": "6f1c2b9e-4a7d-4f3e-9b8a-2d5c7e1f0a34",
"library_id": "0b8e5d3a-1c2f-4e6a-8b7d-9f0a1b2c3d4e",
"title": "Lesson 1: Introduction",
"description": "",
"encoding_status": "processing",
"progress": 42,
"stage": "transcode",
"duration_seconds": 754.2,
"size_bytes": 412337152,
"chapters": [],
"created_at": "2026-10-25T09:30:00Z"
}
}دورة الحالة
| الحالة | المعنى |
|---|---|
queued | ينتظر الفيديو دوره في المعالجة. |
processing | تعمل أوكتا فيديو عليه، ويوضح stage وprogress إلى أين وصلت. |
ready | انتهت المعالجة. يمكنك طلب رمز تشغيل OTP. |
failed | توقفت المعالجة، ويوضح failure_reason السبب. |
يُرمَّز الفيديو بإعدادات الترميز التي كانت في المكتبة لحظة دخوله قائمة الانتظار. تغيير إعدادات الترميز لاحقًا لا يغيّر الفيديوهات التي اكتملت معالجتها.
مراحل المعالجة
أثناء حالة processing يمر الفيديو بهذه المراحل بالترتيب، ولكل مرحلة حصة ثابتة من progress:
| المرحلة | ما يحدث فيها | الحصة من التقدّم |
|---|---|---|
fetch | تقرأ أوكتا فيديو الملف المصدر، أو تنزّله في حالة الاستيراد. | 5% |
transcode | تُرمَّز كل نسخة، نسخة لكل برنامج ترميز ودقة. | 55% |
thumbnails | تُلتقط صورة الغلاف والصور المصغّرة. | 5% |
package | تُجهَّز النسخ للبث بصيغتَي HLS وDASH. | 10% |
encrypt | تُشفَّر تدفقات البث بالمفتاح الخاص بالفيديو. | 10% |
publish | تُنشر تدفقات البث للتوصيل. | 8% |
meter | تُسجَّل دقائق الترميز والتخزين للفوترة. | 5% |
finalize | يُعلَّم الفيديو جاهزًا. | 2% |
تستغرق مرحلة transcode معظم الوقت، ويطول وقتها كلما طال الفيديو أو زاد عدد النسخ.
استعلم حتى الجاهزية
لتعرف أن الفيديو أصبح جاهزًا استخدم إشعارات webhooks (الخيار الموصى به) أو استعلم عن الفيديو نفسه. تنتظر دالة Node.js هذه الفيديو وتزيد المهلة بين كل استعلام والذي يليه:
const API = 'https://api.octavideo.tech/api/v1';
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
export async function waitUntilReady(videoId) {
let delay = 10_000; // start at 10 s
for (;;) {
const res = await fetch(`${API}/videos/${videoId}`, {
headers: { AccessKey: process.env.OCTAVIDEO_KEY },
});
if (!res.ok) throw new Error(`OctaVideo ${res.status}`);
const { data: video } = await res.json();
if (video.encoding_status === 'ready') return video;
if (video.encoding_status === 'failed') {
throw new Error(`Processing failed: ${video.failure_reason}`);
}
console.log(`${video.encoding_status} ${video.progress}% ${video.stage ?? ''}`);
await sleep(delay);
delay = Math.min(delay * 1.5, 30_000); // back off to 30 s
}
}- استعلم كل 10 إلى 30 ثانية، وزِد المهلة ما دام الفيديو في الانتظار أو قيد الترميز.
- توقّف فور أن تصبح الحالة
readyأوfailed. - لمتابعة فيديوهات كثيرة، اعرضها عبر عرض الفيديوهات بدلًا من قراءة كل فيديو وحده. اقرأ الصفحات والحدود.
فضّل إشعارات webhooks
مع إشعارات webhooks تستدعي أوكتا فيديو خادمك بالحدث video.ready أو video.failed لحظة انتهاء المعالجة، فلا تحتاج إلى الاستعلام إطلاقًا.
عند فشل المعالجة
تعيد أوكتا فيديو محاولة المرحلة الفاشلة تلقائيًا حتى 5 مرات بمهلة متزايدة، قبل أن تعلّم الفيديو failed. عندها يحمل failure_reason أحد هذه الرموز:
failure_reason | المعنى | ما الحل |
|---|---|---|
invalid_media | الملف ليس فيديو تستطيع أوكتا فيديو قراءته. | تأكّد أن الملف يعمل على جهازك، وصدّره من جديد، ثم ارفع الملف الجديد. |
max_attempts_exceeded | فشلت المعالجة 5 مرات متتالية. | اختر إعادة الترميز للفيديو في لوحة التحكم، أو ارفع الملف من جديد. |
processing_error | أوقف خطأ غير متوقع المعالجة. | أعد المحاولة مرة واحدة. وإن فشلت مجددًا، راسل support@octavideo.tech مع معرّف الفيديو. |
تعامل مع أي قيمة أخرى كما تتعامل مع processing_error.
ما تنتجه المعالجة
الفيديو الجاهز (ready) يتضمن:
- تدفق بث HLS وآخر DASH بكل النسخ، مشفّرَين. يختار المشغّل المناسب منهما لكل جهاز.
- صورة غلاف ومجموعة من الصور المصغّرة. تعيد عرض الصور المصغّرة للفيديو روابطها بعد انتهاء مرحلة الصور المصغّرة.
- مدته في
duration_seconds.