پخش HLS خصوصی شما برای خودتان بارگذاری میشود، نه برای بینندگانتان
صفحه بارگذاری میشود چون سرور شما به دوربین میرسد؛ با این حال مرورگر فهرست پخش را میآورد. مشخص کنید چه کسی درخواست را میفرستد و سپس زنجیره را بیازمایید.
صفحه را روی لپتاپ خود آزمایش میکنید، پخشکننده شروع میشود و تیکت بسته میشود. بیننده در طرف دیگر همان صفحه را باز میکند و چرخانندهای میبیند که هرگز تمام نمیشود. توضیح معمول این است که VPN روی سرور است، پس پخش باید کار کند — اما این مرورگر است که فهرست پخش را درخواست میکند و مسیر شبکه خودش را دارد. صفحهای که روی سروری با دسترسی خصوصی جاسازی شده، آن دسترسی را به کسی که آن را بارگذاری میکند قرض نمیدهد.
این درباره یک صفحه ASP.NET موجود است که منبع HLS مانند http://10.5.5.9:8080/live/stream.m3u8 را پخش میکند، که یک نشانی خصوصی نمونه است. دو چیدمان کار میکند؛ یکی از آنها احتمالاً آن چیزی نیست که ساختهاید.
افسانه: بارگذاری صفحه مسیر رسانه را اثبات میکند
HTML آن صفحه از سرور وب شما میآید، از هر مسیری که سرور وب شما دارد. فهرست پخش و قطعهها از مبدأ رسانه میآیند، از هر مسیری که مؤلفه درخواستدهنده دارد. وقتی پخشکننده در مرورگر بیننده اجرا میشود، اینها دو کارخواه متفاوت، دو نشانی مبدأ متفاوت و اغلب دو دامنه خرابی متفاوت هستند. دیدن موفقیت اولی هیچ چیزی درباره دومی نمیگوید.
آنچه آزمون شما واقعاً اثبات کرد باریکتر از آن بود که به نظر میرسید: ماشین شما میتواند همزمان به صفحه عمومی و میزبان رسانه خصوصی برسد. ماشین بیننده هرگز بخشی از آزمایش نبود.
فهرست پخش در ادامه چه میخواهد
RFC 8216 فهرستهای پخش رسانه، که قطعهها را برمیشمارند، از فهرستهای پخش اصلی، که فهرستهای دیگر را برمیشمارند، جدا میکند و URIهای نسبی را نسبت به URI فهرستی که آنها را در خود دارد حل میکند. همان قاعده بخشی است که مردم از آن میگذرند. گرفتن موفق یک فایل .m3u8 آزمون پخش نیست، چون فایلی که گرفتید نمایه است، نه خود رسانه.
زنجیره را همانگونه که پخشکننده دنبال میکند دنبال کنید: فهرست انتخابشده را باز کنید، سپس منابعی را که نام میبرد درخواست کنید، سپس هر تغییرمسیری را پی بگیرید. فهرستی که از طریق یک سرور وب قابل دسترس سرو میشود باز هم میتواند بیننده را به یک نشانی خصوصی غیرقابل دسترس بفرستد. به همین ترتیب، جابهجا کردن یک فهرست نسبی به URL دیگر پایهای را تغییر میدهد که ورودیهایش نسبت به آن حل میشوند، و به همین دلیل بازنویسی نخستین URL قابل مشاهده و توقف در همانجا معمولاً فهرستی میسازد که معتبر به نظر میرسد ولی پخش نمیشود.
تماشای مستقیم: بیننده به مسیر نیاز دارد
اگر قرار است بینندگان مستقیماً به میزبان رسانه برسند، دستگاههای آنها به VPN تأییدشده یا مسیر خصوصی دیگری نیاز دارند، به DNS که نامهایی را که واقعاً به کار بردید حل کند، به اجازه رسیدن به آن مقصدها و به هر احراز هویتی که سرویس رسانه لازم دارد. هر یک را روی دستگاه بیننده بررسی کنید، نه روی سرور. مرورگر روی تلفنی که نمایه VPN روی آن نصب است ولی متصل نیست، یک خرابی رایج و کاملاً بازتولیدپذیر است.
این چیدمان مبدأ را خصوصی نگه میدارد و نیاز دسترسی را به مخاطب منتقل میکند. این تصمیمی سیاسی به همان اندازه فنی است، پس پیش از طراحی بر پایه آن تأیید کنید که هر بیننده موردنظر مجاز است این مسیر را داشته باشد.
تحویل از سمت سرور: یک نقطه ورود کنترلشده
جایگزین، یک پیشانه رسانه مجاز است که مبدأ را از مسیر خصوصی خودش میآورد و تنها منابع رو به بیننده را دوباره منتشر میکند. فهرست پخش، قطعهها و هر منبع کلیدی را با همان یک نقطه ورود سازگار نگه دارید، وگرنه پخشکننده فهرستی بازنویسیشده را از طریق پیشانه و قطعهها را مستقیماً از نشانیای میآورد که بیننده به آن نمیرسد.
مبدأ و مسیرهای مجاز را در آن پیشانه محدود کنید. یک URL دلبخواه که کاربر میدهد، یک واسط سودمند را به آوردنده بیقید شبکه داخلی شما تبدیل میکند، که مشکلی بسیار بدتر از جریانی است که پخش نمیشود. مبدأ و پیشوند مسیر را در فهرست مجاز بگذارید، نه اینکه رشته را بعد از واقعه اعتبارسنجی کنید.
برای یک منبع HLS موجود، نخست بررسی کنید که ارسال کنترلشده کافی است یا نه؛ وجود VPN در میانه به معنای نیاز به ترانکد نیست. سپس ترکیب واقعی مرورگر و کدک را اعتبارسنجی کنید، چون پاسخ قابل دسترس و قالب پشتیبانیشده دو شرط جداگانهاند. TLS، احراز هویت و الزامات امنیتی مرورگر مبدأ را دستنخورده نگه دارید — پخشکننده جاسازیشده از آنها مستثنا نیست.
زنجیره را بیازمایید، نه URL را
بررسیها را از مؤلفهای اجرا کنید که واقعاً هر درخواست را میفرستد، و هر گام را نتیجه خودش بدانید:
curl -s http://10.5.5.9:8080/live/stream.m3u8
curl -s -o /dev/null -w '%{http_code}\n' http://10.5.5.9:8080/live/segment-000123.tsسپس آن را در مرورگر خود بیننده با جریان موردنظر تکرار کنید، نه با الگوی آزمایشی از میز کارتان. بارگذاری صفحه، بارگذاری فهرست، گرفتن قطعه و شکست مجوز چهار نتیجه متمایزند و میخواهید هر چهار را دیده باشید پیش از آنکه آن را درستشده بنامید. افزونه مرورگر قدیمی نصب نکنید فقط به این دلیل که نمونهای قدیمی جریانی را اینطور پخش کرده بود؛ قطعه گمشده معمولاً مسیر بیننده یا URL امضانشده قطعه است.
وقتی چیدمان آگاهانه شد، آن را در یک خط بنویسید: چه کسی رسانه را میآورد، از چه مسیری، و بیننده مجاز است چه چیزی درخواست کند. همان جمله بیشتر بحثهای آینده درباره اینکه جریان واقعاً برای چه کسی است را فیصله میدهد.