
از اولین روزهای کار بر روی یک سیستم نظارت تصویری ابری، با مشکلی مواجه بودیم، بدون راه حلی که می توانستیم از Ivideon صرف نظر کنیم - این اورست ما بود، صعودی که انرژی زیادی می گرفت، اما اکنون بالاخره داریم یک تبر یخی را به بالای پازل چند پلت فرم چسباند.
سیستم انتقال صدا و تصویر از طریق اینترنت نباید به تجهیزات، کلاینت های وب و استانداردهایی که آنها پشتیبانی می کنند بستگی داشته باشد و همچنین در حضور مترجم آدرس شبکه و فایروال ها به درستی کار کند. یک کاربر نظارت تصویری ابری میخواهد به این سرویس دسترسی داشته باشد، حتی اگر از دوربینهای آنالوگ استفاده کند و ترجیح میدهد پخش ویدیوی زنده را در مدرنترین دستگاه تماشا کند.
بسیار مهم است که کاربر بخواهد ویدیوها را با حداقل تاخیر تماشا کند. تقریباً تنها راه برای نمایش ویدیو با تأخیر کم در مرورگر استفاده از WebRTC (ارتباطات بلادرنگ وب) است. WebRTC مجموعه ای از فناوری ها برای انتقال همتا به نظیر ویدئو و صدا در مرورگرها است که در ابتدا برای انتقال و پخش جریان های ویدئویی با تاخیر کم طراحی شده است. برای این منظور از جمله از پروتکل UDP استفاده می شود.
قبل از اینکه به شما بگوییم موتور جدید چه چیزی به کاربر میدهد، به شما یادآوری میکنیم که چرا و چرا از فناوریهای HLS پشتیبانی میکنیم و چرا تصمیم به ادامه کار گرفتهایم.
موتور HLS: مزایا و معایب

()
Технология HLS (HTTP Live Streaming) разработана в Apple, поэтому не удивительно, что впервые её поддержка появилась на устройствах именно этого бренда. На сегодняшний день видеоряд в формате HLS также умеют воспроизводить практически все телевизионные приставки и многие устройства, работающие на ОС Android.
موتور HLS از کدک ویدیویی معروف H264 در ترکیب با جریانهای صوتی AAC یا MP3 برای پخش دادههای ویدیویی استفاده میکند. کل جریان داده های صوتی و تصویری در یک ظرف حمل و نقل MPEG-TS بسته بندی می شود. برای انتقال از طریق پروتکل HTTP، اطلاعات موجود در جریان به قطعاتی تقسیم میشود که در لیستهای پخش m3u8 توضیح داده شده است. و تنها پس از آن این قطعات، همراه با لیست های پخش، از طریق HTTP منتقل می شوند. قطعه قطعه شدن به طور خودکار به معنای تاخیر در چند ثانیه است. این یکی از ویژگی های کانتینر MPEG-TS است.
موتور HLS همچنین از جریان های چند بیتی، Live/VOD پشتیبانی می کند.
مزایای اصلی HLS:
- پشتیبانی داخلی در تمام مرورگرهای اصلی؛
- سهولت اجرا (در مقایسه با WebRTC)؛
- سازماندهی انواع پخش ها برای مخاطبان زیادی بسیار راحت و کارآمد است زیرا می توان بخش ها را یک بار در یک CDN بارگذاری کرد.
با وجود سادگی موتور، همه چیز آنطور که به نظر می رسد صاف نیست. مشکل اصلی این است که توسعه دهندگان پخش کننده شخص ثالث از توصیه های اپل، به عنوان مثال از نظر فرمت های صوتی پشتیبانی شده، فاصله گرفته اند. به طور خاص، بسیاری از توسعه دهندگان شروع به اضافه کردن توانایی کار با جریان های صوتی محبوب کردند: ویدیوی mpeg2، صوتی mpeg2، و غیره. در نتیجه، آنها مجبور به ایجاد فرمت های مختلف لیست پخش برای پخش کننده های مختلف شدند.
اما یکی از بزرگترین مشکلات موتور HLS تاخیر زیاد در انتقال اطلاعات است.
منشأ "ترمز"
دلیل اصلی تاخیر بالای HLS در این واقعیت نهفته است که برنامه نویسان موتور را برای به دست آوردن تصاویر با بالاترین کیفیت ایجاد کردند. بنابراین، پارامترهای فاصله فریم استفاده شده و اندازه بافر پخش برای پخش زنده ویدیویی مناسب نیستند. به همین دلیل، تأخیر نسبتاً بالایی در انتقال فیلم وجود دارد که می تواند 5-7 ثانیه باشد.
از یک طرف، برای مثال، برای کسانی که یک فیلم را از یک سرور میزبان ویدیو تماشا می کنند، این مقدار زیادی نیست. اما برای سیستم های نظارت تصویری، تاخیر در ارسال فیلم می تواند بسیار مهم باشد.
اگر در حال تماشای دفتری هستید که در آن کارمندان هر ساعت یک بار از روی مانیتور خود نگاه می کنند، پس 5 ثانیه تاخیر اصلا مهم نیست. اما مردم شروع به شکایت کردند که مثلاً هنگام پخش یک مسابقه فوتبال ، قبلاً در چت GOOOOL نوشتند ، اما این هنوز در ویدیو نیست :). ما در حال حاضر تعدادی از موارد کاربری داریم که Ivideon باید عملاً جایگزین Skype شود.
آیا می توان تاخیر در HLS را شکست داد؟ پاسخ به این سوال شبیه سخنرانی یک نابودگر باتجربه موش در یک سخنرانی برای متخصصان مبتدی کنترل آفات است: "موش ها را نمی توان نابود کرد، اما می توان تعداد آنها را به حداقل معقول کاهش داد." با تاخیر در HLS، نمی توان آن را به صفر رساند، اما راه حل هایی در بازار وجود دارد که می تواند تاخیر را به میزان قابل توجهی کاهش دهد.
برش های ریز
یکی دیگر از معایب موتور استفاده از فایل های کوچک برای انتقال اطلاعات است. به نظر می رسد که این چه اشکالی دارد؟
هر کسی که سعی کرده است تعداد زیادی فایل کوچک را از یک رسانه به رسانه دیگر کپی کند، احتمالاً متوجه شده است که سرعت نوشتن چنین مجموعه ای بسیار کمتر از یک فایل بزرگ با همان اندازه است. و شدت دسترسی به هارد دیسک به طور قابل توجهی افزایش می یابد که به طور کلی بر عملکرد کل رایانه تأثیر منفی می گذارد. بنابراین، انتقال داده های ویدئویی در قطعات کوچک 10 ثانیه ای نیز به افزایش تاخیر موتور کمک می کند.
بیایید به طور خلاصه تمام جوانب مثبت و منفی فناوری HLS را خلاصه کنیم.
مزایای HLS:
- امکان کار با هر دستگاهی. میتوانید ویدیوها را در هر دستگاه مدرنی، خواه گوشی هوشمند، تبلت، لپتاپ یا رایانه رومیزی تماشا کنید. نکته اصلی این است که مرورگر وب به روز و سازگار با HTML5 و برنامه های افزودنی منبع رسانه است.
- کیفیت تصویر عالی. تابع انتقال داده تطبیقی مورد استفاده به شما امکان می دهد به صورت پویا کیفیت ویدیوی ارسالی را بسته به پهنای باند اتصال اینترنت تغییر دهید، در حالی که الگوریتم تلاش می کند حداکثر کیفیت را حفظ کند.
- نیازی به پیکربندی پیچیده تجهیزات کاربر نیست.
معایب:
- پشتیبانی محدود برای کار با موتور در برخی از دستگاه ها.
- تاخیر زیاد در انتقال تصویر
- افزایش چشمگیر سربار و پیچیدگی بهینه سازی به دلیل استفاده از فایل های کم حجم. با توجه به ماهیت کانتینر، هرگز نمیتوانیم تأخیر کمتری از اندازه سگمنت دریافت کنیم.
معایب HLS بیشتر از مزایای آن برای ما بود و ما را مجبور به جستجوی گزینه های جایگزین کرد.
WebRTC چیست؟

()
پلتفرم WebRTC توسط گوگل در سال 2011 برای انتقال جریان ویدئو و داده های صوتی بین مرورگرها و برنامه های تلفن همراه با حداقل تاخیر ایجاد شد. برای این کار از پروتکل استاندارد UDP و الگوریتم های ویژه کنترل جریان استفاده می شود. امروزه این یک پروژه منبع باز است، به طور فعال توسط گوگل نگهداری می شود و در حال توسعه است.
WebRTC مجموعه ای از فناوری ها برای انتقال تصویر و صدا به صورت همتا است. به عنوان مثال، مرورگرهای کاربر با استفاده از WebRTC می توانند داده ها را مستقیماً به یکدیگر منتقل کنند، بدون اینکه از سرورهای راه دور برای ذخیره و پردازش داده ها استفاده کنند. تمام اطلاعات نیز توسط مرورگرهای کاربران نهایی و برنامه های تلفن همراه پردازش می شود.
Удобство и большие возможности данной технологии по достоинству оценили разработчики всех популярных браузеров. Сегодня поддержка WebRTC реализована в Mozilla Firefox, Opera, Google Chrome (и всеми браузерами на базе Chromium), а также в мобильных приложениях под Android و آیاواس.
WebRTC با وجود تمام مزایای بدون شک، چندین معایب قابل توجه دارد.
مشکل انتخاب
فناوری WebRTC از نظر تعاملات شبکه بسیار پیچیده تر است زیرا در مورد P2P است. اشکال زدایی، تست کردن مشکل است و می تواند غیرقابل پیش بینی رفتار کند. در همان زمان، ما باید بر NAT و فایروال غلبه کنیم، باید از عملکرد در شبکه هایی که UDP مسدود شده است اطمینان حاصل کنیم.
استفاده از پیاده سازی WebRTC گوگل بسیار دشوار است. حتی یک شرکت کامل وجود دارد که خدمات مونتاژ SDK را ارائه می دهد. به علاوه، پیاده سازی گوگل برای ادغام با سیستم ما بدون رمزگذاری مجدد کل ویدیو بسیار دشوار بود.
با این حال، مدتهاست که میخواهیم به کاربران این فرصت را بدهیم که با ویدیوی "زنده" کامل کار کنند و فاصله بین تصویر روی صفحه و خود رویدادها را به حداقل برسانیم. بعلاوه، ما تمایل داشتیم که از دوربین های PTZ که تأخیرها حیاتی هستند، راحت تر استفاده کنیم.
با توجه به اینکه سایر پیاده سازی های ضد تاخیر هنوز عملکرد محدودی دارند و به طور قابل توجهی بدتر کار می کنند، تصمیم گرفتیم از WebRTC استفاده کنیم.
چه کرده ایم

پیاده سازی صحیح پلت فرم WebRTC کار آسانی نیست. هرگونه محاسبه اشتباه یا نادرستی می تواند منجر به تاخیر در ارسال ویدئو شود که نه تنها نسبت به سایر پلتفرم ها کاهش نمی یابد، بلکه حتی افزایش می یابد.
برای اینکه WebRTC به درستی کار کند، اول از همه، لازم است که یک ارتقاء تکنولوژیکی پشته برای کار با ویدیوی وب انجام شود. این کاری است که ما انجام دادیم.
ابتدا، ما یک سرور پروتکل سیگنالینگ WebRTC را روی Websocket پیاده سازی کردیم و همچنین یک سرور همتا WebRTC را در ابر بر اساس webrtc.org SDK مستقر کردیم. وظیفه آن توزیع جریان های ویدئویی به همتایان WebRTC کلاینت با فرمت H.264 + Opus/G.711 بدون رمزگذاری ویدئو است.
ما Websocket را به عنوان پروتکل سیگنالینگ انتخاب کردیم زیرا در حال حاضر از پشتیبانی با کیفیت بالا در همه مرورگرهای وب محبوب برخوردار است. با توجه به این، شما میتوانید نه تنها سربار توسعه را به میزان قابل توجهی کاهش دهید، بلکه از هدر دادن زمان و منابع در دست دادن مکرر TCP و TLS در مقایسه با AJAX نیز جلوگیری کنید.
واقعیت این است که به طور پیشفرض WebRTC پروتکل سیگنالینگ لازم برای پیکربندی، نگهداری و خاتمه ارتباط ویدیویی بیدرنگ بین برنامههای منبع و کلاینت را ارائه نمیکند.
و به منظور پیاده سازی مستقل فناوری سیگنالینگ، ما نیاز به توسعه سرور سیگنالینگ خود با پشتیبانی از چندین پروتکل وب (Websocet، WebRTC) داشتیم. و با قابلیت مدیریت ایمن جلسات و اعلانها در زمان واقعی، مدیریت ویدیو و موارد دیگر.
ما با کاهش تأخیر نه از طریق P2P، بلکه از طریق UDP و کنترل جریان برای کاهش تأخیر، بر محدودیتهای P2P غلبه کردیم. این همچنین در WebRTC تعبیه شده است، زیرا مورد استفاده اصلی مکالمات p2p از طریق مرورگر است.
در سرویس گیرنده تلفن همراه، ما پخش کننده را با استفاده از webrtc.org SDK پیاده سازی کردیم، زیرا فقط آن کنترل جریان را به درستی پیاده سازی می کند، همه طرح های شناخته شده تصحیح خطای پیش رو (FEC) را دارد و مکانیسم ارسال مجدد بسته ها را برای همه مرورگرها به درستی پیاده سازی می کند. همچنین مهم است که webrtc.org SDK به طور فعال توسط Google در حال توسعه است.
نتیجه پیاده سازی WebRTC چیست؟
برای مشاهده ویدیوی زنده از دوربین ها، یک پخش کننده بهینه سازی شده جدید مبتنی بر WebRTC را به حساب شخصی شما اضافه کرده ایم. سرعت بارگذاری ویدیو را سریع فراهم می کند و با افزایش زمان مشاهده، مشکل انباشته شدن تاخیر را کاملاً از بین می برد.
پس از معرفی پشتیبانی WebRTC در سرویس ابری Ivideon، میتوان با اطمینان کامل گفت که مشتریان ما اکنون میتوانند ویدیوی زنده کامل را تماشا کنند. اکنون تاخیر در پخش سکانس های ویدئویی از یک ثانیه بیشتر نمی شود! برای مقایسه، موتور HLS قبلی تحویل ویدئو را با تاخیر 5-7 ثانیه ارائه می کرد. تفاوت در سرعت نمایش ویدیو بسیار قابل توجه است و کاربر بلافاصله پس از شروع به کار با سرویس ویدیویی ما متوجه آن خواهد شد.
همانطور که انتظار داشتیم، اجرای پخش کننده جدید، پاسخگویی PTZ و ارتباط صوتی با دوربین را بهبود بخشیده است.

تنها یک نکته ظریف وجود دارد که می خواهیم توجه را به آن جلب کنیم. پخش کننده جدید WebRTC در حال حاضر در حالت آزمایشی کار می کند. و به همین دلیل است که ما آن را برای همه مشتریان خود به طور پیش فرض فعال نمی کنیم. اما می توانید خودتان با فعال کردن آیتم مربوطه در تنظیمات دوربین، آن را فعال کنید (برای انجام این کار، به ).
ویژگی های پیاده سازی WebRTC در سرویس Ivideon

WebRTC در حال حاضر هنوز یک فناوری آزمایشی است. پشتیبانی آن هنوز در همه مرورگرها و دستگاه های کاربر و همچنین در همه دوربین ها به درستی اجرا نشده است.
دقیقاً به همین دلیل است که ما هنوز پخش کننده WebRTC را پیش فرض برای همه کاربران قرار نداده ایم.
در حال حاضر، توصیه می کنیم از WebRTC فقط در مرورگرهای Google Chrome استفاده کنید. آخرین نسخه های فایرفاکس و سافاری نیز از این فناوری پشتیبانی می کنند، اما متاسفانه همچنان ناپایدار است.
ما هنوز پشتیبانی WebRTC را برای مرورگرها در دستگاه های تلفن همراه اجرا نکرده ایم. در حال حاضر، اگر از یک دستگاه تلفن همراه وارد شوید و WebRTC را فعال کنید، این حالت کار نخواهد کرد. با این حال، WebRTC در برنامه های تلفن همراه ما در دسترس است и .
و در پایان داستان در مورد ویژگی های پیاده سازی WebRTC در سرویس ما، اجازه دهید به دو نکته ظریف دیگر توجه کنیم.
اولاً، این فناوری بر پخش ویدیوی زنده در زمان واقعی متمرکز شده است. بنابراین، اگر کانال شما پهنای باند کافی برای انتقال ویدیو را نداشته باشد، متوجه افت فریم خواهید شد (با HLS متوجه محو شدن ویدیو و افزایش تاخیر خواهید شد، اما افت فریم وجود نخواهد داشت)، اما ویدیو همچنان به صورت واقعی پخش می شود. زمان.
ثانیاً، از آنجایی که این فناوری به گونهای طراحی شده است که به طور خاص با ویدیوی زنده در زمان واقعی کار کند، ما از آن برای کار با دادههای ویدیوی آرشیو شده استفاده نمیکنیم.
سایر تغییرات سرویس
در این زمان، فلش دیگر در مکانیزم انتخاب خودکار موتور دخالت ندارد. هنوز هم می توانید از چنین پخش کننده ای استفاده کنید، اما برای انجام این کار باید آن را به صورت دستی در تنظیمات حساب کاربری یا دوربین انتخاب کنید. این ادای احترام به مد نیست، فقط طبق آمار سرویس ما، عملاً هیچ کاربری با فلش کار نمی کند. و تلاش برای تعیین اینکه آیا مرورگر کاربر از آن پشتیبانی می کند یا خیر، حدود 2 ثانیه از زمان گرانبها را از دست می دهیم.
در اینجا مروری کوتاه بر تغییراتی است که در سیستم نظارت تصویری ابری و حساب شخصی ما در انتظار شماست. با ما همراه باشید و اخبار را دنبال کنید!
منبع: www.habr.com
