udpxy(1) راهنمای udpxy udpxy(1)

udpxy - دیمن بازپخش ترافیک چندپخشی UDP به HTTP

udpxy [-vTS] [-a <listenaddr>] [-m <mcast_ifc_addr>] [-c <clients>] [-l <logfile>] [-B <sizeK>] [-R <msgs>] [-H <sec>] [-n <nice_incr>] [-M <sec>] -p <port>

برنامه udpxy یک دیمن بازپخش ترافیک چندپخشی UDP به HTTP است: این برنامه ترافیک UDP را از یک اشتراک چندپخشی (multicast) مشخص به کلاینت متقاضی HTTP فوروارد می‌کند.

برنامه udpxy (روی یک نشانی/پورت اختصاصی) به درخواست‌های HTTP ارسال‌شده توسط کلاینت‌ها گوش فرا می‌دهد. یک درخواست کلاینت باید دارای ساختار زیر باشد:

http://{address}:{port}/{cmd}/{mgroup_address}[SEP]{mgroup_port}

[SEP]
:|%|~|+|-|^
{cmd}
udp|rtp

که در آن address و port با ترکیب address/port شنود udpxy مطابقت دارند، و mgroup_address:mgroup_port گروه/کانال چندپخشی را برای اشتراک مشخص می‌کنند.

دستور udp باعث می‌شود udpxy انواع شناخته‌شدهٔ بار داده (مانند MPEG-TS و RTP over MPEG-TS) را شناسایی و بررسی کند؛
دستور rtp باعث می‌شود udpxy نوع بار داده را RTP over MPEG-TS در نظر بگیرد و بنابراین از بررسی و شناسایی صرف‌نظر کند.

برنامه udpxy برای هر درخواست بازپخش جدید (در محدودهٔ تعیین‌شده برای کلاینت‌های فعال) یک فرایند کلاینت مجزا آغاز می‌کند. این فرایند کلاینت تمام ترافیک شبکهٔ دریافت شده (از طریق یک سوکت UDP) از گروه چندپخشی مشخص‌شده را به اتصال HTTP درخواست‌کننده فوروارد/بازپخش خواهد کرد.

برنامه udpxy همچنین از چند درخواست مدیریتی پشتیبانی می‌کند:

http://address:port/status برای بازگرداندن یک صفحهٔ HTML حاوی وضعیت دیمن و آمار کلاینت‌ها.
http://address:port/restart برای بستن تمام اتصالات فعال و راه‌اندازی مجدد.

http://192.168.0.12:5056/udp/224.0.2.26:24012

http://192.168.0.12:5056/rtp/224.0.2.26:24012

http://192.168.0.15:5056/rtp/224.0.2.26^24055

http://192.168.0.15:5056/status

برنامه udpxy گزینه‌های زیر را می‌پذیرد:

فعال‌سازی خروجی پرگو (verbose) [پیش‌فرض = غیرفعال].
فعال‌سازی آمار کلاینت‌ها [پیش‌فرض = غیرفعال].
عدم اجرا به‌صورت دیمن [پیش‌فرض = دیمن در صورت اجرا توسط کاربر ریشه (root)].
نشانی IPv4 یا رابط شبکه برای شنود [پیش‌فرض = 0.0.0.0].
نشانی IPv4 یا رابط شبکهٔ منبع (چندپخشی) [پیش‌فرض = 0.0.0.0].
حداکثر تعداد کلاینت‌های مجاز برای پذیرش [پیش‌فرض = 3، حداکثر = 5000].
ثبت خروجی لاگ در فایل [پیش‌فرض = stderr].
اندازهٔ بافر (65536، 32Kb، 1Mb) برای داده‌های ورودی (چندپخشی) [پیش‌فرض = 2048 bytes].
حداکثر تعداد پیام‌ها برای نگهداری در بافر (-1 = همه) [پیش‌فرض = 1].
حداکثر زمان (به ثانیه) برای نگهداری داده‌ها در بافر (-1 = نامحدود) [پیش‌فرض = 1].
میزان افزایش مقدار nice [پیش‌فرض = 0].
تمدید اشتراک چندپخشی در هر M ثانیه (اگر 0 باشد صرف‌نظر می‌شود) [پیش‌فرض = 0].
پورت برای شنود.

برنامه udpxy بارهای دادهٔ MPEG-TS و RTP over MPEG-TS را در بسته‌های بازپخش‌شده تشخیص می‌دهد؛ اگر udpxy با بار دادهٔ RTP مواجه شود، آن را به‌طور خودکار (با حذف هدرهای RTP) به MPEG-TS «ترجمه» می‌کند تا پخش‌کننده‌های رسانه‌ای که از RTP پشتیبانی نمی‌کنند نیز همچنان بتوانند جریان را پخش کنند.

تاکنون هیچ ترجمه‌ای برای سایر انواع بار داده انجام نمی‌شود.

برنامه udpxy شامل قابلیتی برای ضبط ترافیک دریافت شده به‌عنوان یک جریان خام MPEG-TS در یک فایل است. این قابلیت از طریق udpxrec فعال می‌شود: برنامه‌ای همراه که با udpxy (به‌عنوان یک فایل اجرایی واحد) پیوند داده شده است.

برنامه udpxrec از طریق یک پیوند نمادین (به نام udpxrec) به فایل اجرایی udpxy فراخوانی می‌شود (یعنی فایل اجرایی udpxy را تغییر نام ندهید).

برنامه udpxrec فایل‌های MPEG ایجاد می‌کند که بخش‌های MPEG-TS را در خود کپسوله‌سازی کرده‌اند؛ برخی از پخش‌کننده‌های رسانه‌ای چنین فایل‌هایی را پخش نخواهند کرد؛ برای قابل‌پخش کردن آن‌ها، جریان باید به MPEG-PS تبدیل کد (transcode) شود؛ برنامه vlc نحوهٔ انجام چنین تبدیل کدی را می‌داند، در اینجا یک مثال خط فرمانی آورده شده است:

vlc input-ts.mpg --sout="#std{access=file,mux=ps,dst=out-ps.mpg}"

فایل MPEG-PS حاصل می‌تواند توسط اکثر پخش‌کننده‌های رسانه‌ای پخش شود.

برنامه udpxy از متغیرهای محیطی زیر به عنوان مکمل گزینه‌های خط فرمان خود استفاده می‌کند؛ این متغیرها برای گزینه‌هایی در نظر گرفته شده‌اند که اکثر افراد نیاز به تغییر مکرر آن‌ها ندارند (یا استفاده از آن‌ها در خط فرمان دشوار است).

توجه: اگر یک گزینهٔ خط فرمان با عملکرد یک متغیر محیطی تداخل داشته باشد، گزینهٔ خط فرمان همواره اولویت بالاتری دارد.

مهلت زمانی (به ثانیه) روی جریان دادهٔ ورودی (چندپخشی)، پیش‌فرض=5؛
مهلت زمانی (به ثانیه) برای نگهداری داده‌های بافرشده پیش از ارسال/تخلیه به کلاینت(ها)، پیش‌فرض=1؛
مهلت زمانی (به ثانیه) برای خواندن از سوکت شنود (رسیدگی به درخواست‌های HTTP)، پیش‌فرض=1؛
مهلت زمانی (به ثانیه) برای نوشتن در سوکت شنود (رسیدگی به درخواست‌های HTTP)، پیش‌فرض=1؛
مهلت زمانی (به ثانیه) برای فراخوانی select(2) در حلقهٔ سرور (در صورت به‌کارگیری pselect(2) استفاده نمی‌شود)، پیش‌فرض=30؛
اندازهٔ صف انتظار (backlog) سوکت شنود، پیش‌فرض=16؛
حد پایین (low watermark) در سوکت دریافت‌کننده (چندپخشی)، پیش‌فرض=0 (تنظیم‌نشده)؛
عدم همگام‌سازی اندازهٔ بافر سوکت ورودی (UDP) (با مقدار تعیین‌شده توسط -B)، پیش‌فرض=1 (همگام‌سازی)؛
عدم همگام‌سازی اندازهٔ بافر سوکت خروجی (TCP) (با مقدار تعیین‌شده توسط -B)، پیش‌فرض=1 (همگام‌سازی)؛
غیرفعال‌سازی الگوریتم Nagle روی سوکت تازه پذیرفته‌شده (تعویض سریع‌تر کانال)، پیش‌فرض=1؛
پیوست کردن محتویات فایل متنی مشخص‌شده به پاسخ HTTP 200، پیش‌فرض=none؛
پیوست کردن خط متن داده‌شده به پاسخ HTTP 200، پیش‌فرض=none؛
در صورت مسدود شدن در فراخوانی write(2)، خواندن داده تا زمان پر شدن بافر (-B <sizeK>) ادامه یابد، پیش‌فرض=غیرفعال؛
اجازهٔ خواندن داده تنها به مدت N میلی‌ثانیه هنگام مسدود شدن در write(2).
تعیین مقدار سفارشی Content-Type در پاسخ‌های HTTP.

Pavel V. Cherenkov و تمامی افراد شایسته‌ای که وصله‌ها را ارسال کرده یا به نحوی در این پروژه مشارکت داشته‌اند.

udpxrec(1)

17 نوامبر 2012 نسخه 1.0