ROC-SEND(1) Roc Toolkit ROC-SEND(1)

roc-send - ارسال بی‌درنگ جریان صوتی

roc-send گزینه‌ها

خواندن جریان صوتی از یک دستگاه یا فایل صوتی و ارسال آن به گیرندهٔ دوردست.

نمایش راهنما و خروج
نمایش نسخه و خروج
افزایش سطح جزئیات گزارش (می‌تواند چندین بار استفاده شود)
فهرست کردن طرح‌واره‌ها (schemes) و قالب‌های پشتیبانی‌شده
نشانی URI فایل یا دستگاه ورودی
اجبار قالب فایل ورودی
نقطه پایانی (endpoint) منبع دوردست
نقطه پایانی ترمیم دوردست
نقطه پایانی کنترل دوردست
فعال‌سازی SO_REUSEADDR هنگام اتصال (bind) سوکت‌ها
تأخیر هدف، در واحدهای زمانی TIME
تأخیر هدف ضبط، در واحدهای زمانی TIME
حداکثر انحراف مجاز از تأخیر هدف، در واحدهای زمانی TIME
تعداد بسته‌های منبع در بلوک FEC
تعداد بسته‌های ترمیم در بلوک FEC
طول بستهٔ خروجی، در واحدهای زمانی TIME
مدت زمان فریم‌های داخلی، در واحدهای زمانی TIME
حداکثر اندازهٔ بسته، در واحدهای SIZE
حداکثر اندازهٔ فریم داخلی، در واحدهای SIZE
بازنویسی نرخ نمونه‌برداری ورودی، به هرتز (Hz)
تعیین اینکه کدام تأخیر در تنظیم‌کنندهٔ تأخیر استفاده شود (مقادیر ممکن="niq"، پیش‌فرض=`niq')
نمایهٔ تنظیم تأخیر (مقادیر ممکن="responsive"، "gradual"، "intact"، پیش‌فرض=`intact')
پشتانهٔ بازنمونه‌بردار (مقادیر ممکن="default"، "builtin"، "speex"، "speexdec"، پیش‌فرض=`default')
نمایهٔ بازنمونه‌بردار (مقادیر ممکن="low"، "medium"، "high"، پیش‌فرض=`medium')
فعال‌سازی درهم‌بافی (interleaving) بسته‌ها (پیش‌فرض=خاموش)
فعال‌سازی پروفایل‌بندی درونی (پیش‌فرض=خاموش)
تنظیم حالت گزارش رنگی برای خروجی 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://127.0.0.1:123
  • rtp://[::1]:123
  • rtcp://10.9.8.3:123

فهرست پروتکل‌های پشتیبانی‌شده را می‌توان با استفاده از گزینهٔ --list-supported دریافت کرد.

فیلد host باید یک FQDN (نام دامنه کامل)، نشانی IPv4، یا نشانی IPv6 درون قلاب‌ها (کروشه‌ها) باشد.

اگر پروتکل درگاه پیش‌فرضی را تعریف کرده باشد، فیلد port می‌تواند حذف شود؛ در غیر این صورت، الزامی است.

فیلدهای path و query تنها برای پروتکل‌هایی مجاز هستند که از آن‌ها پشتیبانی می‌کنند؛ برای نمونه RTSP.

اگر FEC فعال باشد، باید یک جفت نقطه پایانی مبدا (source) و تصحیح (repair) مشخص شود. این دو نقطه پایانی باید از پروتکل‌های سازگار استفاده کنند؛ برای مثال rtp+rs8m:// برای نقطه پایانی مبدا، و rs8m:// برای نقطه پایانی تصحیح. اگر FEC غیرفعال باشد، باید تنها یک نقطه پایانی مبدا ارائه شود.

پروتکل‌های مبدا و تصحیح پشتیبانی‌شده:

  • مبدا rtp://، تصحیح none (RTP خام بدون FEC)
  • مبدا rtp+rs8m://، تصحیح rs8m:// (RTP با Reed-Solomon FEC)
  • مبدا rtp+ldpc://، تصحیح ldpc:// (RTP با LDPC-Staircase FEC)

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

پروتکل‌های کنترلی پشتیبانی‌شده:

•
rtcp://

گزینهٔ --input نیازمند یک شناسه URI برای دستگاه یا فایل در یکی از قالب‌های زیر است:

  • DEVICE_TYPE://DEVICE_NAME -- دستگاه صوتی
  • DEVICE_TYPE://default -- دستگاه صوتی پیش‌فرض برای نوع دستگاه مشخص‌شده
  • file:///ABS/PATH -- مسیر مطلق فایل
  • file://localhost/ABS/PATH -- مسیر مطلق فایل (حالت جایگزین؛ تنها میزبان "localhost" پشتیبانی می‌شود)
  • file:/ABS/PATH -- مسیر مطلق فایل (حالت جایگزین)
  • file:REL/PATH -- مسیر نسبی فایل
  • file://- -- ورودی استاندارد (stdin)
  • file:- -- ورودی استاندارد (stdin) (حالت جایگزین)

مثال‌ها:

  • pulse://default
  • pulse://alsa_input.pci-0000_00_1f.3.analog-stereo
  • alsa://hw:1,0
  • file:///home/user/test.wav
  • file://localhost/home/user/test.wav
  • file:/home/user/test.wav
  • file:./test.wav
  • file:-

فهرست طرح‌واره‌ها (schemes) و قالب‌های فایل پشتیبانی‌شده را می‌توان با استفاده از گزینهٔ --list-supported دریافت کرد.

اگر گزینهٔ --input حذف شود، راه‌انداز (driver) و دستگاه پیش‌فرض انتخاب می‌شوند.

گزینهٔ --input-format می‌تواند برای اجبار قالب فایل ورودی به کار رود. اگر مشخص نشود، قالب فایل به‌طور خودکار تشخیص داده می‌شود. این گزینه هنگامی که ورودی stdin باشد، همواره الزامی است.

بخش مسیر در URI ارائه‌شده، percent-decoded (رمزگشایی درصدی) می‌شود. برای راحتی، نویسه‌های کدگذاری‌نشده نیز مجاز هستند، به‌جز این‌که % باید همواره به‌صورت %25 کدگذاری شود.

برای مثال، فایلی با نام /foo/bar%/[baz] می‌تواند با استفاده از هر یک از این URIها مشخص شود: file:///foo%2Fbar%25%2F%5Bbaz%5D و file:///foo/bar%25/[baz]..SS اسلات‌های چندگانه

می‌توان چندین مجموعه از نقاط پایانی را برای ارسال رسانه به چندین نشانی مشخص کرد.

این مجموعه‌های نقاط پایانی، اسلات (slot) نامیده می‌شوند. تمامی اسلات‌ها باید دارای مجموعه‌ای یکسان از انواع نقاط پایانی (source، repair و غیره) بوده و برای آن‌ها از پروتکل‌های یکسانی استفاده کنند.

اگر گزینهٔ --reuseaddr مشخص شود، گزینهٔ سوکت SO_REUSEADDR برای تمام سوکت‌ها فعال خواهد شد.

در TCP، این قابلیت امکان استفادهٔ مجدد و فوری از سوکت اخیراً بسته شده در وضعیت TIME_WAIT را فراهم می‌کند، که در صورت نیاز به راه‌اندازی سریع سرور می‌تواند مفید باشد.

در UDP، این قابلیت اجازه می‌دهد چندین فرایند به نشانی یکسانی متصل (bind) شوند، که در صورت استفاده از فعال‌سازی سوکت systemd می‌تواند کاربردی باشد.

صرف‌نظر از وضعیت این گزینه، SO_REUSEADDR هنگام اتصال به درگاه موقت (ephemeral port) همواره غیرفعال است.

ارسال فایل به گیرنده با یک نقطه پایانی RTP ساده:

$ roc-send -vv -i file:./input.wav -s rtp://192.168.0.3:10001

ارسال فایل به گیرنده با نقاط پایانی منبع (source)، ترمیم (repair) و کنترل (control) مبتنی بر IPv4:

$ roc-send -vv -i file:./input.wav -s rtp+rs8m://192.168.0.3:10001 \
    -r rs8m://192.168.0.3:10002 -c rtcp://192.168.0.3:10003

ارسال فایل به گیرنده با نقاط پایانی منبع (source)، ترمیم (repair) و کنترل (control) مبتنی بر IPv6:

$ roc-send -vv -i file:./input.wav -s rtp+rs8m://[2001:db8::]:10001 \
    -r rs8m://[2001:db8::]:10002 -r rtcp://[2001:db8::]:10003

ارسال فایل به دو گیرنده، هر یک با سه نقطه پایانی:

$ roc-send -vv \
    -i file:./input.wav \
    -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):

$ roc-send -vv -s rtp://192.168.0.3:10001

ضبط صدا از دستگاه پیش‌فرض ALSA:

$ roc-send -vv -s rtp://192.168.0.3:10001 -i alsa://default

ضبط صدا از یک دستگاه مشخص PulseAudio:

$ roc-send -vv -s rtp://192.168.0.3:10001 -i pulse://alsa_input.pci-0000_00_1f.3.analog-stereo

ارسال فایل WAV (تشخیص قالب بر اساس پسوند):

$ roc-send -vv -s rtp://192.168.0.3:10001 -i file:./input.wav

ارسال فایل WAV (تعیین دستی قالب):

$ roc-send -vv -s rtp://192.168.0.3:10001 -i file:./input.file --input-format wav

ارسال WAV از stdin:

$ roc-send -vv -s rtp://192.168.0.3:10001 -i file:- --input-format wav <./input.wav

ارسال فایل WAV (تعیین مسیر مطلق):

$ roc-send -vv -s rtp://192.168.0.3:10001 -i file:///home/user/input.wav

اجبار یک نرخ مشخص برای دستگاه ورودی:

$ roc-send -vv -s rtp://192.168.0.3:10001 --rate=44100

انتخاب طرح FEC از نوع LDPC-Staircase و اندازه بلوک بزرگ‌تر:

$ roc-send -vv -i file:./input.wav -s rtp+ldpc://192.168.0.3:10001 \
    -r ldpc://192.168.0.3:10002 -c ldpc://192.168.0.3:10003 \
    --nbsrc=1000 --nbrpr=500

انتخاب طول بسته کوچک‌تر:

$ roc-send -vv -i file:./input.wav -s rtp+ldpc://192.168.0.3:10001 \
    --packet-len 2500us

انتخاب تاخیر I/O کمتر و طول فریم کوتاه‌تر:

$ roc-send -vv -s rtp://192.168.0.3:10001 \
    --io-latency=20ms --frame-len 4ms

تعیین دستی پارامترهای نمونه‌برداری مجدد (resampling):

$ roc-send -vv -s rtp://192.168.0.3:10001 \
    --resampler-backend=speex --resampler-profile=high

انجام تنظیم تاخیر روی فرستنده به جای گیرنده:

$ roc-recv -vv -o pulse://default -s rtp+rs8m://0.0.0.0:10001 \
    -r rs8m://0.0.0.0:10002 -c rtcp://0.0.0.0:10003 \
    --latency-profile=intact --target-latency=200ms
$ roc-send -vv -i file:./input.wav -s rtp+rs8m://192.168.0.3:10001 \
    -r rs8m://192.168.0.3:10002 -c rtcp://192.168.0.3:10003 \
    --latency-profile=gradual --target-latency=200ms

متغیرهای محیطی زیر پشتیبانی می‌شوند:

به‌طور پیش‌فرض، رنگ‌آمیزی ترمینال به‌صورت خودکار تشخیص داده می‌شود. این متغیر محیطی می‌تواند روی یک رشتهٔ غیرخالی تنظیم شود تا رنگ‌آمیزی ترمینال غیرفعال گردد. تقدم آن از گزینهٔ --color کمتر است.
به‌طور پیش‌فرض، رنگ‌آمیزی ترمینال به‌صورت خودکار تشخیص داده می‌شود. این متغیر محیطی می‌تواند روی یک عدد صحیح مثبت تنظیم شود تا رنگ‌آمیزی ترمینال فعال/اجباری گردد. تقدم آن از متغیر NO_COLOR و گزینهٔ --color کمتر است.

roc-recv(1) و وب‌سایت Roc در https://roc-streaming.org

لطفاً هرگونه باگ پیدا شده را از طریق GitHub گزارش دهید (https://github.com/roc-streaming/roc-toolkit).

برای مشاهدهٔ فهرست نگهدارندگان و مشارکت‌کنندگان، صفحهٔ نویسندگان را در وب‌سایت ببینید (https://roc-streaming.org/toolkit/docs/about_project/authors.html).

2024، نویسندگان Roc Streaming

2024 Roc Toolkit 0.4