ROC-RECV(1) Roc Toolkit ROC-RECV(1) نام (NAME) roc-recv - دریافت بی‌درنگ صدا خلاصه دستور (SYNOPSIS) roc-recv OPTIONS توضیحات (DESCRIPTION) دریافت جریان‌های صوتی از فرستنده‌های راه دور و نوشتن آن‌ها روی یک دستگاه صوتی یا فایل. گزینه‌ها (OPTIONS) -h, --help چاپ راهنما و خروج -V, --version چاپ نسخه و خروج -v, --verbose افزایش سطح پرگویی (می‌تواند چندین بار استفاده شود) -L, --list-supported فهرست کردن طرح‌واره‌ها و قالب‌های پشتیبانی‌شده -o,--output=IO_URI شناسه یکتای منبع (URI) فایل یا دستگاه خروجی --output-format=FILE_FORMAT اجبار قالب فایل خروجی --backup=IO_URI شناسه یکتای منبع (URI) فایل یا دستگاه پشتیبان (در صورت تنظیم، زمانی که هیچ نشستی وجود ندارد استفاده می‌شود) --backup-format=FILE_FORMAT اجبار قالب فایل پشتیبان -s,--source=ENDPOINT_URI نقطه پایانی منبع محلی -r,--repair=ENDPOINT_URI نقطه پایانی ترمیم محلی -c,--control=ENDPOINT_URI نقطه پایانی کنترلی محلی --miface=MIFACE نشانی IPv4 یا IPv6 مربوط به رابط شبکه‌ای که باید به گروه چندپخشی (multicast) ملحق شود --reuseaddr فعال‌سازی SO_REUSEADDR هنگام متصل کردن (bind) سوکت‌ها --target-latency=STRING تأخیر هدف، بر حسب واحدهای TIME --io-latency=STRING تأخیر هدف پخش، بر حسب واحدهای TIME --latency-tolerance=STRING حداکثر انحراف از تأخیر هدف، بر حسب واحدهای TIME --no-play-timeout=STRING مهلت زمانی عدم پخش، بر حسب واحدهای TIME --choppy-play-timeout=STRING مهلت زمانی پخش بریده‌بریده، بر حسب واحدهای TIME --frame-len=TIME مدت‌زمان فریم‌های داخلی، بر حسب واحدهای TIME --max-packet-size=SIZE حداکثر اندازه بسته، بر حسب واحدهای SIZE --max-frame-size=SIZE حداکثر اندازه فریم داخلی، بر حسب واحدهای SIZE --rate=INT بازنویسی نرخ نمونه‌برداری خروجی، بر حسب هرتز (Hz) --latency-backend=ENUM کدام تأخیر در تنظیم‌کننده تأخیر استفاده شود (مقادیر ممکن="niq"، پیش‌فرض=`niq') --latency-profile=ENUM نمایه تنظیم تأخیر (مقادیر ممکن="default"، "responsive"، "gradual"، "intact"، پیش‌فرض=`default') --resampler-backend=ENUM بخش پشتیبان بازنمونه‌بردار (مقادیر ممکن="default"، "builtin"، "speex"، "speexdec"، پیش‌فرض=`default') --resampler-profile=ENUM نمایه بازنمونه‌بردار (مقادیر ممکن="low"، "medium"، "high"، پیش‌فرض=`medium') -1, --oneshot خروج هنگام قطع اتصال آخرین کلاینت متصل (پیش‌فرض=غیرفعال) --profiling فعال‌سازی تحلیل عملکرد داخلی (self-profiling) (پیش‌فرض=غیرفعال) --beep فعال‌سازی بوق هشدار هنگام از دست رفتن بسته (پیش‌فرض=غیرفعال) --color=ENUM تنظیم حالت ثبت رویدادهای رنگی برای خروجی stderr (مقادیر ممکن="auto"، "always"، "never"، پیش‌فرض=`auto') گزینه‌های --source، --repair و --control پایانه‌های شبکه‌ای را که ترافیک باید روی آن‌ها دریافت شود، مشخص می‌کنند. ENDPOINT_URI باید قالب زیر را داشته باشد: protocol://host[:port][/path][?query] مثال‌ها: • rtsp://localhost:123/path?query • rtp+rs8m://localhost:123 • rtp://0.0.0.0:123 • rtp://[::1]:123 • rtcp://0.0.0.0:123 فهرست پروتکل‌های پشتیبانی‌شده را می‌توان با استفاده از گزینهٔ --list-supported به دست آورد. فیلد host باید یا FQDN (نام دامنه)، یا نشانی IPv4، یا نشانی IPv6 درون کروشه باشد. این فیلد می‌تواند 0.0.0.0 (برای IPv4) یا [::] (برای IPv6) باشد تا پایانه به تمام رابط‌های شبکه مقید (bind) شود. اگر پروتکل یک پورت استاندارد را تعریف کرده باشد، فیلد port می‌تواند حذف شود؛ در غیر این صورت، اجباری است. این فیلد می‌تواند روی صفر تنظیم شود تا پایانه به یک پورت زودگذر (ephemeral) که به‌طور تصادفی انتخاب می‌شود متصل گردد. فیلدهای path و query تنها برای پروتکل‌هایی مجاز هستند که از آن‌ها پشتیبانی می‌کنند، مانند RTSP. اگر FEC روی فرستنده فعال باشد، باید یک جفت پایانهٔ منبع (source) و ترمیم (repair) ارائه شود. این دو پایانه باید از پروتکل‌های سازگار استفاده کنند، برای مثال rtp+rs8m:// برای پایانهٔ منبع و rs8m:// برای پایانهٔ ترمیم. اگر FEC غیرفعال باشد، باید تنها یک پایانهٔ منبع ارائه شود. پروتکل‌های منبع و ترمیم پشتیبانی‌شده: • منبع rtp://، بدون ترمیم (RTP خام بدون FEC) • منبع rtp+rs8m://، ترمیم rs8m:// (RTP با Reed-Solomon FEC) • منبع rtp+ldpc://، ترمیم ldpc:// (RTP با LDPC-Staircase FEC) علاوه بر این، توصیه می‌شود که یک پایانهٔ کنترل مشخص شود. این پایانه برای تبادل اطلاعات غیررسانه‌ای جهت شناسایی نشست، ارسال بازخورد و غیره استفاده می‌شود. اگر هیچ پایانهٔ کنترلی ارائه نشود، نشست در حالت تقلیل‌یافتهٔ جایگزین (fallback mode) عمل می‌کند که ممکن است پایداری کمتری داشته باشد و از همهٔ قابلیت‌ها پشتیبانی نکند. پروتکل‌های کنترل پشتیبانی‌شده: • rtcp:// نشانی ورودی/خروجی (IO URI) گزینه‌های --output و --backup به یک URI دستگاه یا فایل در یکی از قالب‌های زیر نیاز دارند: • DEVICE_TYPE://DEVICE_NAME -- دستگاه صوتی • DEVICE_TYPE://default -- دستگاه صوتی پیش‌فرض برای نوع دستگاه مشخص‌شده • file:///ABS/PATH -- مسیر مطلق فایل • file://localhost/ABS/PATH -- مسیر مطلق فایل (قالب جایگزین؛ فقط میزبان "localhost" پشتیبانی می‌شود) • file:/ABS/PATH -- مسیر مطلق فایل (قالب جایگزین) • file:REL/PATH -- مسیر نسبی فایل • file://- -- stdout • file:- -- stdout (قالب جایگزین) فهرست طرح‌واره‌ها (schemes) و قالب‌های فایل پشتیبانی‌شده را می‌توان با استفاده از گزینهٔ --list-supported به دست آورد. اگر --output حذف شود، گرداننده (driver) و دستگاه پیش‌فرض انتخاب می‌شوند. اگر --backup حذف شود، از هیچ منبع پشتیبانی استفاده نخواهد شد. گزینه‌های --output-format و --backup-format را می‌توان برای تحمیل قالب فایل خروجی یا پشتیبان به کار برد. اگر گزینه حذف شود، قالب فایل به‌طور خودکار تشخیص داده می‌شود. زمانی که خروجی یا پشتیبان stdout یا stdin باشد، تعیین این گزینه همواره الزامی است. بخش مسیر (path) در URI ارائه‌شده به‌صورت percent-decoded رمزگشایی می‌شود. برای سهولت، نویسه‌های کدگذاری‌نشده نیز مجاز هستند، جز اینکه % همواره باید به‌صورت %25 کدگذاری شود. برای نمونه، فایلی با نام /foo/bar%/[baz] را می‌توان با هر یک از این URIها مشخص کرد: file:///foo%2Fbar%25%2F%5Bbaz%5D و file:///foo/bar%25/[baz]. رابط چندپخشی (Multicast interface) اگر گزینهٔ --miface مشخص شده باشد، نشانی IP رابط شبکه‌ای را تعیین می‌کند که باید به گروه چندپخشی ملحق شود. در صورت عدم حضور، نباید به هیچ گروه چندپخشی ملحق شد. دریافت ترافیک چندپخشی بدون پیوستن به گروه چندپخشی امکان‌پذیر نیست. کاربر باید یا رابط چندپخشی را مشخص کند، یا با استفاده از ابزارهای خارجی به‌طور دستی به گروه ملحق شود. MIFACE باید یک نشانی IP از رابط شبکه‌ای باشد که قرار است به گروه چندپخشی ملحق شود. این مقدار می‌تواند 0.0.0.0 (برای IPv4) یا :: (برای IPv6) باشد تا به گروه چندپخشی روی همهٔ رابط‌های در دسترس پیوسته شود. اسلات‌های چندگانه (Multiple slots) می‌توان چندین مجموعه پایانه را برای دریافت رسانه از نشانی‌های چندگانه تعیین کرد. این مجموعه‌های پایانه «اسلات» (slots) نامیده می‌شوند. همهٔ اسلات‌ها باید دارای مجموعه یکسانی از انواع پایانه (مانند source، repair و غیره) باشند و از پروتکل‌های یکسانی برای آن‌ها استفاده کنند. همچنین همهٔ اسلات‌ها در صورت استفاده، باید گزینهٔ رابط چندپخشی مختص به خود را داشته باشند. SO_REUSEADDR اگر گزینهٔ --reuseaddr ارائه شود، گزینهٔ سوکت SO_REUSEADDR برای همهٔ سوکت‌ها فعال خواهد شد (به‌طور پیش‌فرض تنها برای سوکت‌های چندپخشی فعال است). برای TCP، این گزینه اجازه می‌دهد سوکتی که به‌تازگی بسته شده و در وضعیت TIME_WAIT قرار دارد بلافاصله دوباره استفاده شود، که در صورت نیاز به راه‌اندازی مجدد سریع سرور می‌تواند کاربردی باشد. برای UDP، این گزینه اجازه می‌دهد چندین فرایند به یک نشانی یکسان متصل (bind) شوند که در صورت استفاده از فعال‌سازی سوکت systemd می‌تواند مفید باشد. صرف‌نظر از این گزینه، SO_REUSEADDR هنگام اتصال به یک پورت زودگذر (ephemeral) همواره غیرفعال است..SS صدای پشتیبان (Backup audio) اگر گزینهٔ --backup مشخص شده باشد، دستگاه صوتی ورودی یا فایلی را تعیین می‌کند که هنگام متصل نبودن هیچ نشست فعالی پخش خواهد شد. اگر این گزینه ارائه نشود، به جای آن سکوت پخش می‌شود. فایل پشتیبان هر بار که آخرین نشست قطع شود، از ابتدا بازپخش می‌شود. پخش فایل پشتیبان به‌طور خودکار در یک حلقه تکرار می‌گردد. واحدهای زمان (Time units) TIME باید یکی از قالب‌های زیر را داشته باشد: 123ns; 1.23us; 1.23ms; 1.23s; 1.23m; 1.23h; واحدهای اندازه (Size units) SIZE باید یکی از قالب‌های زیر را داشته باشد: 123; 1.23K; 1.23M; 1.23G; مثال‌ها (EXAMPLES) مثال‌های نقطه پایانی (Endpoint examples) اتصال یک نقطه پایانی خام RTP روی تمام رابط‌های IPv4: $ roc-recv -vv -s rtp://0.0.0.0:10001 اتصال نقاط پایانی مبدأ، ترمیم و کنترل به تمامی رابط‌های IPv4 (به‌جز IPv6): $ roc-recv -vv -s rtp+rs8m://0.0.0.0:10001 -r rs8m://0.0.0.0:10002 \ -c rtcp://0.0.0.0:10003 اتصال نقاط پایانی مبدأ، ترمیم و کنترل به تمامی رابط‌های IPv6 (به‌جز IPv4): $ roc-recv -vv -s rtp+rs8m://[::]:10001 -r rs8m://[::]:10002 -c rtcp://[::]:10003 اتصال نقاط پایانی مبدأ، ترمیم و کنترل به یک رابط شبکهٔ خاص: $ roc-recv -vv -s rtp+rs8m://192.168.0.3:10001 -r rs8m://192.168.0.3:10002 \ -c rtcp://192.168.0.3:10003 اتصال نقاط پایانی به یک نشانی چندپخشی (multicast) خاص و پیوستن به یک گروه چندپخشی روی یک رابط شبکهٔ مشخص: $ roc-recv -vv -s rtp+rs8m://225.1.2.3:10001 -r rs8m://225.1.2.3:10002 \ -c rtcp://225.1.2.3:10003 \ --miface 192.168.0.3 اتصال دو مجموعه از نقاط پایانی مبدأ، ترمیم و کنترل (در کل شش نقطه پایانی): $ roc-recv -vv \ -s rtp+rs8m://192.168.0.3:10001 -r rs8m://192.168.0.3:10002 \ -c rtcp://192.168.0.3:10003 \ -s rtp+rs8m://198.214.0.7:10001 -r rs8m://198.214.0.7:10002 \ -c rtcp://198.214.0.7:10003 مثال‌های ورودی/خروجی (I/O examples) ارسال خروجی به دستگاه پیش‌فرض (بدون ذکر -o): $ roc-recv -vv -s rtp://0.0.0.0:10001 ارسال خروجی به دستگاه پیش‌فرض ALSA: $ roc-recv -vv -s rtp://0.0.0.0:10001 -o alsa://default ارسال خروجی به یک دستگاه خاص در PulseAudio: $ roc-recv -vv -s rtp://0.0.0.0:10001 -o pulse://alsa_input.pci-0000_00_1f.3.analog-stereo ارسال خروجی به یک فایل با قالب WAV (تشخیص قالب از طریق پسوند فایل): $ roc-recv -vv -s rtp://0.0.0.0:10001 -o file:./output.wav ارسال خروجی به یک فایل با قالب WAV (مشخص کردن قالب به‌صورت دستی): $ roc-recv -vv -s rtp://0.0.0.0:10001 -o file:./output.file --output-format wav ارسال خروجی به stdout با قالب WAV: $ roc-recv -vv -s rtp://0.0.0.0:10001 -o file:- --output-format wav >./output.wav ارسال خروجی به یک فایل با قالب WAV (مسیر مطلق): $ roc-recv -vv -s rtp://0.0.0.0:10001 -o file:///home/user/output.wav مشخص کردن فایل پشتیبان: $ roc-recv -vv -s rtp://0.0.0.0:10001 --backup file:./backup.wav اجبار یک نرخ مشخص روی دستگاه خروجی: $ roc-recv -vv -s rtp://0.0.0.0:10001 --rate=44100 انتخاب طرح FEC از نوع LDPC-Staircase: $ roc-recv -vv -s rtp+ldpc://0.0.0.0:10001 -r ldpc://0.0.0.0:10002 \ -c rtcp://0.0.0.0:10003 انتخاب تأخیر نشست کمتر: $ roc-recv -vv -s rtp://0.0.0.0:10001 --target-latency=50ms انتخاب تأخیر ورودی/خروجی و طول فریم کمتر: $ roc-recv -vv -s rtp://0.0.0.0:10001 \ --io-latency=20ms --frame-len 4ms تعیین دستی آستانه‌ها و مهلت‌های زمانی: $ roc-recv -vv -s rtp://0.0.0.0:10001 \ --target-latency=50ms --min-latency=40ms --max-latency 60ms \ --no-play-timeout=200ms --choppy-play-timeout=500ms تعیین دستی پارامترهای بازنمونه‌برداری: $ roc-recv -vv -s rtp://0.0.0.0:10001 \ --resampler-backend=speex --resampler-profile=high تعیین دستی پارامترهای تنظیم تأخیر: $ roc-recv -vv -s rtp://0.0.0.0:10001 \ --latency-backend=niq --latency-profile=gradual محیط (ENVIRONMENT) متغیرهای محیطی زیر پشتیبانی می‌شوند: NO_COLOR به‌طور پیش‌فرض، رنگی‌سازی ترمینال به‌صورت خودکار تشخیص داده می‌شود. این متغیر محیطی می‌تواند برای غیرفعال کردن رنگی‌سازی ترمینال روی یک رشته غیرخالی تنظیم شود. اولویت آن از گزینه --color کمتر است. FORCE_COLOR به‌طور پیش‌فرض، رنگی‌سازی ترمینال به‌صورت خودکار تشخیص داده می‌شود. این متغیر محیطی می‌تواند روی یک عدد صحیح مثبت تنظیم شود تا رنگی‌سازی ترمینال فعال/اجباری شود. اولویت آن از متغیر NO_COLOR و گزینه --color کمتر است. همچنین ببینید (SEE ALSO) roc-send(1)، و وب‌سایت Roc در https://roc-streaming.org گزارش باگ‌ها (BUGS) لطفاً هرگونه باگ پیدا شده را از طریق GitHub گزارش دهید (https://github.com/roc-streaming/roc-toolkit). نویسندگان (AUTHORS) برای دیدن فهرست نگه‌دارنده‌ها و مشارکت‌کنندگان، صفحه نویسندگان را در وب‌سایت ببینید (https://roc-streaming.org/toolkit/docs/about_project/authors.html). کپی‌رایت و تکثیر (COPYRIGHT) 2024، نویسندگان Roc Streaming Roc Toolkit 0.4 2024 ROC-RECV(1)