سلام و احترام خدمت همه ی دوستان
من دارم از سرویس ویدیویی استفاده میکنم، طبق مستند سایت، برای آپلود ویدیو با استفاده از api، باید مراحل زیر رو به ترتیب طی کنیم: (قبلش api key گرفتیم و token رو ساختیم)
- ابتدا باید یه درخواست به همراه metadata ویدیوی مورد نظر ارسال کنیم تا سرور ابری یه جای خاص رو برای ویدیوی ما روی سرور در نظر بگیره. که در ازاش یه location توی response header بر میگردونه.
- با استفاده از fileId که توی قسمت location از response header قسمت قبل بود، یه درخواست patch میدیم که با استفاده از پروتکل tus فایل رو آپلود کنه.
- وقتی فایل آپلود شد، اصطلاحاً draft میشه، پس باید به endpoint زیر یه درخواست بدیم و file_id رو براش بفرستیم تا فایل draft شده رو به زیرمجموعه ی ویدیوهامون اضافه کنه:
{{baseUrl}}/channels/:channel/videos
تو این مرحله فایل ویدیویی ما میره توی صف download و convert. (اگه تا اینجا چیزی رو اشتباه گفتم بهم بگین)
خب تا اینجا همه چیز خوب بود.
اما مسئله اینجاست که من میخوام بلافاصله وقتی ویدیو آپلود شد، video_url ش رو بگیرم و استفاده کنم. مثلاً توی ckEditor وقتی ویدیوم رو آپلود کردم و مراحلی که بالا ذکر کردم طی شد، video_url ش رو بگیرم و بدم به src تگ video اچ تی ام ال 5.
مشکل چیه؟
اینه که توی سرور ابری، یه ویدیو از زمان آپلود شدن status های مختلفی به خودش میگیره، مثلاً اولش میشه: download_queue، بعد میشه downloading، بعد میشه convert_queue و … تا زمانی که میرسه به حالت complete.
و تا زمانی که complete نشده مقدار video_url براش ایجاد نشده (یعنی null هست).
و من باید از زمانی که ویدیو با موفقیت آپلود میشه، تا زمانی که status ش سمت سرور به حالت complete در بیاد، صبر کنم. و مدت زمانی هم که باید صبر کنم مشخص نیست. یه بار یک دقیقه هست، یه بار هشتاد ثانیه ست و … .
من دارم جایی رو اشتباه میکنم؟
و اینکه آیا ایده ای دارین که مشکل من رو حل بکنه؟
(من فعلاً تنها راه حلی که به ذهنم رسیده اینه که از زمان آپلود شدن ویدیو به روش polling یه سری interval بذارم و هر چند ثانیه یه بار وضعیت ویدیوم روی سرور ابری رو چک کنم و هر وقت که status به حالت complete در اومد کارم رو ادامه بدم، اما فکر میکنم این کار bad practice باشه)