انتشار جریان دوربین: RTSP و HLS یک لبه نیستند
کنترل نشست RTSP و تحویل HLS به دو لبه عمومی متفاوت نیاز دارند، حتی وقتی هر دو از طریق VPN به یک دوربین میرسند. نخست مدل بیننده را انتخاب کنید.
شما یک درگاه دوربین را باز میکنید، پخشی را به آن نشانه میگیرید و فرض میکنید مشکل اینترنت حل شده است. سپس تلفن نمیتواند آن را پخش کند، مرورگر نمیتواند آن را پخش کند، و صفحه مدیریت دوربین تنها یک مسیر اشتباه تایپشده از لبه عمومی فاصله دارد. مدل تحویلی که انتخاب کردید، RTSP یا HLS، بیشتر این را پیش از نوشتن حتی یک قاعده فایروال تعیین میکند. VPN فقط بخش خصوصی را فراهم میکند.
VPN مسیر منبع را درست میکند، نه مسیر بیننده را
یک VPS که از طریق تونل به شبکه محلی دوربین وصل شده میتواند دوربین را در نشانی خصوصیاش برسد، و این واقعاً مفید است. یعنی دوربین به درگاه ورودی خودش نیازی ندارد و روتر خانه بسته میماند. اما به شما نمیگوید یک بیننده به چه زبانی صحبت خواهد کرد. پخشکننده رومیزی، مرورگر، تلفن و تلویزیون هوشمند پروتکلهای متفاوتی را پشتیبانی میکنند و هر کدام انتظارات خود را درباره TLS، احراز هویت و کدکها دارند.
اینک فرضی که ارزش کنار گذاشتن دارد: انتشار ظاهراً یعنی در دسترس کردن منبع. انتشار در واقع یعنی دادن یک راه پشتیبانیشده به مخاطبی مشخص برای مصرف رسانه. یک جریان منتشرشده قالب، مخاطب و اعتبارنامه دارد؛ دوربین در دسترس هیچکدام را ندارد. دسترسپذیری همان بخشی است که تونل حل میکند، و نقطه ورود بیننده همان بخشی است که هنوز باید طراحی کنید.
RTSP یک مذاکره است، نه یک درگاه
RTSP کنترل نشست را حمل میکند: کارخواه توصیفی میخواهد، یک یا چند مسیر رسانه را برپا میکند و سپس پخش میکند. انتقال خود رسانه در همان برپایی مذاکره میشود، به همین دلیل پروتکل با یک درگاه TCP هدایتشده بهخوبی توصیف نمیشود. همان مذاکره بخشی است که مردم هنگام مقایسه قواعد فایروال از دست میدهند.
بسته به نقاط پایانی، RTP ممکن است روی درگاههای جداگانه UDP برسد یا در اتصال کنترل درهمبافته باشد. رلهای که فقط 554 را هدایت میکند و فرض میکند بقیه کار خواهد کرد معمولاً نشستی میسازد که متصل میشود، مسیری را گزارش میکند و سپس چیزی نشان نمیدهد. پیش از نوشتن قاعده برای آن، انتقالی را که دوربین شما واقعاً بر سر آن مذاکره میکند بررسی کنید. یک ضبط در سمت خصوصی در یک دقیقه به آن پاسخ میدهد و حدس زدن یک شب هزینه دارد.
برای مخاطبی کوچک و شناختهشده با پخشکنندههای سازگار، یک رله RTSP که آگاهانه پیکربندی شده میتواند پاسخ درست باشد. محدود کنید از کدام منبع میتواند بکشد و در رله احراز هویت بخواهید. پخشکنندههایی را که آزمودید بنویسید، چون جریان RTSP که در VLC کار میکند ممکن است در مرورگر باز هم شکست بخورد.
HLS یک فهرست پخش بهعلاوه منابع است
بیننده HLS یک فهرست پخش میگیرد، سپس بخشهای رسانهای را که آن فهرست نام میبرد میگیرد. مشخصات HLS همان مدل منابع را تعریف میکند، و جزئیات عملیاتی مهم این است که فهرستهای پخش به نشانیهای URL دیگر ارجاع میدهند. ارجاعهای نسبی نسبت به محل فهرست حل میشوند، پس پراکسیای که مسیرها را بازنویسی میکند باید آنها را بهطور سازگار بازنویسی کند.
اگر دوربین از قبل HLS قابل استفاده ارائه میکند، یک فرانتاند عمومی میتواند آن درخواستهای فهرست و بخشها را از تونل عبور دهد. مراقب کلیدها، تغییرمسیرها و نشانیهای URL که برنامه تولید میکند باشید. هر نشانی URL مطلقی که به میزبان خصوصی اشاره کند، همان لحظهای که بینندهای بیرون از شبکه محلی آن را دنبال کند میشکند. مسیرهای نسبی همانهایی هستند که از بازنویسی پراکسی جان سالم به در میبرند، پس هرجا خروجی تولیدشده را کنترل میکنید آنها را ترجیح دهید.
اگر دوربین فقط RTSP صحبت میکند، چیزی باید منبع را به قالب بیننده تبدیل کند. بازبستهبندی و ترانسکد کردن کارهای متفاوتی هستند: بازبستهبندی کدک را حفظ میکند، در حالی که ترانسکد کردن آن را برای سازگاری دوباره کدگذاری میکند، و تنها دومی هزینه جدی CPU دارد. هیچکدام فقط به این دلیل که VPN در مسیر است ضروری نمیشوند.
پیوند بالاسری را بر اساس جایی که توزیع رخ میدهد برنامهریزی کنید. یک دریافت خصوصی که یک سرویس رسانه عمومی را تغذیه میکند، رفتاری کاملاً متفاوت از هر بینندهای دارد که جریان خودش را از تونل میکشد. الگوی دوم معمولاً به یک اتصال خانه اشباعشده و دوربینی ختم میشود که بهنظر تصادفی شکست میخورد.
احراز هویت را روی لبهای بگذارید که منتشر میکنید
TLS، احراز هویت بینندگان و ثبت دسترسی به نقطه ورود عمومی تعلق دارند، نه به دوربین. این اعتبارنامههای دوربین را از اعتبارنامههای جریان جدا نگه میدارد. همچنین یک جای واحد برای لغو دسترسی وقتی یکی از اعضای مخاطب میرود به شما میدهد. قرار دادن آن کنترلها روی دوربین در عوض یعنی هر تغییر مخاطب به تغییری اداری روی دستگاهی تبدیل میشود که هرگز نباید بهصورت عمومی در دسترس باشد.
VPN و مجوزهای مدیریت دوربین را از مسیر انتشار جدا نگه دارید. یک VPS که میتواند به رابط وب دوربین برسد تا جریانی بکشد نباید همان ماشینی باشد که آن رابط را افشا میکند. مخاطب هرگز نباید نشانی دوربین را بداند.
سپس دو سر واقعی را که ساختهاید بررسی کنید، نه اینکه فرض کنید زنجیره کار میکند:
$ ffprobe -v error -rtsp_transport tcp rtsp://10.50.0.9:554/stream1
$ curl -sI https://stream.example.net/live/index.m3u8
HTTP/2 200
content-type: application/vnd.apple.mpegurl
کاوش موفق منبع خصوصی و واکشی موفق فهرست پخش در لبه عمومی دو نیمه متفاوت طراحی را اثبات میکنند. آنها را جداگانه بیازمایید. پخش از همان نوع کارخواهی که مخاطب شما استفاده میکند تنها آزمونی است که کل زنجیره را پوشش میدهد.
آنچه در پایان دارید زنجیرهای است که هر حلقهاش هدفی دارد: منبع خصوصی، دریافت محدود، بستهبندی برگزیده، ورود مجاز بیننده. هیچیک از این حلقهها اختیاری نیست و هیچیک با باز کردن یک درگاه ایجاد نمیشود.