| FFMPEG-PROTOCOLS(1) | FFMPEG-PROTOCOLS(1) |
نام (NAME)
ffmpeg-protocols - پروتکلهای ورودی و خروجی در FFmpeg
توضیحات (DESCRIPTION)
این سند پروتکلهای ورودی و خروجی ارائهشده توسط کتابخانه libavformat را شرح میدهد.
گزینههای پروتکل (PROTOCOL OPTIONS)
کتابخانه libavformat برخی گزینههای عمومی سراسری را ارائه میدهد که میتوان آنها را روی همه پروتکلها تنظیم کرد. علاوه بر این، هر پروتکل ممکن است از گزینههای بهاصطلاح اختصاصی (private options) پشتیبانی کند که مختص همان مؤلفه هستند.
گزینهها را میتوان با تعیین -option value در ابزارهای FFmpeg، یا با تنظیم صریح مقدار در گزینههای "AVFormatContext" یا با استفاده از رابط برنامهنویسی libavutil/opt.h برای کاربردهای برنامهنویسی تنظیم کرد.
فهرست گزینههای پشتیبانیشده در ادامه آمده است:
- protocol_whitelist list (input)
- فهرستی جداشده با کاما (",") از پروتکلهای مجاز را تعیین میکند. مقدار "ALL" با همه پروتکلها مطابقت دارد. پروتکلهایی با پیشوند "-" غیرفعال میشوند. همه پروتکلها به صورت پیشفرض مجاز هستند، اما پروتکلهای مورد استفاده توسط یک پروتکل دیگر (پروتکلهای تودرتو) به یک زیرمجموعه خاص هر پروتکل محدود میشوند.
پروتکلها (PROTOCOLS)
پروتکلها عناصر پیکربندیشدهای در FFmpeg هستند که دسترسی به منابع نیازمند پروتکلهای خاص را امکانپذیر میسازند.
هنگامی که ساخت FFmpeg خود را پیکربندی میکنید، تمام پروتکلهای پشتیبانیشده به صورت پیشفرض فعال هستند. میتوانید با استفاده از گزینه پیکربندی "--list-protocols" فهرست تمام موارد موجود را مشاهده کنید.
میتوانید با استفاده از گزینه پیکربندی "--disable-protocols" تمام پروتکلها را غیرفعال کنید، و با استفاده از گزینه "--enable-protocol=PROTOCOL" یک پروتکل را به صورت انتخابی فعال نمایید، یا با استفاده از گزینه "--disable-protocol=PROTOCOL" یک پروتکل خاص را غیرفعال کنید.
گزینه -protocols در ابزارهای *ff فهرست پروتکلهای پشتیبانیشده را نمایش میدهد.
تمام پروتکلها گزینههای زیر را میپذیرند:
- rw_timeout
- حداکثر زمان انتظار برای تکمیل عملیات خواندن/نوشتن (شبکه)، بر حسب میکروثانیه.
در ادامه، شرح پروتکلهای موجود فعلی آمده است.
amqp
پروتکل Advanced Message Queueing Protocol (AMQP) نسخه 0-9-1 یک پروتکل ارتباطی انتشار-اشتراک (publish-subscribe) مبتنی بر کارگزار (broker) است.
برای پشتیبانی از AMQP، نرمافزار FFmpeg باید با --enable-librabbitmq کامپایل شود. یک کارگزار AMQP مجزا نیز باید اجرا شود. نمونهای از یک کارگزار متنباز AMQP، نرمافزار RabbitMQ است.
پس از راهاندازی کارگزار، یک کلاینت FFmpeg میتواند با استفاده از دستور زیر دادهها را به کارگزار استریم کند:
ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]
که در آن hostname و port (پیشفرض 5672 است) آدرس کارگزار است. کلاینت همچنین میتواند نام کاربری/رمز عبور (user/password) را برای احراز هویت تنظیم کند. پیشفرض هر دو فیلد "guest" است. نام میزبان مجازی روی کارگزار را میتوان با vhost تنظیم کرد. مقدار پیشفرض "/" است.
چندین مشترک میتوانند با استفاده از این دستور از کارگزار استریم دریافت کنند:
ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]
در RabbitMQ تمام دادههای منتشرشده به کارگزار از طریق یک تبادلگر (exchange) خاص عبور میکنند، و هر کلاینت مشترک دارای یک صف/بافر اختصاصیافته است. هنگامی که بستهای به exchange میرسد، ممکن است بسته به فیلدهای exchange و routing_key در صف کلاینت کپی شود.
گزینههای زیر پشتیبانی میشوند:
- exchange
- تبادلگر (exchange) مورد استفاده روی کارگزار را تعیین میکند. RabbitMQ دارای چندین تبادلگر از پیش تعریفشده است: "amq.direct" تبادلگر پیشفرض است، که در آن ناشر و مشترک باید دارای routing_key یکسان باشند؛ "amq.fanout" مشابه یک عملیات انتشار عمومی (broadcast) است (یعنی دادهها بدون توجه به routing_key به تمام صفهای روی تبادلگر fanout ارسال میشوند)؛ و "amq.topic" مشابه "amq.direct" است، اما تطبیق الگوهای پیچیدهتر را امکانپذیر میسازد (به مستندات RabbitMQ مراجعه کنید).
- routing_key
- کلید مسیریابی را تعیین میکند. مقدار پیشفرض "amqp" است. کلید مسیریابی در تبادلگرهای "amq.direct" و "amq.topic" برای تصمیمگیری درباره اینکه آیا بستهها در صف یک مشترک نوشته شوند یا خیر استفاده میشود.
- pkt_size
- حداکثر اندازه هر بسته ارسالی/دریافتی به کارگزار. مقدار پیشفرض 131072 است. حداقل 4096 و حداکثر هر مقدار بزرگی است (که با int قابل نمایش باشد). هنگام دریافت بستهها، این گزینه اندازه یک بافر داخلی در FFmpeg را تنظیم میکند. این مقدار باید برابر یا بزرگتر از اندازه بستههای منتشرشده به کارگزار باشد؛ در غیر این صورت پیام دریافتی ممکن است ناقص دریافت شود و باعث خطاهای رمزگشایی گردد.
- connection_timeout
- مهلت زمانی بر حسب ثانیه در طول اتصال اولیه به کارگزار. مقدار پیشفرض rw_timeout است، یا اگر rw_timeout تنظیم نشده باشد، ۵ ثانیه است.
- delivery_mode mode
- حالت تحویل هر پیام ارسالی به کارگزار را تنظیم میکند. مقادیر زیر پذیرفته میشوند:
- persistent
- حالت تحویل روی "persistent" (2) تنظیم میشود. این مقدار پیشفرض است. بسته به تنظیمات کارگزار، پیامها ممکن است روی دیسک کارگزار نوشته شوند.
- non-persistent
- حالت تحویل روی "non-persistent" (1) تنظیم میشود. پیامها در حافظه کارگزار باقی میمانند مگر اینکه کارگزار تحت فشار کمبود حافظه قرار گیرد.
async
پوشش پر کردن داده به صورت ناهمگام (asynchronous) برای جریان ورودی.
دادهها را در یک رشته (thread) پسزمینه پر میکند تا عملیات I/O از رشته demux جداسازی شود.
async:<URL> async:http://host/resource async:cache:http://host/resource
bluray
خواندن لیست پخش (playlist) دیسکهای BluRay.
گزینههای پذیرفتهشده عبارتند از:
- angle
- زاویه دید (angle) در BluRay
- chapter
- فصل شروع (1...N)
- playlist
- لیست پخش برای خواندن (BDMV/PLAYLIST/?????.mpls)
مثالها:
خواندن طولانیترین لیست پخش از BluRay سوارشده (mounted) در /mnt/bluray:
bluray:/mnt/bluray
خواندن زاویه ۲ از لیست پخش ۴ از BluRay سوارشده در /mnt/bluray، شروع از فصل ۲:
-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
cache
پوشش کشگذاری برای جریان ورودی.
جریان ورودی را در یک فایل موقت کش میکند. این قابلیت پرش/جستجو (seeking) را برای استریمهای زنده فراهم میآورد.
گزینههای پذیرفتهشده عبارتند از:
- read_ahead_limit
- میزان داده بر حسب بایت که در صورت عدم پشتیبانی از پرش/جستجو ممکن است جلوتر خوانده شود. محدوده از -1 تا INT_MAX است. مقدار -1 به معنای نامحدود است. پیشفرض 65536 است.
ساختار دستوری URL عبارت است از:
cache:<URL>
concat
پروتکل الحاق فیزیکی (concatenation).
خواندن و پرش/جستجو در چندین منبع به صورت متوالی، به گونهای که گویی یک منبع یکتا هستند.
نشانی اینترنتی (URL) پذیرفتهشده توسط این پروتکل ساختار زیر را دارد:
concat:<URL1>|<URL2>|...|<URLN>
که در آن URL1، URL2، ...، URLN نشانیهای اینترنتی منبعی هستند که باید به هم متصل شوند، و هر کدام ممکن است پروتکل متفاوتی را مشخص کنند.
به عنوان مثال برای خواندن دنبالهای از فایلهای split1.mpeg، split2.mpeg، split3.mpeg با استفاده از ffplay، دستور زیر را به کار ببرید:
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
توجه داشته باشید که ممکن است لازم باشد برای نویسه "|" که در بسیاری از پوستهها (shells) یک نویسه خاص است، نویسه گریز (backslash) قرار دهید.
concatf
پروتکل الحاق فیزیکی با استفاده از فهرستی از منابع که با شکست خط (line break) از هم جدا شدهاند.
خواندن و پرش/جستجو در چندین منبع به صورت متوالی، به گونهای که گویی یک منبع یکتا هستند.
نشانی اینترنتی (URL) پذیرفتهشده توسط این پروتکل ساختار زیر را دارد:
concatf:<URL>
که در آن URL نشانی حاوی فهرستی از منابع جداشده با شکست خط است که باید به هم متصل شوند، و هر یک ممکن است پروتکل متفاوتی را مشخص کند. نویسههای خاص باید با بکاسلش یا علامتهای نقلقول تکی (single quotes) گریز داده شوند. بخش "Quoting and escaping" در راهنمای ffmpeg-utils(1) را ببینید.
به عنوان مثال برای خواندن دنبالهای از فایلهای split1.mpeg، split2.mpeg، split3.mpeg که در خطوط جداگانه درون یک فایل split.txt فهرست شدهاند با ffplay، از این دستور استفاده کنید:
ffplay concatf:split.txt
که در آن split.txt حاوی خطوط زیر است:
split1.mpeg split2.mpeg split3.mpeg
crypto
پروتکل خواندن جریان رمزگذاریشده با AES.
گزینههای پذیرفتهشده عبارتند از:
- key
- بلوک باینری کلید رمزگشایی AES را از روی نمایش هگزادسیمال دادهشده تنظیم میکند.
- iv
- بلوک باینری بردار مقداردهی اولیه (IV) رمزگشایی AES را از روی نمایش هگزادسیمال دادهشده تنظیم میکند.
قالبهای URL پذیرفتهشده:
crypto:<URL> crypto+<URL>
data
دادهها به صورت درونخطی در URI. بخش http://en.wikipedia.org/wiki/Data_URI_scheme را ببینید.
برای مثال، برای تبدیل یک فایل GIF دادهشده به صورت درونخطی با ffmpeg:
ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
fd
پروتکل دسترسی به توصیفگر فایل (file descriptor).
ساختار دستوری پذیرفتهشده عبارت است از:
fd: -fd <file_descriptor>
اگر fd مشخص نشده باشد، به صورت پیشفرض توصیفگر فایل stdout برای نوشتن و stdin برای خواندن استفاده خواهد شد. بر خلاف پروتکل pipe، پروتکل fd در صورتی که مربوط به یک فایل معمولی باشد از قابلیت پرش/جستجو (seek) پشتیبانی میکند. به دلایل امنیتی، پروتکل fd از انتقال توصیفگر فایل از طریق URL پشتیبانی نمیکند.
این پروتکل گزینههای زیر را میپذیرد:
- blocksize
- حداکثر اندازه بلوک عملیات I/O را بر حسب بایت تنظیم میکند. مقدار پیشفرض "INT_MAX" است، که به عدم اعمال محدودیت بر اندازه بلوک درخواستی میانجامد. تنظیم این مقدار بر روی یک عدد منطقی و کم، زمان واکنش به درخواست قطع عملیات توسط کاربر را بهبود میبخشد، که در صورت کند بودن انتقال دادهها سودمند است.
- fd
- توصیفگر فایل را تنظیم میکند.
file
پروتکل دسترسی به فایل.
خواندن از یک فایل یا نوشتن در آن.
یک URL فایل میتواند ساختار زیر را داشته باشد:
file:<filename>
که در آن filename مسیر فایلی است که باید خوانده شود.
نشانی اینترنتی (URL) که پیشوند پروتکل نداشته باشد، به عنوان یک URL فایل در نظر گرفته میشود. بسته به نوع ساخت (build)، یک URL که شبیه به مسیرهای ویندوزی با حرف درایو در ابتدا باشد نیز به عنوان URL فایل فرض خواهد شد (معمولاً در ساختهای مربوط به سیستمهای شبهیونیکس اینگونه نیست).
به عنوان مثال برای خواندن از یک فایل input.mpeg با استفاده از ffmpeg دستور زیر را به کار ببرید:
ffmpeg -i file:input.mpeg output.mpeg
این پروتکل گزینههای زیر را میپذیرد:
- truncate
- در صورت تنظیم روی 1، فایلهای موجود هنگام نوشتن کوتاهسازی (truncate) میشوند. مقدار 0 از کوتاهسازی جلوگیری میکند. مقدار پیشفرض 1 است.
- blocksize
- حداکثر اندازه بلوک عملیات I/O را بر حسب بایت تنظیم میکند. مقدار پیشفرض "INT_MAX" است، که منجر به عدم اعمال محدودیت بر اندازه بلوک درخواستی میشود. تنظیم این مقدار بر روی یک عدد منطقی و کم، زمان واکنش به درخواست قطع عملیات توسط کاربر را بهبود میبخشد، که برای فایلهای روی رسانههای ذخیرهسازی کند مفید است.
- follow
- در صورت تنظیم روی 1، پروتکل در انتهای فایل خواندن را دوباره امتحان میکند و امکان خواندن فایلهایی را که هنوز در حال نوشته شدن هستند فراهم میسازد. برای خاتمه این فرایند، یا باید از گزینه rw_timeout استفاده کنید، یا از بازخورد وقفه (interrupt callback برای کاربران API) بهره ببرید. تنظیم این گزینه همچنین اندازه فایل گزارششده توسط سیستم فایل را نادیده میگیرد.
- seekable
- تعیین
میکند که
آیا قابلیت
پرش/جستجو
(seekability) برای
فایل اعلام
شود یا خیر.
مقدار 0 به
معنای
غیرقابل
پرش و مقدار
-1 به معنای
خودکار است
(قابل پرش
برای
فایلهای
عادی،
غیرقابل
پرش برای
پایپهای
نامگذاریشده).
بسیاری از دیماکسرها با منابع دارای قابلیت پرش و غیرقابل پرش به شکل متفاوتی رفتار میکنند؛ بازنویسی این گزینه ممکن است باز کردن برخی فایلها را به بهای از دست دادن برخی قابلیتها (مانند پرش دقیق) سرعت ببخشد.
- pkt_size
- حداکثر
اندازه
بسته مورد
استفاده
برای I/O فایل
را تعیین
میکند.
مقدار
کوچکتر
ممکن است
مصرف حافظه
را کاهش
دهد. مقدار
بزرگتر
ممکن است
نرخ گذردهی
(throughput) را
بهویژه در
سیستمهای
فایل تحت
شبکه
افزایش دهد.
برای خواندن، در صورت تنظیم صریح، اندازه بافر داخلی پیشفرض (32 کیلوبایت) را بازنویسی میکند و حداکثر میزان داده خواندهشده در هر عملیات را محدود میسازد.
برای نوشتن، این گزینه اندازه هر عملیات نوشتن را تعیین میکند. مقدار پیشفرض برای فایلهای معمولی 256 کیلوبایت و در غیر این صورت 32 کیلوبایت است.
ftp
پروتکل انتقال فایل یا FTP (File Transfer Protocol).
خواندن از منابع دوردست یا نوشتن در آنها با استفاده از پروتکل FTP.
ساختار دستوری زیر لازم است:
ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
این پروتکل گزینههای زیر را میپذیرد:
- timeout
- مهلت زمانی بر حسب میکروثانیه برای عملیات I/O سوکت که توسط عملیات سطح پایین زیرین استفاده میشود را تنظیم میکند. به صورت پیشفرض روی -1 تنظیم شده است، به این معنی که مهلت زمانی مشخص نشده است.
- ftp-user
- کاربری را برای احراز هویت در سرور FTP تعیین میکند. مقدار کاربر موجود در URL مربوط به FTP بر این گزینه اولویت دارد و آن را بازنویسی میکند.
- ftp-password
- رمز عبوری را برای احراز هویت در سرور FTP تعیین میکند. رمز عبور موجود در URL مربوط به FTP، یا در صورت تعیین نشدن کاربر با ftp-anonymous-password بر این گزینه اولویت دارد و آن را بازنویسی میکند.
- ftp-anonymous-password
- رمز عبور مورد استفاده هنگام ورود به عنوان کاربر ناشناس (anonymous). معمولاً باید از یک نشانی ایمیل استفاده شود.
- ftp-write-seekable
- قابلیت پرش/جستجو در اتصال را در طول انکود کنترل میکند. اگر روی 1 تنظیم شود فرض میشود منبع قابل پرش است، و اگر روی 0 تنظیم شود فرض میشود قابل پرش نیست. مقدار پیشفرض 0 است.
نکته: این پروتکل میتواند به عنوان خروجی استفاده شود، اما توصیه میشود این کار انجام نشود، مگر اینکه احتیاطهای خاصی صورت گرفته باشد (آزمایشها، پیکربندی سفارشی سرور و غیره). سرورهای مختلف FTP در طول عملیات پرش رفتار متفاوتی دارند. ابزارهای *ff ممکن است به دلیل محدودیتهای سرور، محتوای ناقصی تولید کنند.
gopher
پروتکل Gopher.
gophers
پروتکل Gophers.
پروتکل Gopher با کپسولهسازی TLS.
http
پروتکل انتقال ابرمتن یا HTTP (Hyper Text Transfer Protocol).
این پروتکل گزینههای زیر را میپذیرد:
- seekable
- قابلیت پیمایش (seekability) اتصال را کنترل میکند. اگر روی 1 تنظیم شود فرض میشود منبع قابل پیمایش است، اگر روی 0 تنظیم شود فرض میشود قابل پیمایش نیست، و اگر روی -1 تنظیم شود تلاش میکند تا قابل پیمایش بودن را به طور خودکار تشخیص دهد. مقدار پیشفرض -1 است.
- chunked_post
- اگر روی 1 تنظیم شود از Transfer-Encoding تکهتکه (chunked) برای ارسالهای POST استفاده میکند، پیشفرض 1 است.
- http_proxy
- پروکسی HTTP را برای تونل کردن تعیین میکند، مانند http://example.com:1234
- headers
- سرفصلهای سفارشی HTTP را تنظیم میکند؛ میتواند سرفصلهای پیشفرض داخلی را بازنویسی کند. مقدار باید رشتهای شامل کدگذاری سرفصلها باشد.
- content_type
- یک نوع محتوای (content type) مشخص را برای پیامهای POST یا برای حالت شنود (listen) تعیین میکند.
- user_agent
- سرفصل User-Agent را بازنویسی میکند. اگر مشخص نشود، پروتکل از رشتهای که ساخت libavformat را توصیف میکند استفاده خواهد کرد ("Lavf/<version>").
- referer
- سرفصل Referer را تنظیم میکند. سرفصل 'Referer: URL' را در درخواست HTTP میگنجاند.
- multiple_requests
- اگر روی 1 تنظیم شود از اتصالات پایدار (persistent connections) استفاده میکند، پیشفرض 0 است.
- request_size
- اندازه
درخواستهای
ارسالی را
محدود
میکند. این
گزینه برای
برخی
سرورهای
ناهنجار که
درخواستهای
محدوده (range requests)
بدون کران
را محدود (throttle)
میکنند و
همچنین
زمانهایی
که انتظار
پیمایش
مکرر وجود
دارد مفید
است. به طور
پیشفرض
غیرفعال
است (روی 0
تنظیم شده
است).
توجه داشته باشید که در صورت فعال کردن این گزینه، اکیداً توصیه میشود گزینه multiple_requests را نیز فعال کرده و همچنین short_seek_size را روی همان مقدار یا بیشتر تنظیم کنید. این کار به FFmpeg اجازه میدهد تا حد امکان از یک اتصال مجزای HTTP مجدداً استفاده کند.
- initial_request_size
- اندازه
درخواستهای
اولیه را
محدود
میکند.
مشابه
"request_size"
است، اما
فقط در طول
تجزیه
اولیه قالب
استفاده
میشود.
برای
قالبهایی
مانند MXF یا MOV
که در حین
تجزیه
سرفصل
نیازمند
پیمایشهای
مکرر هستند
مفید است.
تا زمانی
ادامه
مییابد که
دیمالتیپلکسر
یک درخواست
خواندن
بزرگتر از
این اندازه
(بدون
پیمایش در
این میان)
ارسال کند،
که پس از آن
پیادهسازی
طبق معمول
به ارسال
درخواستها
ادامه
خواهد داد.
به طور
پیشفرض
غیرفعال
است (روی 0
تنظیم شده
است).
توجه داشته باشید که در صورت فعال کردن این گزینه، اکیداً توصیه میشود گزینه multiple_requests را نیز فعال کرده و همچنین short_seek_size را روی همان مقدار یا بیشتر تنظیم کنید.
- post_data
- دادههای سفارشی HTTP POST را تعیین میکند.
- mime_type
- نوع MIME را صادر میکند.
- http_version
- شماره نسخه پاسخ HTTP را صادر میکند. معمولاً "1.0" یا "1.1".
- کوکیهایی را که باید در درخواستهای بعدی ارسال شوند تنظیم میکند. قالب هر کوکی همانند مقدار فیلد پاسخ HTTP به نام Set-Cookie است. چندین کوکی را میتوان با نویسه خط جدید از هم جدا کرد.
- icy
- اگر روی 1 تنظیم شود، فراداده ICY (SHOUTcast) را از سرور درخواست میکند. اگر سرور از این مورد پشتیبانی کند، فراداده باید توسط برنامه با خواندن گزینههای icy_metadata_headers و icy_metadata_packet بازیابی شود. مقدار پیشفرض 1 است.
- icy_metadata_headers
- اگر سرور از فراداده ICY پشتیبانی کند، این گزینه شامل سرفصلهای پاسخ HTTP ویژه ICY خواهد بود که با نویسههای خط جدید از هم جدا شدهاند.
- icy_metadata_packet
- اگر سرور از فراداده ICY پشتیبانی کند و icy روی 1 تنظیم شده باشد، این گزینه شامل آخرین بسته فراداده غیرخالی ارسالشده توسط سرور خواهد بود. برنامههای علاقهمند به بهروزرسانیهای فراداده در حین استریم باید آن را در فواصل زمانی منظم بررسی (poll) کنند.
- metadata
- یک دیکشنری صادرشده حاوی فراداده Icecast از جریان بیت را در صورت وجود تنظیم میکند. تنها با API زبان C کاربرد دارد.
- auth_type
- نوع احراز هویت HTTP را تنظیم میکند. گزینهای برای دایجِست (Digest) وجود ندارد، زیرا این روش ابتدا نیازمند دریافت پارامترهای نانس (nonce) از سرور است و برخلاف Basic نمیتواند بلافاصله استفاده شود.
- none
- نوع احراز هویت HTTP را به طور خودکار انتخاب میکند. این مقدار پیشفرض است.
- basic
- احراز هویت
پایه (basic) در HTTP
را انتخاب
میکند.
احراز هویت پایه یک رشته کدگذاریشده با Base64 ارسال میکند که حاوی نام کاربری و گذرواژه کلاینت است. Base64 نوعی رمزنگاری نیست و باید معادل ارسال نام کاربری و گذرواژه در قالب متن آشکار (clear text) در نظر گرفته شود (Base64 یک کدگذاری برگشتپذیر است). اگر منبعی نیاز به محافظت دارد، اکیداً استفاده از یک طرح احراز هویت دیگر به جز احراز هویت پایه را مد نظر قرار دهید. احراز هویت پایه باید همراه با HTTPS/TLS استفاده شود. بدون این بهبودهای امنیتی مضاعف، احراز هویت پایه نباید برای حفاظت از اطلاعات حساس یا ارزشمند به کار گرفته شود.
- send_expect_100
- یک سرفصل Expect: 100-continue برای POST ارسال میکند. اگر روی 1 تنظیم شود ارسال میکند، اگر روی 0 تنظیم شود ارسال نخواهد کرد، و اگر روی -1 تنظیم شود در صورت مناسب بودن تلاش میکند آن را ارسال کند. مقدار پیشفرض -1 است.
- location
- یک دیکشنری صادرشده حاوی مکان محتوا. تنها با API زبان C مفید است.
- offset
- آفست اولیه بایتی را تنظیم میکند.
- end_offset
- تلاش میکند تا درخواست را به بایتهای قبل از این آفست محدود کند.
- method
- هنگامی که
به عنوان
گزینه
کلاینت
استفاده
شود، متد HTTP
را برای
درخواست
تنظیم
میکند.
هنگامی که به عنوان گزینه سرور استفاده شود، متد HTTP مورد انتظار از سوی کلاینت(ها) را مشخص میکند. اگر متد HTTP مورد انتظار و متد دریافتی مطابقت نداشته باشند، پاسخ Bad Request به کلاینت داده خواهد شد. در صورت تنظیم نشدن، متد HTTP در حال حاضر بررسی نمیشود. این رفتار در آینده با تشخیص خودکار جایگزین خواهد شد.
- reconnect
- در صورت قطع اتصال پیش از رسیدن به EOF، اتصال مجدد را به طور خودکار برقرار میکند.
- reconnect_at_eof
- در صورت تنظیم، با eof همانند یک خطا رفتار میشود و سبب اتصال مجدد میگردد؛ این گزینه برای جریانهای زنده / بیپایان کاربرد دارد.
- reconnect_on_network_error
- در صورت بروز خطاهای TCP/TLS هنگام اتصال، اتصال مجدد را به طور خودکار برقرار میکند.
- reconnect_on_http_error
- فهرستی جداشده با کاما از کدهای وضعیت HTTP برای اتصال مجدد. این فهرست میتواند شامل کدهای وضعیت خاص (مانند '503') یا رشتههای '4xx' / '5xx' باشد.
- reconnect_streamed
- در صورت تنظیم، حتی جریانهای زنده و پیوسته/غیرقابلپیمایش نیز در زمان بروز خطا مجدداً متصل خواهند شد.
- reconnect_delay_max
- حداکثر تاخیر را بر حسب ثانیه تعیین میکند که پس از آن از اتصال مجدد صرفنظر میشود.
- reconnect_max_retries
- حداکثر تعداد دفعات تلاش مجدد برای اتصال را تنظیم میکند. به طور پیشفرض تنظیم نشده است.
- reconnect_delay_total_max
- حداکثر مجموع تاخیر را بر حسب ثانیه تنظیم میکند که پس از آن از اتصال مجدد صرفنظر میشود.
- respect_retry_after
- در صورت فعال بودن و مواجهه با سرفصل Retry-After، به جای استفاده از عقبنشینی نمایی، تاخیر اتصال مجدد درخواستشده در آن رعایت خواهد شد. برای خطاهای 429 و 503 مفید است. به طور پیشفرض فعال است.
- listen
- اگر روی 1
تنظیم شود
سرور
آزمایشی HTTP
را فعال
میکند. این
گزینه
میتواند
در هنگام
استفاده به
عنوان
گزینه
خروجی برای
ارسال
دادهها،
یا در هنگام
استفاده به
عنوان
گزینه
ورودی برای
خواندن
دادهها از
کلاینت با HTTP
POST استفاده
شود. اگر
روی 2 تنظیم
شود سرور
چندکلاینتی
آزمایشی HTTP
را فعال
میکند. این
قابلیت
هنوز در ffmpeg.c
پیادهسازی
نشده است و
بنابراین
نباید به
عنوان
گزینه خط
فرمان
استفاده
شود.
# Server side (sending): ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://<server>:<port> # Client side (receiving): ffmpeg -i http://<server>:<port> -c copy somefile.ogg # Client can also be done with wget: wget http://<server>:<port> -O somefile.ogg # Server side (receiving): ffmpeg -listen 1 -i http://<server>:<port> -c copy somefile.ogg # Client side (sending): ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://<server>:<port> # Client can also be done with wget: wget --post-file=somefile.ogg http://<server>:<port>
- resource
- منبع درخواستشده توسط یک کلاینت، در زمانی که سرور آزمایشی HTTP مورد استفاده است.
- reply_code
- کد HTTP بازگرداندهشده به کلاینت، در زمانی که سرور آزمایشی HTTP مورد استفاده است.
- short_seek_size
- آستانه را بر حسب بایت تنظیم میکند که چه زمانی یک پیشخوانی (readahead) باید بر پیمایش (seek) و درخواست جدید HTTP ترجیح داده شود. این قابلیت به عنوان مثال برای اطمینان از اینکه از همان اتصال برای خواندن بستههای بزرگ ویدیویی با بستههای کوچک صوتی در میان آنها استفاده میشود، سودمند است.
کوکیهای HTTP
برخی از درخواستهای HTTP رد خواهند شد مگر اینکه مقادیر کوکی همراه با درخواست ارسال شوند. گزینه cookies امکان تعیین این کوکیها را فراهم میکند. در کمترین حالت، هر کوکی باید یک مقدار را به همراه مسیر و دامنه مشخص کند. درخواستهای HTTP که با هر دوی دامنه و مسیر مطابقت داشته باشند، به طور خودکار مقدار کوکی را در فیلد سرفصل HTTP Cookie میگنجانند. چندین کوکی را میتوان با نویسه خط جدید از هم جدا کرد.
نحو مورد نیاز برای پخش جریانی با تعیین کوکی به این صورت است:
ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
Icecast
پروتکل Icecast (ارسال جریان به سرورهای Icecast)
این پروتکل گزینههای زیر را میپذیرد:
- ice_genre
- ژانر جریان را تعیین میکند.
- ice_name
- نام جریان را تعیین میکند.
- ice_description
- توضیحات جریان را تعیین میکند.
- ice_url
- نشانی اینترنتی وبسایت جریان را تعیین میکند.
- ice_public
- مشخص میکند که آیا جریان باید عمومی باشد یا خیر. پیشفرض 0 است (غیرعمومی).
- user_agent
- سرفصل User-Agent را بازنویسی میکند. در صورت عدم تعیین، رشتهای به شکل "Lavf/<version>" استفاده خواهد شد.
- password
- گذرواژه نقطه اتصال (mountpoint) در Icecast را تعیین میکند.
- content_type
- نوع محتوای جریان را تعیین میکند. اگر با audio/mpeg تفاوت داشته باشد باید تنظیم شود.
- legacy_icecast
- پشتیبانی از نسخههای Icecast کمتر از 2.4.0 را فعال میکند که از متد HTTP PUT پشتیبانی نمیکنند بلکه متد SOURCE را به کار میبرند.
- tls
- یک اتصال TLS (HTTPS) با Icecast برقرار میکند.
icecast://[<username>[:<password>]@]<server>:<port>/<mountpoint>
ipfs
پشتیبانی از پروتکل سامانه پرونده میانسیارهای یا IPFS (InterPlanetary File System). افراد میتوانند از طریق آنچه دروازه (gateway) نامیده میشود به پروندههای ذخیرهشده روی شبکه IPFS دسترسی پیدا کنند. اینها نقاط پایانی http(s) هستند. این پروتکل، پروتکلهای بومی IPFS (شامل ipfs:// و ipns://) را بستهبندی میکند تا به چنین دروازهای ارسال شوند. کاربران میتوانند (و باید) گره خود را میزبانی کنند، که به این معنی است که این پروتکل از دروازه محلی کاربر برای دسترسی به پروندهها در شبکه IPFS استفاده خواهد کرد.
این پروتکل گزینههای زیر را میپذیرد:
- gateway
- دروازه مورد استفاده را مشخص میکند. در صورت عدم تنظیم، پروتکل ابتدا با بررسی $IPFS_GATEWAY، $IPFS_PATH و "$HOME/.ipfs/" به همین ترتیب، تلاش میکند دروازه محلی را پیدا کند.
میتوان از این پروتکل به ۲ روش استفاده کرد. استفاده از IPFS:
ffplay ipfs://<hash>
یا پروتکل IPNS (که همان IPFS تغییرپذیر است):
ffplay ipns://<hash>
mmst
پروتکل MMS (Microsoft Media Server) بر روی TCP.
mmsh
پروتکل MMS (Microsoft Media Server) بر روی HTTP.
نحو مورد نیاز به این صورت است:
mmsh://<server>[:<port>][/<app>][/<playpath>]
md5
پروتکل خروجی MD5.
هش MD5 دادههای نوشتهشدنی را محاسبه میکند و در هنگام بستن، آن را در خروجی تعیینشده یا در صورت عدم تعیین در خروجی استاندارد (stdout) مینویسد. میتوان از آن برای آزمایش مالتیپلکسرها بدون نوشتن یک پرونده واقعی استفاده کرد.
در ادامه چند نمونه آمده است.
# Write the MD5 hash of the encoded AVI file to the file output.avi.md5. ffmpeg -i input.flv -f avi -y md5:output.avi.md5 # Write the MD5 hash of the encoded AVI file to stdout. ffmpeg -i input.flv -f avi -y md5:
توجه داشته باشید که برخی از قالبها (به ویژه MOV) نیاز دارند که پروتکل خروجی قابلیت پیمایش (seekable) داشته باشد، بنابراین با پروتکل خروجی MD5 با خطا مواجه میشوند.
pipe
پروتکل دسترسی به لوله (pipe) یونیکس.
خواندن و نوشتن از لولههای یونیکس.
نحو پذیرفتهشده به این صورت است:
pipe:[<number>]
اگر fd مشخص نشده باشد، number عددی متناظر با توصیفکننده پرونده (file descriptor) لوله است (به عنوان مثال 0 برای stdin، 1 برای stdout، و 2 برای stderr). اگر number مشخص نشده باشد، به طور پیشفرض توصیفکننده پرونده stdout برای نوشتن و stdin برای خواندن استفاده خواهد شد.
به عنوان مثال برای خواندن از stdin با ffmpeg:
cat test.wav | ffmpeg -i pipe:0 # ...this is the same as... cat test.wav | ffmpeg -i pipe:
برای نوشتن در stdout با ffmpeg:
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi # ...this is the same as... ffmpeg -i test.wav -f avi pipe: | cat > test.avi
این پروتکل گزینههای زیر را میپذیرد:
- blocksize
- حداکثر اندازه بلوک عملیات ورودی/خروجی (I/O) را بر حسب بایت تنظیم میکند. مقدار پیشفرض "INT_MAX" است، که به عدم محدود کردن اندازه بلوک درخواستی میانجامد. تنظیم این مقدار در سطحی به اندازه کافی کم، زمان واکنش به درخواست قطع کاربر را بهبود میبخشد که در صورت کند بودن انتقال دادهها بسیار ارزشمند است.
- fd
- توصیفکننده پرونده را تنظیم میکند.
توجه داشته باشید که برخی از قالبها (به ویژه MOV)، نیاز دارند که پروتکل خروجی قابلیت پیمایش (seekable) داشته باشد، بنابراین با پروتکل خروجی لوله با خطا مواجه میشوند.
prompeg
پروتکل FEC بر اساس Pro-MPEG Code of Practice #3 Release 2.
سازوکار Pro-MPEG CoP#3 FEC یک سازوکار تصحیح خطای رو به جلو (forward error correction) با بررسی توازن دو بعدی (2D parity-check) برای جریانهای انتقال MPEG-2 (Transport Streams) ارسالشده بر روی RTP است.
این پروتکل باید همراه با مالتیپلکسر "rtp_mpegts" و پروتکل "rtp" استفاده شود.
نحو مورد نیاز به این صورت است:
-f rtp_mpegts -fec prompeg=<option>=<val>... rtp://<hostname>:<port>
درگاههای UDP مقصد برای جریان FEC ستونی برابر با "port + 2" و برای جریان FEC سطری برابر با "port + 4" هستند.
این پروتکل گزینههای زیر را میپذیرد:
نمونه کاربرد:
-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://<hostname>:<port>
rist
پروتکل انتقال مطمئن جریان اینترنتی یا RIST (Reliable Internet Streaming Transport).
گزینههای پذیرفتهشده عبارتند از:
- rist_profile
- مقادیر پشتیبانیشده:
- buffer_size
- اندازه بافر داخلی RIST را برای ارسال مجدد دادهها بر حسب میلیثانیه تنظیم میکند. مقدار پیشفرض 0 است که به معنای پیشفرض librist (۱ ثانیه) میباشد. حداکثر مقدار ۳۰ ثانیه است.
- fifo_size
- اندازه fifo خروجی گیرنده librist بر حسب تعداد بستهها. این مقدار باید توانی از ۲ باشد. پیشفرض 8192 است (در مقایسه با مقدار پیشفرض 1024 در librist).
- overrun_nonfatal=1|0
- ادامه فعالیت در صورت سرریز بافر fifo در librist. مقدار پیشفرض 0 است.
- pkt_size
- حداکثر اندازه بسته برای ارسال دادهها را تعیین میکند. به طور پیشفرض 1316 است.
- log_level
- سطح لاگ (loglevel) را برای پیامهای لاگ RIST تنظیم میکند. فقط در صورتی نیاز به تنظیم این گزینه دارید که صراحتاً بخواهید پیامهای سطح دیباگ یا شبیهسازی از دست رفتن بسته را فعال کنید، در غیر این صورت از سطح لاگ عادی تبعیت میشود.
- secret
- جایگزینی کلید مخفی رمزنگاری را تنظیم میکند، به طور پیشفرض تنظیم نشده است.
- encryption
- نوع رمزنگاری را تعیین میکند، به طور پیشفرض غیرفعال است. مقادیر قابل قبول 128 و 256 هستند.
rtmp
پروتکل پیامرسانی بلادرنگ (Real-Time Messaging Protocol).
پروتکل پیامرسانی بلادرنگ (RTMP) برای پخش جاری (استریم) محتوای چندرسانهای روی شبکه TCP/IP استفاده میشود.
نحو مورد نیاز عبارت است از:
rtmp://[<username>:<password>@]<server>[:<port>][/<app>][/<instance>][/<playpath>]
پارامترهای پذیرفتهشده عبارتند از:
- username
- یک نام کاربری اختیاری (بیشتر برای انتشار).
- password
- یک گذرواژه اختیاری (بیشتر برای انتشار).
- server
- آدرس سرور RTMP.
- port
- شماره درگاه TCP مورد استفاده (به صورت پیشفرض 1935 است).
- app
- نام برنامهای است که قصد دسترسی به آن را دارید. این مقدار معمولاً مربوط به مسیری است که برنامه در سرور RTMP روی آن نصب شده است (مانند /ondemand/، /flash/live/ و غیره). شما میتوانید مقدار تجزیهشده از URI را از طریق گزینه rtmp_app نیز بازنویسی کنید.
- playpath
- مسیر یا نام منبعی است که باید با ارجاع به برنامه مشخصشده در app پخش شود؛ ممکن است پیشوند "mp4:" داشته باشد. همچنین میتوانید مقدار تجزیهشده از URI را از طریق گزینه rtmp_playpath نیز بازنویسی کنید.
- listen
- عمل کردن به عنوان سرور و گوش دادن برای اتصال ورودی.
- timeout
- حداکثر زمان انتظار برای اتصال ورودی. مستلزم listen است.
علاوه بر این، پارامترهای زیر را میتوان از طریق گزینههای خط فرمان (یا در کد از طریق "AVOption"ها) تنظیم کرد:
- rtmp_app
- نام برنامه برای اتصال در سرور RTMP. این گزینه پارامتر مشخصشده در URI را بازنویسی میکند.
- rtmp_buffer
- زمان بافر کلاینت را بر حسب میلیثانیه تنظیم میکند. مقدار پیشفرض 3000 است.
- rtmp_conn
- پارامترهای اتصال دلخواه اضافی AMF، تجزیهشده از یک رشته، مانند "B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0". هر مقدار با یک کاراکتر منفرد مشخصکننده نوع شروع میشود: B برای بولی (Boolean)، N برای عدد (number)، S برای رشته (string)، O برای شیء (object)، یا Z برای null، که به دنبال آن یک دونقطه قرار میگیرد. برای مقادیر بولی، داده باید برای FALSE یا TRUE به ترتیب 0 یا 1 باشد. به همین ترتیب برای شیءها نیز داده برای پایان دادن یا آغاز یک شیء باید به ترتیب 0 یا 1 باشد. آیتمهای داده در زیرشیءها میتوانند با قرار دادن پیشوند 'N' روی نوع داده و مشخص کردن نام قبل از مقدار، نامگذاری شوند (مانند "NB:myFlag:1"). از این گزینه میتوان چندین بار برای ساخت توالیهای AMF دلخواه استفاده کرد.
- rtmp_enhanced_codecs
- فهرست کدکهایی را مشخص میکند که کلاینت اعلام میکند در یک استریم enhanced RTMP از آنها پشتیبانی میکند. این گزینه باید روی فهرستی از مقادیر fourcc جداشده با کاما تنظیم شود، مانند "hvc1,av01,vp09" برای چندین کدک یا "hvc1" تنها برای یک کدک. فهرست مشخصشده در ویژگی "fourCcLive" از پیام Connect Command Message ارائه خواهد شد.
- rtmp_flashver
- نسخه افزونه فلش استفادهشده برای اجرای پخشکننده SWF. مقدار پیشفرض LNX 9,0,124,2 است. (هنگام انتشار، مقدار پیشفرض FMLE/3.0 (compatible; <libavformat version>) است.)
- rtmp_flush_interval
- تعداد بستههای تخلیهشده (flush شده) در همان درخواست (فقط در RTMPT). مقدار پیشفرض 10 است.
- rtmp_live
- مشخص میکند که رسانه یک جریان زنده است. هیچ ادامهدادن یا پرش زمانی (seek) در جریانهای زنده امکانپذیر نیست. مقدار پیشفرض "any" است، که به این معنی است که مشترک ابتدا تلاش میکند جریان زنده مشخصشده در playpath را پخش کند. اگر جریان زندهای با آن نام یافت نشود، جریان ضبطشده را پخش میکند. سایر مقادیر ممکن "live" و "recorded" هستند.
- rtmp_pageurl
- نشانی اینترنتی (URL) صفحه وبی که رسانه در آن جاسازی شده بود. به طور پیشفرض هیچ مقداری ارسال نخواهد شد.
- rtmp_playpath
- شناسه استریم برای پخش یا انتشار. این گزینه پارامتر مشخصشده در URI را بازنویسی میکند.
- rtmp_subscribe
- نام جریان زنده برای اشتراک در آن. به صورت پیشفرض هیچ مقداری ارسال نخواهد شد. این مقدار تنها در صورتی ارسال میشود که این گزینه مشخص شده باشد یا rtmp_live روی live تنظیم شده باشد.
- rtmp_swfhash
- هش SHA256 از فایل SWF از حالت فشرده خارجشده (32 بایت).
- rtmp_swfsize
- اندازه فایل SWF از حالت فشرده خارجشده، مورد نیاز برای SWFVerification.
- rtmp_swfurl
- نشانی اینترنتی (URL) پخشکننده SWF برای رسانه. به صورت پیشفرض هیچ مقداری ارسال نخواهد شد.
- rtmp_swfverify
- نشانی اینترنتی فایل swf پخشکننده، محاسبه خودکار هش/اندازه.
- rtmp_tcurl
- نشانی اینترنتی (URL) جریان هدف. پیشفرض آن proto://host[:port]/app است.
- tcp_nodelay=1|0
- تنظیم TCP_NODELAY
برای
غیرفعال
کردن
الگوریتم
نیگل (Nagle's algorithm).
مقدار
پیشفرض 0
است.
تذکر: نوشتن روی سوکت در حال حاضر برای به حداقل رساندن فراخوانیهای سیستمی بهینهسازی نشده است و کارایی / اثر TCP_NODELAY را کاهش میدهد.
- tcp_keepalive=1|0
- فعالسازی
سازوکار TCP keepalive
برای
شناسایی
همتاهای
قطعشده و
کمک به حفظ
اتصالات
غیرفعال
طولانیمدت.
مقدار
پیشفرض 0
است.
تنها گزینه پایهای keepalive یعنی (SO_KEEPALIVE) میتواند فعال یا غیرفعال شود. پارامترهای تنظیمی ویژه پلتفرم مانند TCP_KEEPIDLE، TCP_KEEPINTVL یا TCP_KEEPCNT قابل پیکربندی نیستند و از مقادیر پیشفرض سیستمعامل استفاده خواهند کرد.
برای مثال، جهت خواندن یک منبع چندرسانهای با نام "sample" از برنامه "vod" از یک سرور RTMP با نام "myserver" با استفاده از ffplay:
ffplay rtmp://myserver/vod/sample
برای انتشار در سروری که با گذرواژه محافظت شده است، با ارسال نامهای playpath و app به صورت جداگانه:
ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
rtmpe
پروتکل پیامرسانی بلادرنگ رمزگذاریشده (Encrypted Real-Time Messaging Protocol).
پروتکل پیامرسانی بلادرنگ رمزگذاریشده (RTMPE) برای پخش جاری محتوای چندرسانهای درون مبانی رمزنگاری استاندارد، متشکل از تبادل کلید دیفی-هلمن (Diffie-Hellman) و HMACSHA256، که یک جفت کلید RC4 تولید میکنند، استفاده میشود.
rtmps
پروتکل پیامرسانی بلادرنگ روی اتصال امن SSL.
پروتکل پیامرسانی بلادرنگ (RTMPS) برای پخش جاری محتوای چندرسانهای روی یک اتصال رمزگذاریشده استفاده میشود.
rtmpt
پروتکل پیامرسانی بلادرنگ تونلشده از طریق HTTP.
پروتکل پیامرسانی بلادرنگ تونلشده از طریق HTTP (به اختصار RTMPT) برای پخش جاری محتوای چندرسانهای درون درخواستهای HTTP جهت عبور از دیوارههای آتش (firewalls) استفاده میشود.
rtmpte
پروتکل پیامرسانی بلادرنگ رمزگذاریشده تونلشده از طریق HTTP.
پروتکل پیامرسانی بلادرنگ رمزگذاریشده تونلشده از طریق HTTP (به اختصار RTMPTE) برای پخش جاری محتوای چندرسانهای درون درخواستهای HTTP جهت عبور از دیوارههای آتش استفاده میشود.
rtmpts
پروتکل پیامرسانی بلادرنگ تونلشده از طریق HTTPS.
پروتکل پیامرسانی بلادرنگ تونلشده از طریق HTTPS (به اختصار RTMPTS) برای پخش جاری محتوای چندرسانهای درون درخواستهای HTTPS جهت عبور از دیوارههای آتش استفاده میشود.
libsmbclient
کتابخانه libsmbclient امکان کار با منابع شبکهای CIFS/SMB را فراهم میکند.
نحو زیر مورد نیاز است.
smb://[[domain:]user[:password@]]server[/share[/path[/file]]]
این پروتکل گزینههای زیر را میپذیرد.
- timeout
- مهلت زمانی (timeout) عملیات ورودی/خروجی سوکت استفادهشده توسط عملیات سطح پایین زیرین را بر حسب میلیثانیه تنظیم میکند. به صورت پیشفرض روی -1 تنظیم شده است، که به این معنی است که مهلت زمانی مشخص نشده است.
- truncate
- در صورت تنظیم روی 1، فایلهای موجود هنگام نوشتن کوتاه (truncate) میشوند. مقدار 0 از کوتاهسازی جلوگیری میکند. مقدار پیشفرض 1 است.
- workgroup
- گروه کاری (workgroup) استفادهشده برای برقراری اتصالات را تنظیم میکند. به طور پیشفرض گروه کاری مشخص نشده است.
برای اطلاعات بیشتر ببینید: http://www.samba.org.
libssh
پروتکل انتقال امن فایل از طریق libssh
خواندن از یا نوشتن در منابع راهدور با استفاده از پروتکل SFTP.
نحو زیر مورد نیاز است.
sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
این پروتکل گزینههای زیر را میپذیرد.
- timeout
- مهلت زمانی عملیات ورودی/خروجی سوکت استفادهشده توسط عملیات سطح پایین زیرین را تنظیم میکند. به صورت پیشفرض روی -1 تنظیم شده است، که به این معنی است که مهلت زمانی مشخص نشده است.
- truncate
- در صورت تنظیم روی 1، فایلهای موجود هنگام نوشتن کوتاه (truncate) میشوند. مقدار 0 از کوتاهسازی جلوگیری میکند. مقدار پیشفرض 1 است.
- private_key
- مسیر فایل حاوی کلید خصوصی را برای استفاده در حین اعتبارسنجی مشخص میکند. به صورت پیشفرض libssh کلیدها را در دایرکتوری ~/.ssh/ جستجو میکند.
مثال: پخش فایلی که روی سرور راهدور ذخیره شده است.
ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte
پروتکل پیامرسانی بلادرنگ و انواع مشتقشده از آن که از طریق librtmp پشتیبانی میشوند.
نیازمند وجود فایلهای سرآیند و کتابخانه librtmp در حین پیکربندی است. شما باید بیلد را به صورت صریح با "--enable-librtmp" پیکربندی کنید. در صورت فعال بودن، این کتابخانه جایگزین پروتکل بومی RTMP خواهد شد.
این پروتکل اکثر عملکردهای کلاینت و چند عملکرد سرور را که برای پشتیبانی از RTMP، پروتکل RTMP تونلشده در HTTP (RTMPT)، پروتکل رمزگذاریشده RTMP (RTMPE)، پروتکل RTMP روی SSL/TLS (RTMPS) و انواع تونلشده این نوعهای رمزگذاریشده (RTMPTE، RTMPTS) لازم است فراهم میکند.
نحو مورد نیاز عبارت است از:
<rtmp_proto>://<server>[:<port>][/<app>][/<playpath>] <options>
که در آن rtmp_proto یکی از رشتههای "rtmp"، "rtmpt"، "rtmpe"، "rtmps"، "rtmpte"، "rtmpts" متناظر با هر نوع RTMP است، و server، port، app و playpath همان معنای مشخصشده برای پروتکل بومی RTMP را دارند. options شامل فهرستی از گزینههای جداشده با فاصله به شکل key=val است.
برای اطلاعات بیشتر به صفحه راهنمای librtmp (دستور man 3 librtmp) مراجعه کنید.
برای مثال، جهت پخش جاری یک فایل به صورت بلادرنگ به یک سرور RTMP با استفاده از ffmpeg:
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
برای پخش همان استریم با استفاده از ffplay:
ffplay "rtmp://myserver/live/mystream live=1"
rtp
پروتکل انتقال بلادرنگ (Real-time Transport Protocol).
نحو مورد نیاز برای یک نشانی اینترنتی RTP عبارت است از:
rtp://<hostname>[:<port>][?<options>]
port درگاه RTP مورد استفاده را مشخص میکند.
options شامل فهرستی از گزینههای جداشده با & به فرم key=val است. برای گریز (escape) دادن کلیدها و مقادیر میتوان از درصد-کدگذاری استاندارد (و استفاده از علامت مثبت برای فاصله) استفاده کرد.
گزینهها را همچنین میتوان از طریق گزینههای خط فرمان (یا در کد از طریق "AVOption"ها) مشخص کرد.
فهرست گزینههای پشتیبانیشده در ادامه آمده است.
- ttl=n
- مقدار TTL (طول عمر - Time-To-Live) را تنظیم میکند (فقط برای چندپخشی/مالتیکست).
- rtcpport=n
- درگاه دوردست RTCP را روی n تنظیم میکند.
- localport, local_rtpport, localrtpport=n
- درگاه محلی
RTP را روی n
تنظیم
میکند.
استفاده از نام گزینه localport منسوخ شده است و نباید استفاده شود.
- local_rtcpport, localrtcpport=n'
- درگاه محلی RTCP را روی n تنظیم میکند.
- pkt_size=n
- حداکثر اندازه بسته (بر حسب بایت) را روی n تنظیم میکند.
- buffer_size=size
- حداکثر اندازه بافر سوکت UDP را بر حسب بایت تنظیم میکند.
- connect=0|1
- یک connect() روی سوکت UDP انجام میدهد (اگر روی 1 تنظیم شود) یا خیر (اگر روی 0 تنظیم شود).
- sources=ip[,ip]
- فهرست آدرسهای IP مجاز مبدأ.
- block=ip[,ip]
- فهرست آدرسهای IP غیرمجاز (مسدودشده) مبدأ.
- write_to_source=0|1
- بستهها را به آدرس مبدأ آخرین بسته دریافتشده ارسال میکند (اگر روی 1 تنظیم شود) یا به یک آدرس دوردست پیشفرض (اگر روی 0 تنظیم شود).
- localaddr=addr
- آدرس IP محلی یک رابط شبکه که برای ارسال بستهها یا پیوستن به گروههای چندپخشی (مالتیکست) استفاده میشود.
- timeout=n
- مهلت زمانی (بر حسب میکروثانیه) عملیات ورودی/خروجی سوکت را روی n تنظیم میکند.
نکات مهم:
- 1.
- اگر rtcpport تنظیم نشده باشد، درگاه RTCP روی مقدار درگاه RTP به علاوه ۱ تنظیم خواهد شد.
- 2.
- اگر localrtpport (درگاه محلی RTP) تنظیم نشده باشد، از هر درگاه در دسترسی برای درگاههای RTP و RTCP محلی استفاده خواهد شد.
- 3.
- اگر localrtcpport (درگاه محلی RTCP) تنظیم نشده باشد، روی مقدار درگاه RTP محلی به علاوه ۱ تنظیم خواهد شد.
rtsp
پروتکل استریم بیدرنگ (Real-Time Streaming Protocol).
از لحاظ فنی RTSP یک گرداننده پروتکل در libavformat نیست، بلکه یک دیماکسر (demuxer) و ماکسر (muxer) است. دیماکسر از هر دو حالت RTSP استاندارد (با دادههای منتقلشده روی RTP؛ که به عنوان مثال توسط Apple و Microsoft استفاده میشود) و Real-RTSP (با دادههای منتقلشده روی RDT) پشتیبانی میکند.
ماکسر میتواند برای ارسال یک استریم با استفاده از RTSP ANNOUNCE به سروری که از آن پشتیبانی میکند استفاده شود (در حال حاضر Darwin Streaming Server و سرور Mischa Spiegelmock در https://github.com/revmischa/rtsp-server).
نحو الزامی برای یک URL در RTSP عبارت است از:
rtsp://<hostname>[:<port>]/<path>
گزینهها را میتوان در خط فرمان ffmpeg/ffplay، یا در کد از طریق "AVOption"ها یا در "avformat_open_input" تنظیم کرد.
Muxer
گزینههای زیر پشتیبانی میشوند:
- rtsp_transport
- تنظیم
پروتکلهای
انتقال RTSP.
مقادیر زیر را میپذیرد:
- udp
- استفاده از UDP به عنوان پروتکل انتقال لایه زیرین.
- tcp
- استفاده از TCP (درهمتنیدگی درون کانال کنترلی RTSP) به عنوان پروتکل انتقال لایه زیرین.
مقدار پیشفرض 0 است.
- rtsp_flags
- تنظیم
فلگهای RTSP.
مقادیر زیر پذیرفته میشوند:
- latm
- استفاده از بستهبندی MP4A-LATM به جای MPEG4-GENERIC برای AAC.
- rfc2190
- استفاده از بستهبندی RFC 2190 به جای RFC 4629 برای H.263.
- skip_rtcp
- گزارشهای فرستنده RTCP ارسال نشوند.
- h264_mode0
- استفاده از حالت 0 برای H.264 در RTP.
- send_bye
- ارسال بستههای RTCP BYE هنگام پایان کار.
مقدار پیشفرض 0 است.
- min_port
- تنظیم حداقل پورت محلی UDP. مقدار پیشفرض 5000 است.
- max_port
- تنظیم حداکثر پورت محلی UDP. مقدار پیشفرض 65000 است.
- buffer_size
- تنظیم حداکثر اندازه بافر سوکت به بایت.
- pkt_size
- تنظیم حداکثر اندازه بسته ارسالی (به بایت). مقدار پیشفرض 1472 است.
Demuxer
گزینههای زیر پشتیبانی میشوند:
- initial_pause
- در صورت تنظیم روی 1، پخش استریم بلافاصله آغاز نمیشود. مقدار پیشفرض 0 است.
- rtsp_transport
- تنظیم
پروتکلهای
انتقال RTSP.
مقادیر زیر را میپذیرد:
- udp
- استفاده از UDP به عنوان پروتکل انتقال لایه زیرین.
- tcp
- استفاده از TCP (درهمتنیدگی درون کانال کنترلی RTSP) به عنوان پروتکل انتقال لایه زیرین.
- udp_multicast
- استفاده از چندپخشی (مالتیکست) UDP به عنوان پروتکل انتقال لایه زیرین.
- http
- استفاده از تونلزنی HTTP به عنوان پروتکل انتقال لایه زیرین، که برای عبور از پراکسیها مفید است.
- https
- استفاده از تونلزنی HTTPS به عنوان پروتکل انتقال لایه زیرین، که برای عبور از پراکسیها مفید است و کاربرد گستردهای در ملاحظات امنیتی دارد.
میتوان چندین پروتکل انتقال زیرین را مشخص کرد؛ در این حالت آنها یکییکی امتحان میشوند (اگر برپایی یکی شکست بخورد، پروتکل بعدی امتحان میشود). برای ماکسر، فقط گزینههای tcp و udp پشتیبانی میشوند.
- rtsp_flags
- تنظیم
فلگهای RTSP.
مقادیر زیر پذیرفته میشوند:
- filter_src
- پذیرش بستهها صرفاً از آدرس و پورت همتای (peer) توافقشده.
- listen
- عمل کردن به عنوان سرور و گوش دادن به اتصالات ورودی.
- prefer_tcp
- در صورتی که TCP برای انتقال RTP در RTSP در دسترس باشد، ابتدا TCP امتحان شود.
- satip_raw
- صادر کردن استریم خام MPEG-TS به جای دیماکس کردن. این فلگ صرفاً استریم خام را با PAT/PMT/PIDهای دستنخورده اصلی مینویسد.
مقدار پیشفرض none است.
- allowed_media_types
- تنظیم
انواع
رسانه مجاز
برای پذیرش
از سرور.
فلگهای زیر پذیرفته میشوند:
بهطور پیشفرض تمام انواع رسانه پذیرفته میشوند.
- min_port
- تنظیم حداقل پورت محلی UDP. مقدار پیشفرض 5000 است.
- max_port
- تنظیم حداکثر پورت محلی UDP. مقدار پیشفرض 65000 است.
- listen_timeout
- تنظیم حداکثر مهلت زمانی (به ثانیه) برای برقراری اتصال اولیه. تنظیم مقدار بزرگتر از صفر برای listen_timeout باعث تنظیم گزینه rtsp_flags روی listen میشود. مقدار پیشفرض -1 است که به معنی مهلت زمانی نامحدود در هنگام فعال بودن حالت listen میباشد.
- reorder_queue_size
- تنظیم تعداد بستهها در بافر برای مدیریت بستههای نامرتبشده.
- timeout
- تنظیم مهلت زمانی (timeout) ورودی/خروجی سوکت TCP به میکروثانیه.
- user_agent
- بازنویسی سربرگ User-Agent. اگر مشخص نشود، رشته شناسه libavformat به عنوان پیشفرض قرار میگیرد.
- buffer_size
- تنظیم حداکثر اندازه بافر سوکت به بایت.
هنگام دریافت داده روی UDP، دیماکسر تلاش میکند تا بستههای دریافتی را مرتب کند (چرا که ممکن است نامرتب برسند یا کاملاً مفقود شوند). این قابلیت را میتوان با تنظیم حداکثر تأخیر دیماکس روی صفر (از طریق فیلد "max_delay" در ساختار AVFormatContext) غیرفعال کرد.
هنگام تماشای استریمهای چند نرخبیتی Real-RTSP با استفاده از ffplay، استریمهای نمایشی را میتوان به ترتیب با "-vst" n و "-ast" n برای ویدیو و صدا مشخص کرد، و میتوان با فشردن کلیدهای "v" و "a" آنها را در حین پخش تغییر داد.
Examples
مثالهای زیر همگی از ابزارهای ffplay و ffmpeg بهره میبرند:
- تماشای یک
استریم روی
UDP با حداکثر
تأخیر
مرتبسازی
مجدد 0.5
ثانیه:
ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
- تماشای یک
استریم
تونلشده
روی HTTP:
ffplay -rtsp_transport http rtsp://server/video.mp4
- ارسال یک
استریم به
صورت
بلادرنگ به
سرور RTSP، جهت
تماشای
دیگران:
ffmpeg -re -i <input> -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
- دریافت یک
استریم به
صورت
بلادرنگ:
ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp <output>
sap
پروتکل اعلان نشست (Session Announcement Protocol - RFC 2974). این ساختار از نظر فنی یک گرداننده پروتکل در libavformat نیست، بلکه یک ماکسر و دیماکسر است. برای سیگنالدهی استریمهای RTP از طریق اعلان منظم SDP برای استریمها روی یک پورت مجزا استفاده میشود.
Muxer
نحو URL پروتکل SAP دادهشده به ماکسر عبارت است از:
sap://<destination>[:<port>][?<options>]
بستههای RTP به نشانی destination روی پورت port، یا پورت 5004 در صورت عدم تعیین پورت ارسال میشوند. پارامتر options فهرستی جداشده با "&" است. گزینههای زیر پشتیبانی میشوند:
- announce_addr=address
- تعیین آدرس IP مقصد برای ارسال اعلانها به آن. در صورت حذف، اعلانها به آدرس چندپخشی متداول اعلان SAP یعنی 224.2.127.254 (sap.mcast.net)، یا ff0e::2:7ffe در صورتی که destination یک آدرس IPv6 باشد ارسال میشوند.
- announce_port=port
- تعیین پورت برای ارسال اعلانها؛ در صورت مشخص نشدن به طور پیشفرض 9875 است.
- ttl=ttl
- تعیین مقدار طول عمر (TTL) برای اعلانها و بستههای RTP؛ مقدار پیشفرض 255 است.
- same_port=0|1
- در صورت تنظیم روی 1، تمام استریمهای RTP روی یک جفت پورت مشترک ارسال میشوند. اگر روی صفر باشد (مقدار پیشفرض)، هر استریم روی پورتی یکتا ارسال میشود، به طوری که هر استریم روی پورتی با 2 شماره بالاتر از استریم قبلی ارسال میگردد. ابزارهای VLC/Live555 برای دریافت استریم نیازمند این هستند که این گزینه روی 1 تنظیم شده باشد. پشته RTP در libavformat جهت دریافت، نیازمند آن است که تمام استریمها روی پورتهای یکتا ارسال شوند.
خطوط فرمان نمونه در ادامه آمده است:
برای پخش همگانی (برودکست) یک استریم روی زیرشبکه محلی جهت مشاهده در VLC:
ffmpeg -re -i <input> -f sap sap://224.0.0.255?same_port=1
به طور مشابه، برای تماشا در ffplay:
ffmpeg -re -i <input> -f sap sap://224.0.0.255
و برای تماشا در ffplay، روی بستر IPv6:
ffmpeg -re -i <input> -f sap sap://[ff0e::1:2:3:4]
Demuxer
نحو URL پروتکل SAP دادهشده به دیماکسر عبارت است از:
sap://[<address>][:<port>]
پارامتر address آدرس چندپخشی برای گوش دادن به اعلانها است؛ در صورت حذف، آدرس پیشفرض 224.2.127.254 (sap.mcast.net) استفاده میشود. پارامتر port پورتی است که روی آن گوش داده میشود؛ در صورت حذف 9875 است.
دیماکسر روی آدرس و پورت مشخصشده به اعلانها گوش میدهد. به محض دریافت یک اعلان، سعی میکند آن استریم خاص را دریافت کند.
خطوط فرمان نمونه در ادامه آمده است:
برای پخش اولین استریم اعلانشده روی آدرس چندپخشی معمول SAP:
ffplay sap://
برای پخش اولین استریم اعلانشده روی آدرس چندپخشی پیشفرض IPv6 برای SAP:
ffplay sap://[ff0e::2:7ffe]
sctp
پروتکل انتقال کنترل جریان (Stream Control Transmission Protocol).
نحو URL پذیرفتهشده عبارت است از:
sctp://<host>:<port>[?<options>]
شناسه options شامل فهرستی از گزینهها به فرم key=val است که با علامت & از یکدیگر جدا شدهاند. برای گریز دادن (escape کردن) کلیدها و مقادیر میتوان از کدگذاری استاندارد درصدی (و علامت مثبت برای فاصله) استفاده کرد.
گزینهها را میتوان از طریق گزینههای خط فرمان (یا در کد با "AVOption"ها) نیز تعیین نمود.
فهرست گزینههای پشتیبانیشده به شرح زیر است:
- listen
- در صورت تنظیم روی هر مقداری، برای اتصال ورودی گوش میدهد. اتصال خروجی به صورت پیشفرض انجام میشود.
- max_streams
- تنظیم حداکثر تعداد استریمها. بهطور پیشفرض هیچ محدودیتی تعیین نشده است.
shared
پوشش کش (cache wrapper) امن در برابر ریسه (Thread-safe)، پایدار و میانفرایندی برای استریمهای ورودی. استریم ورودی را در فایلی درون دایرکتوری مشخصشده کش میکند. این پروتکل شبیه به cache است، با این تفاوت که یک کش پایدار روی دیسک دارد که میتواند بین چندین فرایند یا دیماکسر حتی به صورت همزمان به اشتراک گذاشته شود.
نام فایل کش از درهمسازی (هش کردن) URL ورودی به دست میآید؛ بنابراین اگر یک URL یکسان برای محتواهای مختلف استفاده شود (مثلاً در نتیجه استفاده از دادههای POST اضافی برای انتخاب شناسه استریم)، مقداری خطر تداخل وجود دارد. برای جلوگیری از این مشکل، اطمینان حاصل کنید که از این پروتکل صرفاً برای URLهایی استفاده میکنید که محتوا را به شکل یکتا شناسایی میکنند؛ در غیر این صورت ممکن است ترکیبی بههمریخته از منابع دریافت کنید.
گزینههای پذیرفتهشده عبارتند از:
- cache_dir
- مسیر دایرکتوری محل ذخیره فایلهای کش. این گزینه الزامی است.
- block_shift
- ضریب تغییر مکان (log2) اندازه بلوک مورد استفاده برای خواندن/نوشتنهای داخلی. مقدار پیشفرض 15 است، یعنی بلوکهای 32 کیلوبایتی. اگر این مقدار با مقداری که هنگام ایجاد فایل کش موجود مشخص شده مطابقت نداشته باشد، مقدار مشخصشده قبلی به جای آن استفاده خواهد شد.
- read_only
- اگر در حالت true باشد، از کش مشترک برای خواندن استفاده میکند اما هیچ بلوک جدیدی روی آن نمینویسد. مقدار پیشفرض false است. توجه داشته باشید که حتی با فعال بودن این گزینه، اگر فایل کش از قبل وجود نداشته باشد، مقداردهی اولیه خواهد شد.
- cache_verify
- اگر در حالت true باشد، هر دادهای که از کش خوانده میشود را در برابر استریم ورودی زیرین اعتبارسنجی کرده و هرگونه عدم تطابق را گزارش میدهد. توجه داشته باشید که این کار عملاً لایه کش را بیفایده میسازد. این صرفاً یک گزینه برای اشکالزدایی (دیباگ) است.
- cache_timeout
- در صورت
تنظیم روی
یک مقدار
غیرصفر،
حداکثر
زمان (به
میکروثانیه)
را برای
انتظار در
دسترس قرار
گرفتن
دادهها
مشخص
میکند، در
صورتی که
فرایند
دیگری
همزمان در
تلاش برای
دریافت و کش
کردن همان
بلوک باشد.
اگر این
مهلت زمانی
به پایان
برسد، فرض
میشود که
فرایند
دیگر ممکن
است در این
فاصله
متوقف شده
یا مرده
باشد.
اگر روی صفر تنظیم شود، هیچ انتظاری انجام نمیشود و تمام فرایندها بلافاصله برای واکشی همان بلوکهای مفقود توسط خودشان به رقابت میپردازند. مقدار پیشفرض 10000 (10 میلیثانیه) است.
- retry_errors
- اگر در حالت true باشد (حالت پیشفرض)، خطاهای موقت خواندن از استریم ورودی زیرین نادیده گرفته شده و مجدداً تلاش میشود. اگر false باشد، با هر بلوکی که خواندن از آن پیشتر ناموفق بوده به عنوان غیرقابل دسترسی دائمی رفتار خواهد شد.
سینتکس URL به صورت زیر است:
shared:<URL>
srt
پروتکل Haivision Secure Reliable Transport Protocol از طریق libsrt.
سینتکس پشتیبانیشده برای نشانی وب SRT عبارت است از:
srt://<hostname>:<port>[?<options>]
عبارت options شامل فهرستی از گزینههای جداشده با & به صورت key=val است. میتوان از کدگذاری درصدی استاندارد (و استفاده از علامت مثبت برای فاصله) جهت گریز دادن (escape) کلیدها و مقادیر استفاده کرد.
گزینهها همچنین میتوانند از طریق گزینههای خط فرمان (یا در کد از طریق "AVOption"ها) مشخص شوند.
فهرست گزینههای پشتیبانیشده در ادامه آمده است.
- connect_timeout=milliseconds
- مهلت زمانی اتصال؛ در صورت RTT > 1500 میلیثانیه (۲ تبادل دستتکانی / handshake)، با مهلت زمانی پیشفرض اتصال ۳ ثانیهای، SRT نمیتواند متصل شود. این گزینه برای حالتهای اتصال caller و rendezvous اعمال میشود. مهلت زمانی اتصال، ۱۰ برابر مقدار تنظیمشده برای حالت rendezvous است (که میتواند به عنوان یک راهکار موقت برای این مشکل اتصال در نسخههای قبلی به کار رود).
- ffs=bytes
- اندازه پرچم پرواز یا Flight Flag Size (اندازه پنجره)، بر حسب بایت. FFS در واقع یک پارامتر داخلی است و نباید آن را کمتر از recv_buffer_size و mss تنظیم کنید. مقدار پیشفرض نسبتاً بزرگ است، بنابراین مگر اینکه بافر گیرنده بسیار بزرگی تنظیم کرده باشید، نیازی به تغییر این گزینه ندارید. مقدار پیشفرض ۲۵۶۰۰ است.
- inputbw=bytes/seconds
- نرخ ورودی اسمی فرستنده، بر حسب بایت در ثانیه. به همراه oheadbw، هنگامی که maxbw روی نسبی (0) تنظیم شده باشد، برای محاسبه حداکثر نرخ ارسال در زمانی که بستههای بازیابی به همراه جریان رسانهای اصلی ارسال میشوند، استفاده میشود: inputbw * (100 + oheadbw) / 100 اگر inputbw تنظیم نشده باشد در حالی که maxbw روی نسبی (0) تنظیم است، نرخ ورودی واقعی در داخل کتابخانه ارزیابی میشود. مقدار پیشفرض 0 است.
- iptos=tos
- نوع سرویس IP (IP Type of Service). فقط برای فرستنده اعمال میشود. مقدار پیشفرض 0xB8 است.
- ipttl=ttl
- طول عمر IP (IP Time To Live). فقط برای فرستنده اعمال میشود. مقدار پیشفرض ۶۴ است.
- latency=microseconds
- تأخیر تحویل بسته بر اساس برچسب زمانی (Timestamp-based Packet Delivery Delay). برای خنثی کردن هجومهای ناشی از ارسال مجدد بستههای از دست رفته استفاده میشود. این پرچم، هر دو گزینه rcvlatency و peerlatency را روی یک مقدار تنظیم میکند. توجه داشته باشید که پیش از نسخه 1.3.0 این تنها گزینه برای تنظیم تأخیر بود؛ با این حال این کار عملاً معادل تنظیم peerlatency در سمتی که فرستنده است و rcvlatency در سمتی که گیرنده است میباشد، و ارسال جریان دوطرفه پشتیبانی نمیشود.
- listen_timeout=microseconds
- تنظیم مهلت زمانی گوش دادن (listen timeout) سوکت.
- maxbw=bytes/seconds
- حداکثر پهنای باند ارسال، بر حسب بایت در ثانیه. -1 نامحدود (محدودیت CSRTCC برابر 30mbps است) 0 نسبی نسبت به نرخ ورودی (به inputbw مراجعه کنید) >0 مقدار حد مطلق مقدار پیشفرض 0 (نسبی) است.
- mode=caller|listener|rendezvous
- حالت اتصال. caller اتصال کلاینت را باز میکند. listener سرور را برای گوش دادن به اتصالات ورودی راهاندازی میکند. rendezvous از حالت اتصال Rendez-Vous استفاده میکند. مقدار پیشفرض caller است.
- mss=bytes
- حداکثر اندازه سگمنت (Maximum Segment Size)، بر حسب بایت. برای تخصیص بافر و محاسبه نرخ با استفاده از شمارنده بسته با فرض بستههای کاملاً پر استفاده میشود. کوچکترین MSS میان دو طرف ارتباط استفاده میشود. این مقدار به طور پیشفرض در کل اینترنت ۱۵۰۰ است. این حداکثر اندازه بسته UDP است و تنها میتواند کاهش یابد، مگر اینکه تنظیمات شبکه اختصاصی غیرمعمولی داشته باشید. مقدار پیشفرض ۱۵۰۰ است.
- nakreport=1|0
- اگر روی 1 تنظیم شود، گیرنده پیامهای `UMSG_LOSSREPORT` را به صورت دورهای ارسال میکند تا زمانی که بسته گمشده مجدداً ارسال شود یا به طور عمدی دور انداخته شود. مقدار پیشفرض 1 است.
- oheadbw=percents
- سربار پهنای باند بازیابی فراتر از نرخ ورودی، بر حسب درصد. به inputbw مراجعه کنید. مقدار پیشفرض 25% است.
- passphrase=string
- رشته عبارت عبور (Passphrase) رمزگذاری/رمزگشایی HaiCrypt، با طول ۱۰ تا ۷۹ نویسه. عبارت عبور، راز مشترک میان فرستنده و گیرنده است. از آن برای تولید کلید رمزگذاری کلید (Key Encrypting Key) با استفاده از PBKDF2 (تابع مشتقسازی کلید مبتنی بر گذرواژه) استفاده میشود. این گزینه تنها در صورتی استفاده میشود که pbkeylen غیر صفر باشد. در سمت گیرنده نیز تنها در صورتی استفاده میشود که دادههای دریافتشده رمزگذاری شده باشند. عبارت عبور پیکربندیشده قابل بازیابی نیست (فقطنوشتنی / write-only).
- enforced_encryption=1|0
- اگر true باشد، هر دو طرف اتصال باید رمز عبور یکسانی تنظیم کرده باشند (از جمله خالی، یعنی بدون رمزگذاری). اگر رمز عبور تطابق نداشته باشد یا تنها یک طرف رمزگذاری نشده باشد، اتصال رد میشود. پیشفرض true است.
- kmrefreshrate=packets
- تعداد بستههایی که باید ارسال شوند و پس از آن، کلید رمزگذاری به یک کلید جدید تعویض میشود. پیشفرض -1 است. -1 به معنای خودکار (0x1000000 در کتابخانه srt) است. دامنه این گزینه، اعداد صحیح در بازه 0 - "INT_MAX" است.
- kmpreannounce=packets
- بازه زمانی (تعداد بسته) میان زمان ارسال کلید رمزگذاری جدید و زمانی که تعویض کلید رخ میدهد. این مقدار همچنین برای بازه بعدی میان زمان وقوع تعویض کلید و زمانی که کلید رمزگذاری قدیمی از رده خارج میشود اعمال میگردد. پیشفرض -1 است. -1 به معنای خودکار (0x1000 در کتابخانه srt) است. دامنه این گزینه، اعداد صحیح در بازه 0 - "INT_MAX" است.
- snddropdelay=microseconds
- تأخیر
اضافی
فرستنده
قبل از دور
انداختن
بستهها.
این تأخیر
به مقدار
بازه زمانی
پیشفرض
تأخیر دور
انداختن
اضافه
میشود.
مقدار ویژه -1: به هیچ وجه بستهها در سمت فرستنده دور انداخته نشوند.
- payload_size=bytes
- حداکثر اندازه اعلامشده بستهای را که در طول یک فراخوانی واحد به تابع ارسال در حالت Live منتقل میشود، تنظیم میکند. اگر از این مقدار استفاده نمیشود از 0 استفاده کنید (که در حالت file پیشفرض است). پیشفرض -1 (خودکار) است که معمولاً به معنای MPEG-TS میباشد؛ اگر قصد دارید از SRT برای ارسال هر نوع بار داده (payload) متفاوتی استفاده کنید، مانند قرار دادن یک جریان زنده در فریمهای بسیار کوچک، میتوانید از حداکثر اندازه فریم بزرگتری استفاده کنید، اگرچه نباید از ۱۴۵۶ بایت بیشتر باشد.
- pkt_size=bytes
- نام مستعار برای payload_size.
- peerlatency=microseconds
- مقدار تأخیر (همانطور که در rcvlatency شرح داده شد) که توسط سمت فرستنده به عنوان حداقل مقدار برای گیرنده تنظیم میشود.
- pbkeylen=bytes
- طول کلید رمزگذاری فرستنده، بر حسب بایت. تنها میتواند روی 0، 16، 24 و 32 تنظیم شود. در صورت غیر صفر بودن، رمزگذاری فرستنده را فعال میکند. در سمت گیرنده الزامی نیست (روی 0 تنظیم شود)، اندازه کلید در دستتکانی HaiCrypt از فرستنده دریافت میشود. مقدار پیشفرض 0 است.
- rcvlatency=microseconds
- مدت زمانی که باید از لحظه ارسال بسته تا لحظه تحویل آن به برنامه گیرنده در تابع دریافت سپری شود. این زمان باید یک زمان بافر به اندازه کافی بزرگ باشد تا زمان صرفشده برای ارسال، زمان RTT به طور غیرمنتظره طولانیشده، و زمان مورد نیاز برای ارسال مجدد بسته گمشده UDP را پوشش دهد. مقدار تأخیر مؤثر برابر با بیشینه مقدار این گزینه و مقدار peerlatency تعیینشده توسط طرف مقابل خواهد بود. قبل از نسخه 1.3.0 این گزینه تنها به عنوان latency در دسترس بود.
- recv_buffer_size=bytes
- تنظیم اندازه بافر دریافت UDP، بر حسب بایت.
- send_buffer_size=bytes
- تنظیم اندازه بافر ارسال UDP، بر حسب بایت.
- timeout=microseconds
- تنظیم مهلتهای زمانی بروز خطا برای عملیات خواندن، نوشتن و اتصال. توجه داشته باشید که کتابخانه SRT دارای مهلتهای زمانی داخلی است که میتوانند به صورت جداگانه کنترل شوند؛ مقدار تعیینشده در اینجا صرفاً سقفی برای آنهاست.
- tlpktdrop=1|0
- دور انداختن بسته بسیار دیرهنگام (Too-late Packet Drop). هنگام فعال بودن در گیرنده، از بستههای مفقودشدهای که به موقع تحویل داده نشدهاند صرفنظر میکند و هنگامی که زمان پخش (time-to-play) آنها فرا برسد، بستههای بعدی را به برنامه تحویل میدهد. همچنین یک ACK جعلی به فرستنده ارسال میکند. هنگام فعال بودن در فرستنده و فعال بودن در گیرنده مقابل، فرستنده بستههای قدیمیتری را که هیچ شانسی برای تحویل به موقع ندارند، دور میاندازد. در صورتی که گیرنده از آن پشتیبانی کند، به طور خودکار در فرستنده فعال میشد.
- sndbuf=bytes
- تنظیم اندازه بافر ارسال، بر حسب بایت.
- rcvbuf=bytes
- تنظیم
اندازه
بافر
دریافت، بر
حسب بایت.
بافر دریافت نباید بزرگتر از ffs باشد.
- lossmaxttl=packets
- مقداری که تحمل جابهجایی و تغییر ترتیب (Reorder Tolerance) میتواند تا آن حد افزایش یابد. هنگامی که Reorder Tolerance بزرگتر از 0 باشد، گزارش از دست رفتن بسته تا زمانی که آن تعداد بسته دریافت شوند به تأخیر میافتد. Reorder Tolerance هر بار که یک بسته «دیررس» وارد شود که به دلیل ارسال مجدد نبوده است (یعنی زمانی که بستههای UDP تمایل دارند نامنظم برسند)، به میزان اختلاف میان آخرین توالی و شماره توالی این بسته و نه بیشتر از مقدار این گزینه، افزایش مییابد. به طور پیشفرض این مقدار 0 است، به این معنی که این سازوکار خاموش است و گزارش از دست رفتن همواره بلافاصله پس از مواجهه با یک «فاصله» در توالیها ارسال میشود.
- minversion
- حداقل نسخه
SRT مورد نیاز
از طرف
مقابل.
اتصال به
طرفی که
شرایط
حداقل نسخه
را برآورده
نکند، رد
خواهد شد.
فرمت نسخه در مبنای شانزده (hex) به صورت 0xXXYYZZ برای شکل قابلخواندن انسانی x.y.z است.
- streamid=string
- رشتهای محدود به ۵۱۲ نویسه که میتواند پیش از برقراری اتصال روی سوکت تنظیم شود. این شناسه جریان (stream ID) میتواند توسط سمت شنونده (listener) از سوکتی که از srt_accept برگردانده شده و توسط سوکتی با این شناسه جریانِ تنظیمشده متصل شده است، بازیابی شود. پروتکل SRT هیچ تفسیر خاصی را روی محتوای این رشته تحمیل نمیکند. این گزینه در اتصال Rendezvous کاربردی ندارد؛ نتیجه ممکن است صرفاً این باشد که یک طرف مقدار طرف دیگر را بازنویسی کند و اینکه کدام طرف برنده شود بستگی به شانس دارد.
- srt_streamid=string
- نام مستعار برای streamid به منظور جلوگیری از تداخل با گزینه خط فرمان ffmpeg.
- smoother=live|file
- نوع هموارساز (Smoother) مورد استفاده برای انتقال در آن سوکت، که مسئول انتقال و کنترل ازدحام است. نوع Smoother باید در هر دو طرف اتصال دقیقاً یکسان باشد، در غیر این صورت اتصال رد میشود.
- messageapi=1|0
- هنگامی که
تنظیم شود،
این سوکت از
Message API استفاده
میکند، در
غیر این
صورت از Buffer API
بهره
میبرد.
توجه داشته
باشید که در
حالت live (به transtype
مراجعه
کنید) تنها message
API در دسترس
است. در
حالت File
میتوانید
یکی از دو
حالت زیر را
انتخاب
کنید:
رابط Stream API (پیشفرض، زمانی که این گزینه نادرست یا 0 است). در این حالت میتوانید با یک دستور ارسال هر چقدر داده که مایلید ارسال کنید، یا حتی از توابع اختصاصی استفاده نمایید که مستقیماً از یک فایل میخوانند. سازوکار داخلی، کنترل سرعت و ازدحام را بر عهده خواهد گرفت. هنگام دریافت نیز میتوانید هر میزان داده که میخواهید دریافت کنید، و دادههای استخراجنشده منتظر فراخوانی بعدی خواهند ماند. در حالت Stream هیچ مرزی بین بخشهای داده وجود ندارد.
رابط Message API. در این حالت دستور ارسال منفرد شما دقیقاً یک قطعه داده دارای مرز (یک پیام) را منتقل میکند. بر خلاف حالت Live، این پیام ممکن است در چندین بسته UDP گسترده شود و تنها محدودیت اندازه این است که باید به طور کامل در بافر ارسال جا شود. گیرنده باید از بافری به بزرگی لازم برای دریافت پیام استفاده کند، در غیر این صورت پیام تحویل داده نخواهد شد. هنگامی که پیام کامل نباشد (همه بستهها دریافت نشده باشند یا بستهای گم شده باشد)، تحویل داده نخواهد شد.
- transtype=live|file
- نوع انتقال
را برای
سوکت تعیین
میکند؛ به
ویژه،
تنظیم این
گزینه
چندین
پارامتر
دیگر را بر
اساس
نیازهای یک
نوع انتقال
خاص به
مقادیر
پیشفرضشان
تنظیم
میکند.
live: تنظیم گزینهها برای انتقال زنده. در این حالت، باید با یک دستور ارسال فقط به اندازهای داده ارسال کنید که در یک بسته UDP جا شود، و محدود به مقداری باشد که در payload_size تعریف شده است (۱۳۱۶ در این حالت پیشفرض است). در این حالت هیچ کنترل سرعتی وجود ندارد، فقط در صورت پیکربندی، کنترل پهنای باند وجود دارد تا پهنای باند با انتقال سربار (بستههای ارسال مجدد و کنترلی) بیش از حد مصرف نشود.
file: تنظیم گزینهها برای انتقال غیرزنده. برای توضیحات بیشتر به messageapi مراجعه کنید.
- linger=seconds
- تعداد ثانیههایی که سوکت هنگام بسته شدن برای دادههای ارسالنشده منتظر میماند. پیشفرض -1 است. -1 به معنای خودکار است (غیرفعال با 0 ثانیه در حالت live، فعال با 180 ثانیه در حالت file). دامنه این گزینه اعداد صحیح در بازه 0 تا "INT_MAX" است.
- tsbpd=1|0
- هنگامی که true باشد، از حالت تحویل بسته بر اساس برچسب زمانی (Timestamp-based Packet Delivery) استفاده میکند. رفتار پیشفرض به نوع انتقال بستگی دارد: در حالت live فعال و در حالت file غیرفعال است.
- ipv6only=1|0
- پذیرش یا عدم پذیرش IPv4 هنگام استفاده از نشانی عمومی (wildcard) در IPv6. این گزینه باید هنگام گوش دادن روی یک نشانی عمومی IPv6 تنظیم شود.
برای کسب اطلاعات بیشتر ببینید: https://github.com/Haivision/srt.
srtp
پروتکل انتقال بلادرنگ امن (Secure Real-time Transport Protocol).
گزینههای پذیرفتهشده عبارتند از:
- srtp_in_suite
- srtp_out_suite
- انتخاب
مجموعههای
رمزگذاری
ورودی و
خروجی.
مقادیر پشتیبانیشده:
- srtp_in_params
- srtp_out_params
- تنظیم پارامترهای رمزگذاری ورودی و خروجی، که با نمایشی کدگذاریشده بر پایه base64 از یک بلوک باینری بیان میشوند. ۱۶ بایت اول این بلوک باینری به عنوان کلید اصلی (master key) و ۱۴ بایت بعدی به عنوان سالت اصلی (master salt) استفاده میشوند.
subfile
استخراج مجازی بخشی از یک فایل یا جریانی دیگر. جریان زیربنایی باید قابلیت جستجو/پرش (seekable) داشته باشد.
گزینههای پذیرفتهشده:
- start
- آفست شروع بخش استخراجشده، بر حسب بایت.
- end
- آفست پایان بخش استخراجشده، بر حسب بایت. در صورت تنظیم روی 0، استخراج تا پایان فایل انجام میشود.
مثالها:
استخراج یک فصل از فایل DVD VOB (بخشهای شروع و پایان به صورت خارجی دریافت شده و در ۲۰۴۸ ضرب شدهاند):
subfile,,start,153391104,end,268142592,,:/media/dvd/VIDEO_TS/VTS_08_1.VOB
پخش یک فایل AVI مستقیماً از یک آرشیو TAR:
subfile,,start,183241728,end,366490624,,:archive.tar
پخش یک فایل MPEG-TS از آفست شروع تا انتها:
subfile,,start,32815239,end,0,,:video.ts
tee
نوشتن خروجی روی چندین پروتکل. خروجیهای جداگانه با | از هم تفکیک میشوند.
tee:file://path/to/local/this.avi|file://path/to/local/that.avi
tcp
پروتکل کنترل انتقال (TCP - Transmission Control Protocol).
نحو مورد نیاز برای یک نشانی اینترنتی (URL) از نوع TCP عبارت است از:
tcp://<hostname>:<port>[?<options>]
options شامل فهرستی از گزینههای جداشده با & به صورت key=val است. میتوان از درصدکدگذاری استاندارد (و استفاده از علامت مثبت برای فاصله) جهت گریز دادن (escape) کلیدها و مقادیر استفاده کرد.
گزینهها همچنین میتوانند از طریق گزینههای خط فرمان (یا در کد از طریق "AVOption"ها) مشخص شوند.
فهرست گزینههای پشتیبانیشده در ادامه آمده است.
- listen=2|1|0
- گوش دادن برای یک اتصال ورودی. مقدار 0 حالت شنیدن را غیرفعال میکند، 1 گوش دادن در حالت تککلاینت را فعال میکند، 2 گوش دادن در حالت چندکلاینت را فعال میسازد. مقدار پیشفرض 0 است.
- local_addr=addr
- آدرس IP محلی یک رابط شبکه که برای اتصال سوکت tcp استفاده میشود.
- local_port=port
- درگاه محلی مورد استفاده برای اتصال سوکت tcp.
- timeout=microseconds
- تنظیم مهلت
زمانی
ایجاد خطا،
بیانشده
بر حسب
میکروثانیه.
این گزینه تنها در حالت خواندن مربوط است: اگر در بازهای بیش از این فاصله زمانی هیچ دادهای نرسید، خطا صادر میشود.
- listen_timeout=milliseconds
- تنظیم مهلت زمانی گوش دادن، بیانشده بر حسب میلیثانیه.
- recv_buffer_size=bytes
- تنظیم اندازه بافر دریافت، بیانشده بر حسب بایت.
- send_buffer_size=bytes
- تنظیم اندازه بافر ارسال، بیانشده بر حسب بایت.
- tcp_nodelay=1|0
- تنظیم TCP_NODELAY
برای
غیرفعال
کردن
الگوریتم Nagle.
مقدار
پیشفرض 0
است.
تذکر: نوشتن در سوکت در حال حاضر برای به حداقل رساندن فراخوانهای سیستمی بهینهسازی نشده است و کارایی / اثر TCP_NODELAY را کاهش میدهد.
- tcp_mss=bytes
- تنظیم حداکثر اندازه قطعه (MSS) برای بستههای خروجی TCP، بیانشده بر حسب بایت.
مثال زیر نحوه راهاندازی یک اتصال شنونده TCP را با ffmpeg نشان میدهد، که سپس با ffplay به آن دسترسی پیدا میشود:
ffmpeg -i <input> -f <format> tcp://<hostname>:<port>?listen ffplay tcp://<hostname>:<port>
tls
امنیت لایه انتقال (TLS - Transport Layer Security) / لایه سوکتهای امن (SSL - Secure Sockets Layer)
نحو مورد نیاز برای یک نشانی اینترنتی (URL) از نوع TLS/SSL عبارت است از:
tls://<hostname>:<port>[?<options>]
options شامل فهرستی از گزینههای جداشده با & به صورت key=val است. میتوان از درصدکدگذاری استاندارد (و استفاده از علامت مثبت برای فاصله) جهت گریز دادن کلیدها و مقادیر استفاده کرد.
گزینهها همچنین میتوانند از طریق گزینههای خط فرمان (یا در کد از طریق "AVOption"ها) مشخص شوند.
فهرست گزینههای پشتیبانیشده در ادامه آمده است.
- ca_file, cafile=filename
- فایلی حاوی گواهیهای ریشه مرجع صدور گواهی (CA) که باید مورد اعتماد در نظر گرفته شوند. اگر کتابخانه TLS پیوندشده حاوی یک مقدار پیشفرض باشد، ممکن است برای کارکرد اعتبارسنجی نیازی به مشخص کردن این مورد نباشد، اما همه کتابخانهها و پیکربندیها دارای مقادیر پیشفرض داخلی نیستند. این فایل باید در قالب OpenSSL PEM باشد.
- tls_verify, verify=1|0
- در صورت
فعال بودن،
تلاش
میکند طرف
مقابل (peer) که
با آن
ارتباط
برقرار شده
را
اعتبارسنجی
کند. توجه
داشته
باشید اگر
از OpenSSL
استفاده
شود، این
مورد در حال
حاضر تنها
اطمینان
حاصل
میکند که
گواهی طرف
مقابل توسط
یکی از
گواهیهای
ریشه در
پایگاه
داده CA امضا
شده باشد،
اما
اعتبارسنجی
نمیکند که
آیا گواهی
واقعاً با
نام
میزبانی که
قصد اتصال
به آن را
داریم
مطابقت
دارد یا
خیر. (در
سایر
بکاندها،
نام میزبان
نیز
اعتبارسنجی
میشود.)
این گزینه به صورت پیشفرض فعال است. اعتبارسنجی طرف مقابل نیازمند یک پایگاه داده CA است که در برخی موارد باید توسط فراخواننده ارائه شود.
- cert_file, cert=filename
- فایلی حاوی یک گواهی برای استفاده در مصافحه (handshake) با طرف مقابل. (هنگام فعالیت به عنوان سرور در حالت شنیدن، این مورد بیشتر توسط طرف مقابل درخواست میشود، در حالی که گواهیهای کلاینت تنها در پیکربندیهای خاصی اجباری هستند.)
- key_file, key=filename
- فایلی حاوی کلید خصوصی مربوط به گواهی.
- listen=1|0
- در صورت فعال بودن، به اتصالات روی درگاه ارائهشده گوش میدهد و به جای نقش کلاینت، نقش سرور را در مصافحه به عهده میگیرد.
- http_proxy
- پروکسی HTTP برای ایجاد تونل، به عنوان مثال "http://example.com:1234". پروکسی باید از متد CONNECT پشتیبانی کند.
خط فرمانهای نمونه:
برای ایجاد یک سرور TLS/SSL که یک جریان ورودی را ارائه میدهد:
ffmpeg -i <input> -f <format> tls://<hostname>:<port>?listen&cert=<server.crt>&key=<server.key>
برای پخش یک جریان از سرور TLS/SSL با استفاده از ffplay:
ffplay tls://<hostname>:<port>
dtls
امنیت لایه انتقال دادهگرام (DTLS - Datagram Transport Layer Security)
نحو مورد نیاز برای یک نشانی اینترنتی (URL) از نوع DTLS عبارت است از:
dtls://<hostname>:<port>[?<options>]
options شامل فهرستی از گزینههای جداشده با & به صورت key=val است. میتوان از درصدکدگذاری استاندارد (و استفاده از علامت مثبت برای فاصله) جهت گریز دادن کلیدها و مقادیر استفاده کرد.
گزینهها همچنین میتوانند از طریق گزینههای خط فرمان (یا در کد از طریق "AVOption"ها) مشخص شوند.
پروتکل DTLS بیشتر گزینهها را با TLS به اشتراک میگذارد، اما به جای TCP بر روی UDP عمل میکند.
فهرست گزینههای پشتیبانیشده در ادامه آمده است.
- ca_file, cafile=filename
- فایلی حاوی گواهیهای ریشه مرجع صدور گواهی (CA) که باید مورد اعتماد در نظر گرفته شوند. اگر کتابخانه TLS پیوندشده حاوی یک مقدار پیشفرض باشد، ممکن است برای کارکرد اعتبارسنجی نیازی به مشخص کردن این مورد نباشد، اما همه کتابخانهها و پیکربندیها دارای مقادیر پیشفرض داخلی نیستند. این فایل باید در قالب OpenSSL PEM باشد.
- tls_verify, verify=1|0
- در صورت
فعال بودن،
تلاش
میکند طرف
مقابل (peer) که
با آن
ارتباط
برقرار شده
را
اعتبارسنجی
کند. توجه
داشته
باشید اگر
از OpenSSL
استفاده
شود، این
مورد در حال
حاضر تنها
اطمینان
حاصل
میکند که
گواهی طرف
مقابل توسط
یکی از
گواهیهای
ریشه در
پایگاه
داده CA امضا
شده باشد،
اما
اعتبارسنجی
نمیکند که
آیا گواهی
واقعاً با
نام
میزبانی که
قصد اتصال
به آن را
داریم
مطابقت
دارد یا
خیر.
این گزینه به صورت پیشفرض فعال است. اعتبارسنجی طرف مقابل نیازمند یک پایگاه داده CA است که در برخی موارد باید توسط فراخواننده ارائه شود.
- cert_file, cert=filename
- فایلی حاوی یک گواهی برای استفاده در مصافحه با طرف مقابل. (هنگام فعالیت به عنوان سرور در حالت شنیدن، این مورد بیشتر توسط طرف مقابل درخواست میشود، در حالی که گواهیهای کلاینت تنها در پیکربندیهای خاصی اجباری هستند.)
- key_file, key=filename
- فایلی حاوی کلید خصوصی مربوط به گواهی.
- cert_pem=string
- رشته PEM گواهی
- key_pem=string
- رشته PEM کلید خصوصی
- listen=1|0
- در صورت فعال بودن، به اتصالات روی درگاه ارائهشده گوش میدهد و به جای نقش کلاینت، نقش سرور را در مصافحه به عهده میگیرد.
- mtu=size
- تنظیم واحد بیشینه انتقال (MTU) برای بستههای DTLS.
- use_srtp=1|0
- فعال کردن افزونه DTLS به نام use_srtp. این افزونه در برنامههای کاربردی WebRTC جهت ایجاد کلیدهای رمزگذاری SRTP از طریق مصافحه DTLS استفاده میشود. مقدار پیشفرض غیرفعال است.
- external_sock=1|0
- استفاده از یک سوکت خارجی به جای ایجاد سوکت جدید. تنظیم این گزینه تنها در زمان تعامل با کد از طریق API معنادار است؛ فعال کردن این گزینه از طریق خط فرمان (CLI) موجب شکست فوری خواهد شد. مقدار پیشفرض غیرفعال است.
خط فرمانهای نمونه:
برای ایجاد یک سرور DTLS:
ffmpeg -listen 1 -i dtls://<hostname>:<port> <output>
برای ایجاد یک کلاینت DTLS و ارسال داده به سرور:
ffmpeg -i <input> -f <format> dtls://<hostname>:<port>
udp
پروتکل دادهگرام کاربر (UDP - User Datagram Protocol).
نحو مورد نیاز برای یک نشانی اینترنتی (URL) از نوع UDP عبارت است از:
udp://<hostname>:<port>[?<options>]
options شامل فهرستی از گزینههای جداشده با & به صورت key=val است. میتوان از درصدکدگذاری استاندارد (و استفاده از علامت مثبت برای فاصله) جهت گریز دادن کلیدها و مقادیر استفاده کرد.
گزینهها همچنین میتوانند از طریق گزینههای خط فرمان (یا در کد از طریق "AVOption"ها) مشخص شوند.
در صورتی که ریسهبندی (threading) روی سیستم فعال باشد، یک بافر حلقوی برای ذخیره دادههای ورودی استفاده میشود که امکان کاهش از دست رفتن دادهها بر اثر سرریز بافر سوکت UDP را فراهم میکند. گزینههای fifo_size و overrun_nonfatal مربوط به این بافر هستند.
فهرست گزینههای پشتیبانیشده در ادامه آمده است.
- buffer_size=size
- تنظیم حداکثر اندازه بافر سوکت UDP بر حسب بایت. این گزینه بسته به کاربرد سوکت، برای تنظیم اندازه بافر دریافت یا ارسال استفاده میشود. مقدار پیشفرض 32 کیلوبایت برای خروجی و 384 کیلوبایت برای ورودی است. همچنین fifo_size را ببینید.
- bitrate=bitrate
- در صورت تنظیم روی مقداری غیر از صفر، در صورتی که ورودی بستههای کافی برای تداوم آن را داشته باشد، خروجی دارای نرخ بیت ثابت مشخصشده خواهد بود.
- burst_bits=bits
- هنگام استفاده از bitrate، این گزینه حداکثر تعداد بیتها را در انفجارهای بستهای (packet bursts) مشخص میکند.
- localport=port
- جایگزینی درگاه محلی UDP برای اتصال (bind).
- localaddr=addr
- آدرس IP محلی یک رابط شبکه که برای ارسال بستهها یا پیوستن به گروههای چندپخشی (multicast) استفاده میشود.
- pkt_size=size
- تنظیم اندازه بستههای UDP بر حسب بایت.
- reuse=1|0
- مجاز یا غیرمجاز کردن صریح استفاده مجدد از سوکتهای UDP.
- ttl=ttl
- تنظیم مقدار طول عمر (time to live) (تنها برای چندپخشی / multicast).
- dscp=dscp
- تنظیم فیلد 6 بیتی DSCP برای بستههای خروجی.
- connect=1|0
- مقداردهی اولیه سوکت UDP با تابع connect(). در این حالت، آدرس مقصد را نمیتوان بعداً با ff_udp_set_remote_url تغییر داد. اگر آدرس مقصد در ابتدا مشخص نباشد، این گزینه میتواند در ff_udp_set_remote_url نیز مشخص شود. این کار امکان یافتن آدرس مبدأ بستهها را با getsockname فراهم میکند و باعث میشود در صورت دریافت "destination unreachable"، عملیات نوشتن با خطای AVERROR(ECONNREFUSED) بازگردد. برای دریافت، این ویژگی مزیت دریافت بستهها تنها از آدرس/درگاه مشخصشده طرف مقابل را فراهم میآورد.
- sources=address[,address]
- تنها بستههای ارسالشده از آدرسهای مشخصشده را دریافت میکند. در صورت چندپخشی (multicast)، همچنین تنها در ترافیک چندپخشی ناشی از این آدرسها مشترک میشود.
- block=address[,address]
- نادیده گرفتن بستههای ارسالشده از آدرسهای مشخصشده. در صورت چندپخشی، همچنین آدرسهای مبدأ را از اشتراک چندپخشی مستثنی میکند.
- fifo_size=units
- تنظیم اندازه بافر حلقوی دریافت UDP، بیانشده به صورت تعداد بستههایی با اندازه 188 بایت. در صورت عدم تعیین، مقدار پیشفرض 7*4096 است.
- overrun_nonfatal=1|0
- ادامه کار در صورت سرریز شدن بافر حلقوی دریافت UDP. مقدار پیشفرض 0 است.
- timeout=microseconds
- تنظیم مهلت
زمانی
ایجاد خطا،
بیانشده
بر حسب
میکروثانیه.
این گزینه تنها در حالت خواندن مربوط است: اگر در بازهای بیش از این فاصله زمانی هیچ دادهای نرسید، خطا صادر میشود.
- broadcast=1|0
- مجاز یا
غیرمجاز
کردن صریح
همهپخشی
(broadcasting) در UDP.
توجه داشته باشید که ممکن است همهپخشی در شبکههای دارای محافظت در برابر طوفان انتشار (broadcast storm protection) به درستی کار نکند.
مثالها (Examples)
- استفاده از
ffmpeg برای
استریم روی
UDP به یک نقطه
پایانی
دوردست:
ffmpeg -i <input> -f <format> udp://<hostname>:<port>
- استفاده از
ffmpeg برای
استریم در
قالب mpegts روی UDP
با استفاده
از
بستههای 188
بایتی UDP و یک
بافر ورودی
بزرگ:
ffmpeg -i <input> -f mpegts udp://<hostname>:<port>?pkt_size=188&buffer_size=65535
- استفاده از
ffmpeg برای
دریافت روی
UDP از یک نقطه
پایانی
دوردست:
ffmpeg -i udp://[<multicast-address>]:<port> ...
unix
سوکت محلی یونیکس (Unix local socket).
نحو مورد نیاز برای یک نشانی اینترنتی (URL) سوکت یونیکس عبارت است از:
unix://<filepath>
پارامترهای زیر را میتوان از طریق گزینههای خط فرمان (یا در کد از طریق "AVOption"ها) تنظیم کرد:
- timeout
- مهلت زمانی بر حسب میلیثانیه.
- listen
- ایجاد سوکت یونیکس در حالت شنیدن (listening).
- type
- انتخاب نوع سوکت.
- pkt_size
- حداکثر اندازه بسته برای سوکتهای بستهمحور (SOCK_DGRAM و SOCK_SEQPACKET). در صورت بزرگتر بودن از صفر، این مقدار به عنوان "max_packet_size" استفاده میشود. برای SOCK_STREAM نادیده گرفته میشود. مقدار پیشفرض 0 است.
zmq
پیامرسانی ناهمگام ZeroMQ با استفاده از کتابخانه libzmq.
این کتابخانه از استریم تکپخشی (unicast) به چندین کلاینت بدون اتکا به یک سرور خارجی پشتیبانی میکند.
نحو مورد نیاز برای استریم یا اتصال به یک استریم عبارت است از:
zmq:tcp://ip-address:port
مثال: ایجاد یک استریم در localhost روی درگاه 5555:
ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555
چندین کلاینت میتوانند با دستور زیر به استریم متصل شوند:
ffplay zmq:tcp://127.0.0.1:5555
استریم به چندین کلاینت با استفاده از الگوی نشر-اشتراک (Pub-Sub) در ZeroMQ پیادهسازی شده است. سمت سرور به یک درگاه متصل میشود (bind) و دادهها را منتشر میکند (publish). کلاینتها به سرور (از طریق آدرس IP/درگاه) متصل میشوند و در استریم مشترک میشوند (subscribe). ترتیبی که سرور و کلاینت شروع به کار میکنند معمولاً اهمیتی ندارد.
برنامه ffmpeg باید با گزینه --enable-libzmq کامپایل شده باشد تا از این پروتکل پشتیبانی کند.
گزینهها را میتوان در خط فرمان ffmpeg/ffplay تنظیم کرد. گزینههای زیر پشتیبانی میشوند:
- pkt_size
- حداکثر اندازه بسته برای ارسال/دریافت دادهها را اجبار میکند. مقدار پیشفرض 131,072 بایت است. در سمت سرور، این گزینه حداکثر اندازه بستههای ارسالشده از طریق ZeroMQ را مشخص میکند. در کلاینتها، اندازه بافر داخلی را برای دریافت بستهها تنظیم مینماید. توجه داشته باشید که pkt_size در کلاینتها باید برابر یا بزرگتر از pkt_size در سرور باشد. در غیر این صورت ممکن است پیام دریافتی کوتاه شده (truncated) و باعث خطاهای رمزگشایی شود.
همچنین ببینید (SEE ALSO)
نویسندگان (AUTHORS)
توسعهدهندگان FFmpeg.
برای جزئیات بیشتر درباره پدیدآورندگان و نویسندگان، تاریخچه گیت پروژه (https://git.ffmpeg.org/ffmpeg) را ببینید، برای نمونه با تایپ دستور git log در دایرکتوری کد منبع FFmpeg، یا مرور مخزن برخط در نشانی https://git.ffmpeg.org/ffmpeg.
نگهدارندههای مؤلفههای خاص در فایل MAINTAINERS در درخت کد منبع فهرست شدهاند.