
توسط کریس السورث، کازمین استژران، حسن تمار
- ما روش فعالسازی Dolby Vision و محیطدیداری اطراف (amve) را در برنامه اینستاگرام برای iOS به اشتراک میگذاریم تا تجربهٔ مشاهدهٔ ویدیو را بهبود بخشیم.
- ویدیوهای HDR تولیدشده توسط آیفونها شامل متادیتای منحصر بهفرد Dolby Vision و amve هستند که ما باید از ابتدا تا انتها از آنها پشتیبانی میکردیم.
- اینستاگرام برای iOS هماکنون اولین برنامهٔ متاست که از ویدیوهای Dolby Vision پشتیبانی میکند؛ در آینده پشتیبانی بیشتری برای تمام برنامههای متا ارائه خواهد شد.
هر کدگذاری HDR تولیدشده توسط آیفون شامل دو قطعه متادیتای اضافی است که به حفظ ثبات تصویر بین نمایشگرهای مختلف و شرایط تماشا کمک میکند:
- محیطدیداری اطراف (amve) که ویژگیهای محیط مشاهدهای اسمی را برای نمایش محتویات ویدئویی مرتبط فراهم میکند. این اطلاعات به دستگاه نهایی امکان میدهد در صورتی که شرایط واقعی محیط مشاهده با شرایطی که برای کدگذاری در نظر گرفته شده متفاوت باشد، رندر ویدئو را تنظیم کند.
- Dolby Vision که رنگ، روشنایی و کنتراست را بهبود میبخشد تا تصویر بهتر با تواناییهای نمایشگر منطبق شود.
در حالی که برنامههای اینستاگرام و فیسبوک برای iOS از سال ۲۰۲۲ از ویدیوهای بازهٔ دینامیکی بالا (HDR) پشتیبانی میکردند، انتشار اولیهٔ HDR ما از Dolby Vision یا تحویل و پخش amve پشتیبانی نمیکرد. تبدیلهای ما با FFmpeg انجام میشد که بهطور سنتی از Dolby Vision و amve پشتیبانی نمیکرد. بهدلیل اینکه ابزار ما این متادیتا را نادیده میگرفت، تصویرها کاملاً مطابق با نحوهٔ نمایش مورد انتظار نبودند – مسائلی که بهویژه در سطوح روشنایی پایین صفحه محسوستر بود.
اکنون، پس از دریافت بازخورد از کاربران برنامههای iOS ما، با همکارانمان همکاری کردهایم تا متادیتای amve و Dolby Vision تولید شده توسط iOS را از ابتدا تا انتها حفظ کنیم و تجربهٔ مشاهدهٔ HDR بر روی دستگاههای iOS را بهطور چشمگیری ارتقا دهیم.
نحوهٔ پردازش ویدیو در متا
ممکن است ابتدا ارائهٔ پیشزمینهای دربارهٔ چرخهٔ حیات یک ویدیو در متا مفید باشد.
اکثریت ویدیوهای بارگذاریشده از طریق برنامههای ما از سه مرحلهٔ اصلی عبور میکنند:
۱. پردازش سمت کاربر
در مرحلهٔ پردازش سمت کاربر، دستگاه سازنده ترکیب خود را به یک فایل ویدئویی واحد با سایزی مناسب برای بارگذاری تبدیل میکند. برای ویدیوهای HDR تولیدشده توسط دستگاههای iOS این به معنای رمزگذاری با HEVC با پروفایل Main 10 است. در این مرحله متادیتاهای amve و Dolby Vision تولید میشوند، به جریان بیتاستریم اضافه میگردند و به سرورهای متا آپلود میشوند.
پردازش سرور
در مرحلهٔ پردازش سرور، سیستم تبدیل ما نسخههای مختلفی از ویدیو را برای کاربران متفاوت تولید میکند. از آنجایی که پخش بر روی مجموعهای از دستگاهها با قابلیتهای متفاوت انجام میشود، نیاز داریم ویدیو را در قالبی بهینه برای هر دستگاه فراهم کنیم. در زمینهٔ بارگذاریهای HDR، این به معنای تولید نسخهٔ SDR برای دستگاههایی است که از HDR پشتیبانی نمیکنند، یک نسخهٔ VP9 برای برآوردهکردن اکثر پلیرها، و (برای ویدیوهای پرطرفدار) یک نسخهٔ AV1 با بالاترین کیفیت و کمترین حجم فایل است.
هر یک از این نسخهها با یک بیتریت متفاوت (در اصل، حجم فایل) تولید میشود تا اطمینان حاصل شود که کاربران با شرایط مختلف شبکه میتوانند بدون انتظار برای تکمیل دانلود بزرگ، ویدیو را پخش کنند (معایب این کار این است که بیتریتهای پایینتر کیفیت کمتری دارند).
تمامی تبدیلهای مشتقشدهٔ ما با FFmpeg ساخته میشوند، که بهطور تاریخی از پشتیبانی amve و Dolby Vision برخوردار نبود. این همان مرحلهای بود که در آن متادیتاها حذف میشدند.
۳. مصرف
در مرحلهٔ مصرف، دستگاه بیننده نسخهای را که بهصورت روان (بدون لگ) پخش میشود، انتخاب میکند، آن را فریم به فریم رمزگشایی مینماید و هر فریم را بر روی صفحه نمایش میکشد. در زمینهٔ iOS، تمام پخشهای HDR با استفاده از AVSampleBufferDisplayLayer (AVSBDL) اپل انجام میشود. این کلاس متادیتاهای amve و Dolby Vision را همراه با هر فریم رمزگشایی شده مصرف میکند.
چگونه پشتیبانی از amve را اضافه کردیم
زمانی که برای اولینبار در سال ۲۰۲۲ قصد پشتیبانی از amve را داشتیم، نکتهای جالب مشاهده کردیم. چون بر پایهٔ معماری جداسازیشده از اجزای سطحپایین کار میکنیم نه یک پیکربندی معمولی AVPlayer، توانستیم کدگذاری ویدئوی کامل را بررسی کرده و متادیتای amve را بین رمزگشا و AVSBDL ببینیم. مشاهده کردیم که هر فریم از هر ویدیو دقیقا همان متادیتا را دارد. این به ما اجازه داد تا با یک راهحل سریع، این مقادیر را بهصورت ثابت در خط لولهٔ پخشگر خود کدگذاری کنیم.
این وضعیت مناسب نبود. اگرچه به نظر میرسید مقادیر ثابت هستند، اما هیچ مکانیسمی برای تضمین اینموضوع وجود نداشت. شاید آیفون یا نسخهٔ جدید iOS مقادیر متفاوتی تولید کند و در این صورت ما از مقادیر نادرست استفاده میکردیم. علاوه بر این، amve مفهومی در اندروید نیست؛ بنابراین مشاهدهٔ یک کدگذاری HDR تولیدشده برای اندروید روی آیفون میتوانست تصویر نادرستی ایجاد کند.
در سال ۲۰۲۴، با جامعهٔ توسعهٔ نرمافزار همکاری کردیم تا پشتیبانی از amve را در FFmpeg فراهم کنیم. همچنین لاگبرداریای افزودیم که نشان داد ادعای دو سالهٔ ما مبنی بر عدم تغییر مقادیر همچنان صادق است. اما اگر روزی این مقادیر تغییر کنند، آمادگی کامل برای مقابله با آن را داریم.
فعالسازی Dolby Vision
ادغام Dolby Vision بهسادگی amve نبود.
چالش #۱: مشخصات موجود برای انتقال متادیتا درون یک جریان بیتاستریم HEVC بود. ما HEVC را ارائه نمیدهیم.
ویدیوهای HDR تولیدشده توسط آیفون از پروفایل Dolby Vision 8.4 استفاده میکنند؛ عدد 8 نشاندهندهٔ پروفایلی است که از HEVC (کدک ویدیو) بهره میبرد و .4 به این معناست که با HLG (استاندارد HDR برای پلیرهایی که از Dolby Vision پشتیبانی نمیکنند) سازگار است.
برای ارائهٔ متادیتای Dolby Vision، نیاز داشتیم تا آن را در قالب کدکی که ما ارسال میکنیم، حمل کنیم. خوشبختانه، Dolby پروفایل ۱۰ را برای انتقال Dolby Vision درون AV1 ایجاد کرده است. چون VP9 امکان حمل متادیتای اضافی را ارائه نمیدهد، در حال حاضر پشتیبانی از Dolby Vision وجود ندارد، اما قصد داریم مکانیزمهای تحویل جایگزین را بررسی کنیم.
اما پروفایلهای Dolby Vision ۱۰ و ۸ توسط ابزارهای پردازش ویدیو موجود ما، از جمله FFmpeg و Shaka packager، بهدرستی پشتیبانی نمیشدند. بر پایهٔ مشخصات Dolby، با توسعهدهندگان FFmpeg همکاری کردیم تا پشتیبانی کامل از Dolby Vision پروفایل ۸ و پروفایل ۱۰ را پیادهسازی کنیم. بهویژه، توانستیم در FFmpeg امکان تراشیدنی HEVC با پروفایل 8.4 به AV1 با پروفایل 10.4 را با استفاده از رمزگذارهای libaom و libsvtav1 فعال کنیم و اصلاحاتی در بخشهای دیگر زیرساخت، شامل رمزگشای dav1d و Shaka packager، اعمال کنیم تا متادیتای Dolby Vision بهدرستی پشتیبانی شود.
چالش #۲: انتقال Dolby Vision به AVSampleBufferDisplayLayer
زمانی که AVSBDL یک جریان بیتکد شدهٔ قالبپذیر (مثلاً HEVC از دوربین آیفون) دریافت میکند، Dolby Vision بهصورت خودکار کار میکند. اما ما بافرهایی را که بهصورت مستقل رمزگشایی میکنیم، تهیه میکنیم؛ زیرا نیاز داریم فرمتهایی را که اپل بهصورت پیشفرض ارائه نمیدهد (مانند AV1 در دستگاههای پیش از iPhone 15 Pro) رمزگشایی کنیم. با توجه به این روش، منطقی است که Dolby Vision را نیز بهصورت مستقل استخراج کنیم.
پس از مشخصات تازهای که Dolby برای حمل پروفایل 10 درون یک جریان بیتستریم AV1 منتشر کرده بود، استخراج دستی متادیتای Dolby Vision را پیادهسازی کردیم، آن را به همان قالبی که AVSBDL انتظار دارد بستهبندی کردیم و به کار خود ادامه دادیم.
برای اثبات کارکرد صحیح تنظیمات، یک سری پستهای یکسان اینستاگرام با و بدون متادیتای Dolby Vision راهاندازی کردیم. همکارانمان در Dolby روشنایی هر یک از این پستها را با استفاده از تحلیلگر رنگ نمایشگر، در سطوح مختلف روشنایی صفحه، اندازهگیری کردند.
آنها موارد زیر را بهدست آوردند:

در این نمودار، محور X نشاندهندهٔ تنظیم روشنایی صفحه و محور Y نمایانگر روشنایی مشاهدهشدهٔ تصویر است. نتایج نشان میدهد که با وجود متادیتای Dolby Vision، روشنایی محتوا بهطور قابلتوجهی نزدیکتر به تنظیم روشنایی صفحه میشود.
موفق شد! … اما کار ما تمام نشده بود.
آزمون پیادهسازی Dolby Vision
در متا، پیش از عرضهٔ ویژگیهای جدید، آنها را از طریق تست A/B ارزیابی میکنیم تا اطمینان حاصل کنیم عملکردشان همانگونه است که انتظار میرود. برای تست A/B متادیتای تعبیهشده در یک جریان بیتستریم ویدیو، ابتدا نسخهٔ دیگری از هر ویدیو که شامل این متادیتای جدید است تولید کردیم. این نسخهٔ جدید را بهصورت تصادفی به جمعیت تست اختصاص دادیم در حالی که جمعیت کنترل بهصورت تصادفی همان تجربهٔ قبلی را دریافت کرد. با مقیاس کارمان میتوانیم بگوییم که تقریباً تعداد مساوی کاربران هر دو نسخهٔ ویدیو را مشاهده میکنند.
برای هر نسخه، آماری نظیر مدت زمان تماشای ویدیو، زمان بارگذاری، نوع اتصال استفادهشده و وقوع خطاهای پخش را جمعآوری کردیم. سپس بهصورت کلی تجزیه و تحلیل کردیم تا ببینیم نسخهٔ حاوی متادیتا نسبت به نسخهٔ بدون متادیتا چه عملکردی داشته است.
فرض کردیم که اگر متادیتا مطابق انتظار عمل کند، ویدیوهای دارای متادیتای جدید زمان تماشای بیشتری دریافت میکنند. اما هنگام اجرای تست اولیه بر روی Instagram Reels در سال ۲۰۲۴ دریافتیم که بهطور متوسط، ویدیوهای دارای متادیتای Dolby Vision در واقع کمتر از نسخهٔ استانداردشان تماشا میشوند.
چگونه این امکانپذیر است؟ آیا Dolby Vision نباید تصویر را بهبود بخشد؟
آزمون اول A/B ما با متادیتای Dolby Vision
دادههای ما نشان داد که کاربران کمتر ویدیوهای Dolby Vision را تماشا میکردند، زیرا این ویدیوها زمان بارگذاری طولانیتری داشتند و کاربران بهسرعت به Reel بعدی در فید خود میرفتند.
دلیل معقولی برای زمان بارگذاری طولانیتری وجود داشت: متادیتای جدید بهطور متوسط حدود ۱۰۰ kbps به هر ویدیو افزود. اگرچه این مقدار ناچیز بهنظر میرسد، اما تبدیلهای ما بهصورت بسیار بهینه برای انواع مختلف شرایط تماشا تنظیم شدهاند. در برخی شرایط هر بیت مهم است و اضافهبار ۱۰۰ kbps کافی بود تا در حاشیه، تعامل کاربران را کاهش دهد.
پاسخ این مسئله، استفاده از فرمت فشردهٔ متادیتا بود. تیم Dolby یک مشخصات دیگر ارائه داد که بار متادیتا را بهطور متوسط بهیکچهارم، یعنی حدود ۲۵ kbps، کاهش میدهد.
آیا این کافی خواهد بود؟ برای فهمیدن این موضوع، لازم بود تست دیگری انجام دهیم. اما پیش از آن کارهای بیشتری نیز ضروری بود.
ما نیاز داشتیم تا پشتیبانی از فشردهسازی (و در همان زمان، بازگشایی) متادیتای Dolby Vision را در FFmpeg با استفاده از فیلتر بیتاستریم پیادهسازی کنیم. همچنین، در حالی که فرمت غیرفشرده را میتوانستیم از بیتاستریم استخراج کنیم و به Apple تحویل بدهیم، فرمت فشرده توسط Apple بهصورت پیشفرض پشتیبانی نمیشود؛ بنابراین مجبور شدیم بازگشایی سمت کلاینت را خودمان پیاده کنیم.
پس از حدود ۲۰۰۰ خط کد، آماده شدیم.
آزمون موفقیتآمیز ما
در این بار، دریافتیم که کاربران که با متادیتای Dolby Vision ویدیو میبینند، زمان بیشتری را در برنامه میگذارند. این را به این دلیل میدانیم که در محیطهای کمنور، وقتی صفحهنمایش به سطوح روشنایی پایین تنظیم میشود، ویدیوهای HDR با متادیتای مناسب فشار کمتری بر چشمها میگذارند و کاربران زمان بیشتری به تماشای آنها میگذارند.
از آنجا که افزودن متادیتای Dolby Vision نتایج ملموس مثبت داشت، توانستیم این ویژگی را برای ارائه در تمام اینستاگرام iOS مطرح کنیم و این برنامه اولین برنامهای شد که از Dolby Vision بهره میبرد. از ژوئن ۲۰۲۵، تمام کدگذاریهای AV1 تولیدشده از HDR تولیدشده توسط آیفون شامل متادیتای Dolby Vision هستند.
آیندهٔ Dolby Vision در متا
چالش نهایی که در این مقاله مطرح میشود این است که Dolby Vision بهطور گستردهای در اکوسیستم وب، مرورگرها و نمایشگرهای مختلف پشتیبانی نمیشود؛ بنابراین نمیتوانیم تفاوت آن را بهطور دقیق در این صفحه نشان دهیم و امیدواریم شما این تجربه را در اینستگرام روی آیفون خودتان ببینید. پشتیبانی از Dolby Vision و amve هماکنون در دستورهای کدگذاری ما قرار گرفته و بنابراین برای استقرار در سایر پلتفرمها آماده است؛ ما در حال کار بر روی گسترش این پشتیبانی به Instagram Reels نیز هستیم.
در همکاری با Dolby، مشکل قابلمشاهدهٔ حفظ متادیتای HDR را حل کردیم و با توسعهدهندگان FFmpeg همکاری کردیم تا پشتیبانی از آن را پیادهسازی کنیم و بهسرعت در اختیار جامعهٔ توسعهدهندگان قرار دهیم.
این تنها آغاز است. ما مشتاق به گسترش Dolby Vision به سایر برنامههای متا و سیستمعاملهای مربوطه هستیم.
تشکر و قدردانی
مایل هستیم از هائیکشیا شی، تیم Dolby و نیکلاس هاس از FFmpeg برای کارهایشان در حمایت از این پروژه تشکر کنیم.