ساختار کلی سرویس VOD ابر آروان و مراحل انجام کار در آن در شکل زیر آمده است.
برای استفاده از سرویس VOD ابر آروان دو روش وجود دارد:
- استفاده از پنل کاربری ابر آروان برای کاربران عادی
- استفاده از API برای برنامهنویسان و توسعهدهندگان
معماری APIهای سرویس ویدیو ابر آروان REST است که شامل چند گروه بهشکل زیر است:
- کانال (Channel)
- فایلهای موقت (File)
- پروفایل (Profile)
- گزارشها (Analytics)
- زیرنویس (Subtitle)
- دامنه (Domain)
- ویدیو (Video)
- واترمارک (Watermark)
طبق شکلی که در ابتدای مطلب دیدیم، برای استفاده از API هر قسمت باید یک پیشنیاز رعایت شده باشد، برای نمونه نخستین مرحله ساخت دامنه است که در نخستین ورود به پنل ساخته میشود و پس از آن امکان استفاده از APIهای Analytics – Channel وجود دارد.
- برای استفاده از APIهای Watermark – Profile – File – Video در ابتدا باید یک کانال ساخته باشید.
- برای استفاده از APIهای Subtitle در ابتدا باید یک ویدیو ساخته باشید.
شیوهی استفاده از تمامی APIها واضح است و فقط APIهای مربوط به File توضیح داده میشوند.
API Key
نخستین مرحله برای استفاده از API، احراز هویت به سامانه است. برای این کار لازم است API Key خود را بهمنظور هویتسنجی در قسمت «Authorize» وارد کنید. چنانچه اطلاعی از API Key خود ندارید، میتوانید به صفحهی چگونه API Key یا کلید دسترسی برنامهنویسی بسازید؟ بروید.
پس از ایجاد API Key و برای تست API ویدیو ابر آروان، میتوانید از ابزارهای Postman یا Insomnia استفاده کنید. به این منظور و بعد از دریافت یکی از این دو ابزار، ابتدا باید فایل postman-collection را در یکی از این دو برنامهی نصب شده Import و سپس API Key دریافتی از پنل کاربری ابر آروان را در قسمت Edit Collection، بخش Variables وارد کنید.
برای در دسترس قرار گرفتن سرویس میزبانی ویدیو، نخست باید Subdomain انتخابی با استفاده از درخواست Post ایجاد شود. برای اینکار از دستور زیر استفاده کنید.
POST /domain Parameters Subdomain required
نکتهی مهم آن است که این درخواست، فقط یک بار قابل اجرا است و امکان تغییر دامنهی انتخابی وجود ندارد.
فایل (File)
سرویس VOD آروان برای آپلود فایل از پروتکل Tus استفاده میکند که قابلیتهایی مانند Resume را برای آپلود فایلها فراهم میکند. راحتترین روش استفاده از این پروتکل و پیشنهاد آروان استفاده از کتابخانههای آماده Tus است که برای زبانهای مختلف و بهشکل اوپن سورس ارایه میشود.
اما اگر قصد استفاده از کتابخانههای آماده را ندارید و میخواهید این قسمت را خودتان انجام دهید (آروان این کار را پیشنهاد نمیکند و مسوولیتی در قبال درست بودن پیادهسازی با این شیوه نخواهد داشت)، در این حالت باید تسلط کامل بر پروتکل Tus داشته باشید. در اینجا برای نمونه توضیح کوتاه و مختصری از شیوهی آپلود یک فایل داده میشود.
- Post
برای آغاز آپلود باید متد Post را صدا بزنید و سه مورد را در Header آن ارسال کنید.
-
- tus-resumable: ورژن tus که اکنون میتوانید از نسخهی 1.0.0 استفاده کنید.
- upload-length: سایز فایل ارسالی برمبنای Byte.
- upload-metadata: این قسمت شامل ترکیبی از filename وfiletype است که برای شیوهی تولید آن میتوانید به این لینک بروید. برای نمونه metadata ویدیویی به نام test.mp4 بهشکل زیر است:
Base64(test.mp4) ⇒ dGVzdC5tcDQ= Base64(video/mp4) ⇒ dmlkZW8vbXA0 metadata ⇒ filename dGVzdC5tcDQ=,filetype dmlkZW8vbXA0
با موفقیتآمیز بودن این مرحله، کد ۲۰۱ برگردانده میشود و Location فایل ایجاد شده در Response Header برگردانده میشود که برای مراحل بعدی استفاده می شود و فایل به این آدرس ارسال می شود.
- Patch
در این مرحله قسمتی از فایل که مورد نظرتان هست را در Payload و دو مورد زیر را در Header قرار میدهید و به آدرسی (Location) که در مرحله قبل بدست آوردید ارسال می کنید.
-
- tus-resumable: ورژن tus که اکنون میتوانید از نسخهی 1.0.0 استفاده کنید.
- upload-offset: در نخستین ریکویست مقدار آن صفر است اما در ریکویستهای بعدی میزان Byte ارسال شده به سرور تا این لحظه است.
با موفقیتآمیز بودن این ریکویست کد ۲۰۴ و مقدار Upload-Offset که در واقع طول Payload ارسالی به سرور برمبنای بایت است در Response Header برگردانده میشود که برای ریکویستهای بعدی لازم است.
هر زمان که مقدار Upload-Offset که در Response Header برگردانده میشود با مقدار upload-length برابر شد، میتوانیم متوجه شویم که تمام فایل به سرور ارسال شده است.
راحتترین راه (نه بهترین) استفاده از این قسمت ارسال فایل بهشکل یکجاست، یعنی در نخستین ریکویست ارسالی تمامی فایل را در Payload قرار داده و ارسال کنیم، در فایلهایی با سایز بالا ممکن است بهدلیل موقعیتهایی مانند قطع و وصل شدن اینترنت، ناپایدار بودن اینترنت و مواردی از این دست، فایل بهدرستی ارسال نشود و نیاز به انجام دوبارهی این مرحله باشد.
نمونه درخواستهای API
مشاهده دامنه
برای مشاهدهی دامنهی اختصاص یافته، کافی است از متد زیر استفاده کنید.
GET /domain
مدیریت کانالها
برای آپلود فایلهای صوتی و تصویری در سرورهای میزبانی ویدیوی ابر آروان، نخست نیاز است که دست کم یک کانال ایجاد شود. کلیهی فایلهایی که در پلتفرم ویدیوی ابر آروان مورد استفاده قرار میگیرند، مانند فایلهای ویدیو، فایلهای صوتی، واترمارک و پروفایل، درون یک کانال قرار میگیرند.
ساخت کانال
با استفاده از دستور زیر میتوانید از طریق API ابر آروان یک کانال ایجاد کنید.
POST /channels Parameters Title (string) required Description (string) Secure_link_enabled (boolean) Secure_link_enabled (string) required if “secure_link_enabled” is true
مشاهده تمام کانالها
از طریق API سرویس میزبانی ویدیو ابر آروان، میتوانید لیست کانالهای موجود روی حساب کاربری خود را مشاهده کنید. به این منظور، میتوانید از متد زیر استفاده کنید.
GET /channels
آپدیت کانال
برای آپدیت یک کانال مانند ساخت آن، باید قسمت Body فرستاده شود و همچنین باید در URL، مقدار Channel ID نیز عنوان شود.
PATCH /channels/{channel_id}
مشاهده یک کانال خاص
برای مشاهدهی اطلاعات مربوط به یک کانال خاص، میتوان از این Route استفاده کرد.
GET /channels/{channel_id}
حذف کانال
متد زیر به شما امکان حذف کامل یک کانال را میدهد.
DELETE /channels/{channel_id}
باید توجه داشت که بعد از حذف یک کانال، تمامی فایلهای قرار گرفته روی آن، شامل تمام فایلهای صوتی، تصویری، واترمارکها و پروفایلهای ساخته شده حذف میشوند.
آپلود فایل
اصلیترین مفهوم که پیش از آغاز فایل باید از آن مطلع باشید، پروتکل TUS است. این پروتکل متنباز به شما امکان آپلود بهشکل Resumable را میدهد. پیش از شروع ارسال فایل به سرور، نخست باید بر اساس حجم فایل که از قسمت مشاهدهی اطلاعات فایل در دسترس است، یک فضای خالی ایجاد شود. فرض کنید یک فایل mp4 با نام video.mp4 با حجم 6.8 MB (یا 6777592 بایت) وجود دارد، ابتدا از قسمت Properties حجم فایل کپی میشود.
POST /channels/{channel_id}/files Headers tus-resumable: 1.0.0 upload_length: 6777592 upload-metadata: filename dmlkZW8ubXA0,filetype dmlkZW8vbXA0
سپس ID فضای ایجاد شده از قسمت Response Header کپی و با استفاده از PATH Request، فایل به سمت سرور ارسال میشود (ID فایل و کانال در URL قرار میگیرند).
POST /channels/{channel_id}/videos Parameters Title (string) required Description (string) Video_url (should be a valid URL. Otherwise, this will be corrupted) File_id (should be string and it will be required whenever video_url is not available) required Convert_mode (could be auto or manual or profile) Profile_id (required if convert mode has set to profile) Parallel_convert (boolean) required Thumbnail_time (numeric) required Convert_info (must be an array and this will be required if convert mode has set to manual) [ { “audio_bitrate”: 0, “video_bitrate”: 0, “resolution”: “string”, } ] Watermark_id Watermark_area (should be one of: center, fix_top_left, fix_top_right, fix_top_center, fix_bottom_left, fix_bottom_right, fix_bottom_center, animate_left_to_right, animate_top_to_bottom)
اگر فایل صوتی یا تصویری با URL در دسترس است، بدون در نظر گرفتن مراحل قبل، میتوان URL فایل را بهشکل مستقیم در video_url / audio_url وارد کرد. همچنین، اگر مقادیر Bitrate و Resolution ثابت است، بهتر است از پروفایل استفاده شود تا هنگام تبدیل فایل، تنها به Profile_id نیاز باشد.
برای قرار دادن یک تصویر روی ویدیو، نخست باید Watermark ایجاد و ID آن هنگام ارسال فایل وارد شود. برای تبدیل همزمان فایلها، باید مقدار parallel_convert را true ارسال کرد. در حالت معمول تمامی فایلها Queue میشوند، در صف تبدیل قرار میگیرند و تکتک تبدیل میشوند. با انتخاب parallel_convert تا تعداد ۳ فایل را میتوان بهشکل همزمان تبدیل کرد و باید توجه داشت که بابت تبدیل همزمان هر فایل هزینهای برای کاربر لحاظ خواهد شد.
وضعیت تبدیل
بعد از ارسال فایل برای تبدیل، برای در دسترس قرار گرفتن فایل باید گامهایی پیموده شوند. نخست، برای مشخص شدن وضعیت فایل باید از GET Request استفاده کرد. مقدار Status در Response نمایانگر وضعیت فعلی است.
GET/videos/{video_id}
تمامی ویدیوهای یک کانال را میتوان با Route زیر مشاهده کرد.
GET/channels/{channel_id}/videos
همچنین، عنوان و توضیحات را میتوان با Route زیر آپدیت کرد.
PATCH/videos/{video_id} Parameters Title (string) required Description (string)
زیرنویسها
برای یک ویدیو میتوان چندین زیرنویس آپلود کرد. اضافه کردن زیرنویس باید با درخواست POST انجام شود. در حال حاضر تنها فرمتهای SRT و VTT برای فایل زیرنویس معتبر هستند.
POST /videos/{video_id}/subtitles Parameters subtitle (file) required lang (string) required
مشاهده تمام زیرنویسهای یک ویدیو
GET/videos/{video_id}/subtitles
مشاهده زیرنویس یک ویدیوی خاص
GET/subtitles/{subtitles_id}
حذف زیرنویس
DELETE/subtitles/{subtitle_id}
اضافه کردن واترمارک
تصاویر مختلفی میتوانند در هر کانال بهشکل جداگانه ذخیره شوند که در زمان تبدیل فایل ویدیویی، بهعنوان واترمارک روی آنها قرار بگیرند. برای انتخاب واترمارک، کافی است ID تصویر موردنظر را انتخاب کرد.
POST /channels/{channel_id}/watermarks Parameters title (string) required description (string) watermark (file) required
بهروزرسانی واترمارک
به کمک ID هر واترمارک، میتوان آن را بهراحتی بهروزرسانی کرد.
POST / watermarks /{ watermark _id} Parameters title (string) required description (string)
مشاهده همه واترمارکهای یک کانال
GET/channels/{channel_id}/watermarks
مشاهده یک واترمارک
GET/watermarks/{watermark_id}
حذف زیرنویس
DELETE/watermarks/{watermark_id}
مدیریت پروفایلها
برای آنکه در هربار تبدیل ویدیو یا فایل صوتی نیاز به وارد کردن تنظیمات تبدیل فایل بهشکل دستی نباشد، میتوان یک پروفایل ساخت تا با انتخاب آن، تبدیل فایل با توجه به تنظیمات پروفایل انجام شود. هر کانال میتواند چندین پروفایل داشته باشد.
POST /channels/{channel_id}/profiles Parameters Title (string) required Description (string) convert_mode ("auto", “manual”) required thumbnail_time (number) watermark_id (string) Watermark_area (should be one of: center, fix_top_left, fix_top_right, fix_top_center, fix_bottom_left, fix_bottom_right, fix_bottom_center, animate_left_to_right, animate_top_to_bottom) Convert_info (must be an array and this will be required if convert mode has set to manual) [ { “audio_bitrate”: 0, “video_bitrate”: 0, “resolution”: “string”, } ]
آپدیت پروفایل
PATCH /profiles/{profile_id} Parameters Title (string) required Description (string) convert_mode ("auto", “manual”) required thumbnail_time (number) watermark_id (string) Watermark_area (should be one of: center, fix_top_left, fix_top_right, fix_top_center, fix_bottom_left, fix_bottom_right, fix_bottom_center, animate_left_to_right, animate_top_to_bottom) Convert_info (must be an array and this will be required if convert mode has set to manual) [ { “audio_bitrate”: 0, “video_bitrate”: 0, “resolution”: “string”, } ]
مشاهده تمام پروفایلهای یک کانال
GET/channels/{channel_id}/profiles
مشاهده یک پروفایل
GET/profiles/{profile_id}
حذف پروفایل
DELETE/profiles/{profile_id}