.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "FFMPEG-PROTOCOLS 1" .TH FFMPEG-PROTOCOLS 1 " " " " " " .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" ffmpeg-protocols \- پروتکل‌های ورودی و خروجی در FFmpeg .SH "توضیحات (DESCRIPTION)" .IX Header "توضیحات (DESCRIPTION)" این سند پروتکل‌های ورودی و خروجی ارائه‌شده توسط کتابخانه .I libavformat را شرح می‌دهد. .SH "گزینه‌های پروتکل (PROTOCOL OPTIONS)" .IX Header "گزینه‌های پروتکل (PROTOCOL OPTIONS)" کتابخانه .I libavformat برخی گزینه‌های عمومی سراسری را ارائه می‌دهد که می‌توان آن‌ها را روی همه پروتکل‌ها تنظیم کرد. علاوه بر این، هر پروتکل ممکن است از گزینه‌های به‌اصطلاح اختصاصی (private options) پشتیبانی کند که مختص همان مؤلفه هستند. .PP گزینه‌ها را می‌توان با تعیین .BR \-\fIoption\fR\ \fIvalue\fR در ابزارهای FFmpeg، یا با تنظیم صریح مقدار در گزینه‌های \&\f(CW\*(C`AVFormatContext\*(C'\fR یا با استفاده از رابط برنامه‌نویسی .I libavutil/opt.h برای کاربردهای برنامه‌نویسی تنظیم کرد. .PP فهرست گزینه‌های پشتیبانی‌شده در ادامه آمده است: .IP "\fBprotocol_whitelist\fR \fIlist\fR \fB(\fR\fIinput\fR\fB)\fR" 4 .IX Item "protocol_whitelist list (input)" فهرستی جداشده با کاما (",") از پروتکل‌های مجاز را تعیین می‌کند. مقدار "ALL" با همه پروتکل‌ها مطابقت دارد. پروتکل‌هایی با پیشوند "\-" غیرفعال می‌شوند. همه پروتکل‌ها به صورت پیش‌فرض مجاز هستند، اما پروتکل‌های مورد استفاده توسط یک پروتکل دیگر (پروتکل‌های تودرتو) به یک زیرمجموعه خاص هر پروتکل محدود می‌شوند. .SH "پروتکل‌ها (PROTOCOLS)" .IX Header "پروتکل‌ها (PROTOCOLS)" پروتکل‌ها عناصر پیکربندی‌شده‌ای در FFmpeg هستند که دسترسی به منابع نیازمند پروتکل‌های خاص را امکان‌پذیر می‌سازند. .PP هنگامی که ساخت FFmpeg خود را پیکربندی می‌کنید، تمام پروتکل‌های پشتیبانی‌شده به صورت پیش‌فرض فعال هستند. می‌توانید با استفاده از گزینه پیکربندی "\-\-list\-protocols" فهرست تمام موارد موجود را مشاهده کنید. .PP می‌توانید با استفاده از گزینه پیکربندی "\-\-disable\-protocols" تمام پروتکل‌ها را غیرفعال کنید، و با استفاده از گزینه "\-\-enable\-protocol=\fIPROTOCOL\fR" یک پروتکل را به صورت انتخابی فعال نمایید، یا با استفاده از گزینه "\-\-disable\-protocol=\fIPROTOCOL\fR" یک پروتکل خاص را غیرفعال کنید. .PP گزینه .B \-protocols در ابزارهای *ff فهرست پروتکل‌های پشتیبانی‌شده را نمایش می‌دهد. .PP تمام پروتکل‌ها گزینه‌های زیر را می‌پذیرند: .IP \fBrw_timeout\fR 4 .IX Item "rw_timeout" حداکثر زمان انتظار برای تکمیل عملیات خواندن/نوشتن (شبکه)، بر حسب میکروثانیه. .PP در ادامه، شرح پروتکل‌های موجود فعلی آمده است. .SS amqp .IX Subsection "amqp" پروتکل Advanced Message Queueing Protocol (AMQP) نسخه 0\-9\-1 یک پروتکل ارتباطی انتشار\-اشتراک (publish\-subscribe) مبتنی بر کارگزار (broker) است. .PP برای پشتیبانی از AMQP، نرم‌افزار FFmpeg باید با \-\-enable\-librabbitmq کامپایل شود. یک کارگزار AMQP مجزا نیز باید اجرا شود. نمونه‌ای از یک کارگزار متن‌باز AMQP، نرم‌افزار RabbitMQ است. .PP پس از راه‌اندازی کارگزار، یک کلاینت FFmpeg می‌تواند با استفاده از دستور زیر داده‌ها را به کارگزار استریم کند: .PP .Vb 1 \& ffmpeg \-re \-i input \-f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost] .Ve .PP که در آن hostname و port (پیش‌فرض 5672 است) آدرس کارگزار است. کلاینت همچنین می‌تواند نام کاربری/رمز عبور (user/password) را برای احراز هویت تنظیم کند. پیش‌فرض هر دو فیلد "guest" است. نام میزبان مجازی روی کارگزار را می‌توان با vhost تنظیم کرد. مقدار پیش‌فرض "/" است. .PP چندین مشترک می‌توانند با استفاده از این دستور از کارگزار استریم دریافت کنند: .PP .Vb 1 \& ffplay amqp://[[user]:[password]@]hostname[:port][/vhost] .Ve .PP در RabbitMQ تمام داده‌های منتشرشده به کارگزار از طریق یک تبادل‌گر (exchange) خاص عبور می‌کنند، و هر کلاینت مشترک دارای یک صف/بافر اختصاص‌یافته است. هنگامی که بسته‌ای به exchange می‌رسد، ممکن است بسته به فیلدهای exchange و routing_key در صف کلاینت کپی شود. .PP گزینه‌های زیر پشتیبانی می‌شوند: .IP \fBexchange\fR 4 .IX Item "exchange" تبادل‌گر (exchange) مورد استفاده روی کارگزار را تعیین می‌کند. RabbitMQ دارای چندین تبادل‌گر از پیش تعریف‌شده است: "amq.direct" تبادل‌گر پیش‌فرض است، که در آن ناشر و مشترک باید دارای routing_key یکسان باشند؛ "amq.fanout" مشابه یک عملیات انتشار عمومی (broadcast) است (یعنی داده‌ها بدون توجه به routing_key به تمام صف‌های روی تبادل‌گر fanout ارسال می‌شوند)؛ و "amq.topic" مشابه "amq.direct" است، اما تطبیق الگوهای پیچیده‌تر را امکان‌پذیر می‌سازد (به مستندات RabbitMQ مراجعه کنید). .IP \fBrouting_key\fR 4 .IX Item "routing_key" کلید مسیریابی را تعیین می‌کند. مقدار پیش‌فرض "amqp" است. کلید مسیریابی در تبادل‌گرهای "amq.direct" و "amq.topic" برای تصمیم‌گیری درباره اینکه آیا بسته‌ها در صف یک مشترک نوشته شوند یا خیر استفاده می‌شود. .IP \fBpkt_size\fR 4 .IX Item "pkt_size" حداکثر اندازه هر بسته ارسالی/دریافتی به کارگزار. مقدار پیش‌فرض 131072 است. حداقل 4096 و حداکثر هر مقدار بزرگی است (که با int قابل نمایش باشد). هنگام دریافت بسته‌ها، این گزینه اندازه یک بافر داخلی در FFmpeg را تنظیم می‌کند. این مقدار باید برابر یا بزرگ‌تر از اندازه بسته‌های منتشرشده به کارگزار باشد؛ در غیر این صورت پیام دریافتی ممکن است ناقص دریافت شود و باعث خطاهای رمزگشایی گردد. .IP \fBconnection_timeout\fR 4 .IX Item "connection_timeout" مهلت زمانی بر حسب ثانیه در طول اتصال اولیه به کارگزار. مقدار پیش‌فرض rw_timeout است، یا اگر rw_timeout تنظیم نشده باشد، ۵ ثانیه است. .IP "\fBdelivery_mode\fR \fImode\fR" 4 .IX Item "delivery_mode mode" حالت تحویل هر پیام ارسالی به کارگزار را تنظیم می‌کند. مقادیر زیر پذیرفته می‌شوند: .RS 4 .IP \fBpersistent\fR 4 .IX Item "persistent" حالت تحویل روی "persistent" (2) تنظیم می‌شود. این مقدار پیش‌فرض است. بسته به تنظیمات کارگزار، پیام‌ها ممکن است روی دیسک کارگزار نوشته شوند. .IP \fBnon\-persistent\fR 4 .IX Item "non-persistent" حالت تحویل روی "non\-persistent" (1) تنظیم می‌شود. پیام‌ها در حافظه کارگزار باقی می‌مانند مگر اینکه کارگزار تحت فشار کمبود حافظه قرار گیرد. .RE .RS 4 .RE .SS async .IX Subsection "async" پوشش پر کردن داده به صورت ناهمگام (asynchronous) برای جریان ورودی. .PP داده‌ها را در یک رشته (thread) پس‌زمینه پر می‌کند تا عملیات I/O از رشته demux جداسازی شود. .PP .Vb 3 \& async: \& async:http://host/resource \& async:cache:http://host/resource .Ve .SS bluray .IX Subsection "bluray" خواندن لیست پخش (playlist) دیسک‌های BluRay. .PP گزینه‌های پذیرفته‌شده عبارتند از: .IP \fBangle\fR 4 .IX Item "angle" زاویه دید (angle) در BluRay .IP \fBchapter\fR 4 .IX Item "chapter" فصل شروع (1...N) .IP \fBplaylist\fR 4 .IX Item "playlist" لیست پخش برای خواندن (BDMV/PLAYLIST/?????.mpls) .PP مثال‌ها: .PP خواندن طولانی‌ترین لیست پخش از BluRay سوارشده (mounted) در /mnt/bluray: .PP .Vb 1 \& bluray:/mnt/bluray .Ve .PP خواندن زاویه ۲ از لیست پخش ۴ از BluRay سوارشده در /mnt/bluray، شروع از فصل ۲: .PP .Vb 1 \& \-playlist 4 \-angle 2 \-chapter 2 bluray:/mnt/bluray .Ve .SS cache .IX Subsection "cache" پوشش کش‌گذاری برای جریان ورودی. .PP جریان ورودی را در یک فایل موقت کش می‌کند. این قابلیت پرش/جستجو (seeking) را برای استریم‌های زنده فراهم می‌آورد. .PP گزینه‌های پذیرفته‌شده عبارتند از: .IP \fBread_ahead_limit\fR 4 .IX Item "read_ahead_limit" میزان داده بر حسب بایت که در صورت عدم پشتیبانی از پرش/جستجو ممکن است جلوتر خوانده شود. محدوده از \-1 تا INT_MAX است. مقدار \-1 به معنای نامحدود است. پیش‌فرض 65536 است. .PP ساختار دستوری URL عبارت است از: .PP .Vb 1 \& cache: .Ve .SS concat .IX Subsection "concat" پروتکل الحاق فیزیکی (concatenation). .PP خواندن و پرش/جستجو در چندین منبع به صورت متوالی، به گونه‌ای که گویی یک منبع یکتا هستند. .PP نشانی اینترنتی (URL) پذیرفته‌شده توسط این پروتکل ساختار زیر را دارد: .PP .Vb 1 \& concat:||...| .Ve .PP که در آن \fIURL1\fR، \fIURL2\fR، ...، \fIURLN\fR نشانی‌های اینترنتی منبعی هستند که باید به هم متصل شوند، و هر کدام ممکن است پروتکل متفاوتی را مشخص کنند. .PP به عنوان مثال برای خواندن دنباله‌ای از فایل‌های \fIsplit1.mpeg\fR، \&\fIsplit2.mpeg\fR، \fIsplit3.mpeg\fR با استفاده از \fBffplay\fR، دستور زیر را به کار ببرید: .PP .Vb 1 \& ffplay concat:split1.mpeg\e|split2.mpeg\e|split3.mpeg .Ve .PP توجه داشته باشید که ممکن است لازم باشد برای نویسه "|" که در بسیاری از پوسته‌ها (shells) یک نویسه خاص است، نویسه گریز (backslash) قرار دهید. .SS concatf .IX Subsection "concatf" پروتکل الحاق فیزیکی با استفاده از فهرستی از منابع که با شکست خط (line break) از هم جدا شده‌اند. .PP خواندن و پرش/جستجو در چندین منبع به صورت متوالی، به گونه‌ای که گویی یک منبع یکتا هستند. .PP نشانی اینترنتی (URL) پذیرفته‌شده توسط این پروتکل ساختار زیر را دارد: .PP .Vb 1 \& concatf: .Ve .PP که در آن \fIURL\fR نشانی حاوی فهرستی از منابع جداشده با شکست خط است که باید به هم متصل شوند، و هر یک ممکن است پروتکل متفاوتی را مشخص کند. نویسه‌های خاص باید با بک‌اسلش یا علامت‌های نقل‌قول تکی (single quotes) گریز داده شوند. بخش \fB"Quoting and escaping" در راهنمای ffmpeg\-utils\|(1)\fR را ببینید. .PP به عنوان مثال برای خواندن دنباله‌ای از فایل‌های \fIsplit1.mpeg\fR، \&\fIsplit2.mpeg\fR، \fIsplit3.mpeg\fR که در خطوط جداگانه درون یک فایل \fIsplit.txt\fR فهرست شده‌اند با \fBffplay\fR، از این دستور استفاده کنید: .PP .Vb 1 \& ffplay concatf:split.txt .Ve .PP که در آن \fIsplit.txt\fR حاوی خطوط زیر است: .PP .Vb 3 \& split1.mpeg \& split2.mpeg \& split3.mpeg .Ve .SS crypto .IX Subsection "crypto" پروتکل خواندن جریان رمزگذاری‌شده با AES. .PP گزینه‌های پذیرفته‌شده عبارتند از: .IP \fBkey\fR 4 .IX Item "key" بلوک باینری کلید رمزگشایی AES را از روی نمایش هگزادسیمال داده‌شده تنظیم می‌کند. .IP \fBiv\fR 4 .IX Item "iv" بلوک باینری بردار مقداردهی اولیه (IV) رمزگشایی AES را از روی نمایش هگزادسیمال داده‌شده تنظیم می‌کند. .PP قالب‌های URL پذیرفته‌شده: .PP .Vb 2 \& crypto: \& crypto+ .Ve .SS data .IX Subsection "data" داده‌ها به صورت درون‌خطی در URI. بخش <\fBhttp://en.wikipedia.org/wiki/Data_URI_scheme\fR> را ببینید. .PP برای مثال، برای تبدیل یک فایل GIF داده‌شده به صورت درون‌خطی با \fBffmpeg\fR: .PP .Vb 1 \& ffmpeg \-i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png .Ve .SS fd .IX Subsection "fd" پروتکل دسترسی به توصیف‌گر فایل (file descriptor). .PP ساختار دستوری پذیرفته‌شده عبارت است از: .PP .Vb 1 \& fd: \-fd .Ve .PP اگر \fBfd\fR مشخص نشده باشد، به صورت پیش‌فرض توصیف‌گر فایل stdout برای نوشتن و stdin برای خواندن استفاده خواهد شد. بر خلاف پروتکل pipe، پروتکل fd در صورتی که مربوط به یک فایل معمولی باشد از قابلیت پرش/جستجو (seek) پشتیبانی می‌کند. به دلایل امنیتی، پروتکل fd از انتقال توصیف‌گر فایل از طریق URL پشتیبانی نمی‌کند. .PP این پروتکل گزینه‌های زیر را می‌پذیرد: .IP \fBblocksize\fR 4 .IX Item "blocksize" حداکثر اندازه بلوک عملیات I/O را بر حسب بایت تنظیم می‌کند. مقدار پیش‌فرض \&\f(CW\*(C`INT_MAX\*(C'\fR است، که به عدم اعمال محدودیت بر اندازه بلوک درخواستی می‌انجامد. تنظیم این مقدار بر روی یک عدد منطقی و کم، زمان واکنش به درخواست قطع عملیات توسط کاربر را بهبود می‌بخشد، که در صورت کند بودن انتقال داده‌ها سودمند است. .IP \fBfd\fR 4 .IX Item "fd" توصیف‌گر فایل را تنظیم می‌کند. .SS file .IX Subsection "file" پروتکل دسترسی به فایل. .PP خواندن از یک فایل یا نوشتن در آن. .PP یک URL فایل می‌تواند ساختار زیر را داشته باشد: .PP .Vb 1 \& file: .Ve .PP که در آن \fIfilename\fR مسیر فایلی است که باید خوانده شود. .PP نشانی اینترنتی (URL) که پیشوند پروتکل نداشته باشد، به عنوان یک URL فایل در نظر گرفته می‌شود. بسته به نوع ساخت (build)، یک URL که شبیه به مسیرهای ویندوزی با حرف درایو در ابتدا باشد نیز به عنوان URL فایل فرض خواهد شد (معمولاً در ساخت‌های مربوط به سیستم‌های شبه‌یونیکس این‌گونه نیست). .PP به عنوان مثال برای خواندن از یک فایل \fIinput.mpeg\fR با استفاده از \fBffmpeg\fR دستور زیر را به کار ببرید: .PP .Vb 1 \& ffmpeg \-i file:input.mpeg output.mpeg .Ve .PP این پروتکل گزینه‌های زیر را می‌پذیرد: .IP \fBtruncate\fR 4 .IX Item "truncate" در صورت تنظیم روی 1، فایل‌های موجود هنگام نوشتن کوتاه‌سازی (truncate) می‌شوند. مقدار 0 از کوتاه‌سازی جلوگیری می‌کند. مقدار پیش‌فرض 1 است. .IP \fBblocksize\fR 4 .IX Item "blocksize" حداکثر اندازه بلوک عملیات I/O را بر حسب بایت تنظیم می‌کند. مقدار پیش‌فرض \&\f(CW\*(C`INT_MAX\*(C'\fR است، که منجر به عدم اعمال محدودیت بر اندازه بلوک درخواستی می‌شود. تنظیم این مقدار بر روی یک عدد منطقی و کم، زمان واکنش به درخواست قطع عملیات توسط کاربر را بهبود می‌بخشد، که برای فایل‌های روی رسانه‌های ذخیره‌سازی کند مفید است. .IP \fBfollow\fR 4 .IX Item "follow" در صورت تنظیم روی 1، پروتکل در انتهای فایل خواندن را دوباره امتحان می‌کند و امکان خواندن فایل‌هایی را که هنوز در حال نوشته شدن هستند فراهم می‌سازد. برای خاتمه این فرایند، یا باید از گزینه rw_timeout استفاده کنید، یا از بازخورد وقفه (interrupt callback برای کاربران API) بهره ببرید. تنظیم این گزینه همچنین اندازه فایل گزارش‌شده توسط سیستم فایل را نادیده می‌گیرد. .IP \fBseekable\fR 4 .IX Item "seekable" تعیین می‌کند که آیا قابلیت پرش/جستجو (seekability) برای فایل اعلام شود یا خیر. مقدار 0 به معنای غیرقابل پرش و مقدار \-1 به معنای خودکار است (قابل پرش برای فایل‌های عادی، غیرقابل پرش برای پایپ‌های نام‌گذاری‌شده). .Sp بسیاری از دی‌ماکسرها با منابع دارای قابلیت پرش و غیرقابل پرش به شکل متفاوتی رفتار می‌کنند؛ بازنویسی این گزینه ممکن است باز کردن برخی فایل‌ها را به بهای از دست دادن برخی قابلیت‌ها (مانند پرش دقیق) سرعت ببخشد. .IP \fBpkt_size\fR 4 .IX Item "pkt_size" حداکثر اندازه بسته مورد استفاده برای I/O فایل را تعیین می‌کند. مقدار کوچک‌تر ممکن است مصرف حافظه را کاهش دهد. مقدار بزرگ‌تر ممکن است نرخ گذردهی (throughput) را به‌ویژه در سیستم‌های فایل تحت شبکه افزایش دهد. .Sp برای خواندن، در صورت تنظیم صریح، اندازه بافر داخلی پیش‌فرض (32 کیلوبایت) را بازنویسی می‌کند و حداکثر میزان داده خوانده‌شده در هر عملیات را محدود می‌سازد. .Sp برای نوشتن، این گزینه اندازه هر عملیات نوشتن را تعیین می‌کند. مقدار پیش‌فرض برای فایل‌های معمولی 256 کیلوبایت و در غیر این صورت 32 کیلوبایت است. .SS ftp .IX Subsection "ftp" پروتکل انتقال فایل یا FTP (File Transfer Protocol). .PP خواندن از منابع دوردست یا نوشتن در آن‌ها با استفاده از پروتکل FTP. .PP ساختار دستوری زیر لازم است: .PP .Vb 1 \& ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg .Ve .PP این پروتکل گزینه‌های زیر را می‌پذیرد: .IP \fBtimeout\fR 4 .IX Item "timeout" مهلت زمانی بر حسب میکروثانیه برای عملیات I/O سوکت که توسط عملیات سطح پایین زیرین استفاده می‌شود را تنظیم می‌کند. به صورت پیش‌فرض روی \-1 تنظیم شده است، به این معنی که مهلت زمانی مشخص نشده است. .IP \fBftp\-user\fR 4 .IX Item "ftp-user" کاربری را برای احراز هویت در سرور FTP تعیین می‌کند. مقدار کاربر موجود در URL مربوط به FTP بر این گزینه اولویت دارد و آن را بازنویسی می‌کند. .IP \fBftp\-password\fR 4 .IX Item "ftp-password" رمز عبوری را برای احراز هویت در سرور FTP تعیین می‌کند. رمز عبور موجود در URL مربوط به FTP، یا در صورت تعیین نشدن کاربر با \fBftp\-anonymous\-password\fR بر این گزینه اولویت دارد و آن را بازنویسی می‌کند. .IP \fBftp\-anonymous\-password\fR 4 .IX Item "ftp-anonymous-password" رمز عبور مورد استفاده هنگام ورود به عنوان کاربر ناشناس (anonymous). معمولاً باید از یک نشانی ایمیل استفاده شود. .IP \fBftp\-write\-seekable\fR 4 .IX Item "ftp-write-seekable" قابلیت پرش/جستجو در اتصال را در طول انکود کنترل می‌کند. اگر روی 1 تنظیم شود فرض می‌شود منبع قابل پرش است، و اگر روی 0 تنظیم شود فرض می‌شود قابل پرش نیست. مقدار پیش‌فرض 0 است. .PP نکته: این پروتکل می‌تواند به عنوان خروجی استفاده شود، اما توصیه می‌شود این کار انجام نشود، مگر اینکه احتیاط‌های خاصی صورت گرفته باشد (آزمایش‌ها، پیکربندی سفارشی سرور و غیره). سرورهای مختلف FTP در طول عملیات پرش رفتار متفاوتی دارند. ابزارهای *ff ممکن است به دلیل محدودیت‌های سرور، محتوای ناقصی تولید کنند. .SS gopher .IX Subsection "gopher" پروتکل Gopher. .SS gophers .IX Subsection "gophers" پروتکل Gophers. .PP پروتکل Gopher با کپسوله‌سازی TLS. .SS http .IX Subsection "http" پروتکل انتقال ابرمتن یا HTTP (Hyper Text Transfer Protocol). .PP این پروتکل گزینه‌های زیر را می‌پذیرد: .IP \fBseekable\fR 4 .IX Item "seekable" قابلیت پیمایش (seekability) اتصال را کنترل می‌کند. اگر روی 1 تنظیم شود فرض می‌شود منبع قابل پیمایش است، اگر روی 0 تنظیم شود فرض می‌شود قابل پیمایش نیست، و اگر روی \-1 تنظیم شود تلاش می‌کند تا قابل پیمایش بودن را به طور خودکار تشخیص دهد. مقدار پیش‌فرض \-1 است. .IP \fBchunked_post\fR 4 .IX Item "chunked_post" اگر روی 1 تنظیم شود از Transfer\-Encoding تکه‌تکه (chunked) برای ارسال‌های POST استفاده می‌کند، پیش‌فرض 1 است. .IP \fBhttp_proxy\fR 4 .IX Item "http_proxy" پروکسی HTTP را برای تونل کردن تعیین می‌کند، مانند http://example.com:1234 .IP \fBheaders\fR 4 .IX Item "headers" سرفصل‌های سفارشی HTTP را تنظیم می‌کند؛ می‌تواند سرفصل‌های پیش‌فرض داخلی را بازنویسی کند. مقدار باید رشته‌ای شامل کدگذاری سرفصل‌ها باشد. .IP \fBcontent_type\fR 4 .IX Item "content_type" یک نوع محتوای (content type) مشخص را برای پیام‌های POST یا برای حالت شنود (listen) تعیین می‌کند. .IP \fBuser_agent\fR 4 .IX Item "user_agent" سرفصل User\-Agent را بازنویسی می‌کند. اگر مشخص نشود، پروتکل از رشته‌ای که ساخت libavformat را توصیف می‌کند استفاده خواهد کرد ("Lavf/"). .IP \fBreferer\fR 4 .IX Item "referer" سرفصل Referer را تنظیم می‌کند. سرفصل \*(AqReferer: URL\*(Aq را در درخواست HTTP می‌گنجاند. .IP \fBmultiple_requests\fR 4 .IX Item "multiple_requests" اگر روی 1 تنظیم شود از اتصالات پایدار (persistent connections) استفاده می‌کند، پیش‌فرض 0 است. .IP \fBrequest_size\fR 4 .IX Item "request_size" اندازه درخواست‌های ارسالی را محدود می‌کند. این گزینه برای برخی سرورهای ناهنجار که درخواست‌های محدوده (range requests) بدون کران را محدود (throttle) می‌کنند و همچنین زمان‌هایی که انتظار پیمایش مکرر وجود دارد مفید است. به طور پیش‌فرض غیرفعال است (روی 0 تنظیم شده است). .Sp توجه داشته باشید که در صورت فعال کردن این گزینه، اکیداً توصیه می‌شود گزینه \fBmultiple_requests\fR را نیز فعال کرده و همچنین \&\fBshort_seek_size\fR را روی همان مقدار یا بیشتر تنظیم کنید. این کار به FFmpeg اجازه می‌دهد تا حد امکان از یک اتصال مجزای HTTP مجدداً استفاده کند. .IP \fBinitial_request_size\fR 4 .IX Item "initial_request_size" اندازه درخواست‌های اولیه را محدود می‌کند. مشابه \f(CW\*(C`request_size\*(C'\fR است، اما فقط در طول تجزیه اولیه قالب استفاده می‌شود. برای قالب‌هایی مانند MXF یا MOV که در حین تجزیه سرفصل نیازمند پیمایش‌های مکرر هستند مفید است. تا زمانی ادامه می‌یابد که دیمالتی‌پلکسر یک درخواست خواندن بزرگ‌تر از این اندازه (بدون پیمایش در این میان) ارسال کند، که پس از آن پیاده‌سازی طبق معمول به ارسال درخواست‌ها ادامه خواهد داد. به طور پیش‌فرض غیرفعال است (روی 0 تنظیم شده است). .Sp توجه داشته باشید که در صورت فعال کردن این گزینه، اکیداً توصیه می‌شود گزینه \fBmultiple_requests\fR را نیز فعال کرده و همچنین \&\fBshort_seek_size\fR را روی همان مقدار یا بیشتر تنظیم کنید. .IP \fBpost_data\fR 4 .IX Item "post_data" داده‌های سفارشی HTTP POST را تعیین می‌کند. .IP \fBmime_type\fR 4 .IX Item "mime_type" نوع MIME را صادر می‌کند. .IP \fBhttp_version\fR 4 .IX Item "http_version" شماره نسخه پاسخ HTTP را صادر می‌کند. معمولاً "1.0" یا "1.1". .IP \fBcookies\fR 4 .IX Item "cookies" کوکی‌هایی را که باید در درخواست‌های بعدی ارسال شوند تنظیم می‌کند. قالب هر کوکی همانند مقدار فیلد پاسخ HTTP به نام Set\-Cookie است. چندین کوکی را می‌توان با نویسه خط جدید از هم جدا کرد. .IP \fBicy\fR 4 .IX Item "icy" اگر روی 1 تنظیم شود، فراداده ICY (SHOUTcast) را از سرور درخواست می‌کند. اگر سرور از این مورد پشتیبانی کند، فراداده باید توسط برنامه با خواندن گزینه‌های \fBicy_metadata_headers\fR و \fBicy_metadata_packet\fR بازیابی شود. مقدار پیش‌فرض 1 است. .IP \fBicy_metadata_headers\fR 4 .IX Item "icy_metadata_headers" اگر سرور از فراداده ICY پشتیبانی کند، این گزینه شامل سرفصل‌های پاسخ HTTP ویژه ICY خواهد بود که با نویسه‌های خط جدید از هم جدا شده‌اند. .IP \fBicy_metadata_packet\fR 4 .IX Item "icy_metadata_packet" اگر سرور از فراداده ICY پشتیبانی کند و \fBicy\fR روی 1 تنظیم شده باشد، این گزینه شامل آخرین بسته فراداده غیرخالی ارسال‌شده توسط سرور خواهد بود. برنامه‌های علاقه‌مند به به‌روزرسانی‌های فراداده در حین استریم باید آن را در فواصل زمانی منظم بررسی (poll) کنند. .IP \fBmetadata\fR 4 .IX Item "metadata" یک دیکشنری صادرشده حاوی فراداده Icecast از جریان بیت را در صورت وجود تنظیم می‌کند. تنها با API زبان C کاربرد دارد. .IP \fBauth_type\fR 4 .IX Item "auth_type" نوع احراز هویت HTTP را تنظیم می‌کند. گزینه‌ای برای دایجِست (Digest) وجود ندارد، زیرا این روش ابتدا نیازمند دریافت پارامترهای نانس (nonce) از سرور است و برخلاف Basic نمی‌تواند بلافاصله استفاده شود. .RS 4 .IP \fBnone\fR 4 .IX Item "none" نوع احراز هویت HTTP را به طور خودکار انتخاب می‌کند. این مقدار پیش‌فرض است. .IP \fBbasic\fR 4 .IX Item "basic" احراز هویت پایه (basic) در HTTP را انتخاب می‌کند. .Sp احراز هویت پایه یک رشته کدگذاری‌شده با Base64 ارسال می‌کند که حاوی نام کاربری و گذرواژه کلاینت است. Base64 نوعی رمزنگاری نیست و باید معادل ارسال نام کاربری و گذرواژه در قالب متن آشکار (clear text) در نظر گرفته شود (Base64 یک کدگذاری برگشت‌پذیر است). اگر منبعی نیاز به محافظت دارد، اکیداً استفاده از یک طرح احراز هویت دیگر به جز احراز هویت پایه را مد نظر قرار دهید. احراز هویت پایه باید همراه با HTTPS/TLS استفاده شود. بدون این بهبودهای امنیتی مضاعف، احراز هویت پایه نباید برای حفاظت از اطلاعات حساس یا ارزشمند به کار گرفته شود. .RE .RS 4 .RE .IP \fBsend_expect_100\fR 4 .IX Item "send_expect_100" یک سرفصل Expect: 100\-continue برای POST ارسال می‌کند. اگر روی 1 تنظیم شود ارسال می‌کند، اگر روی 0 تنظیم شود ارسال نخواهد کرد، و اگر روی \-1 تنظیم شود در صورت مناسب بودن تلاش می‌کند آن را ارسال کند. مقدار پیش‌فرض \-1 است. .IP \fBlocation\fR 4 .IX Item "location" یک دیکشنری صادرشده حاوی مکان محتوا. تنها با API زبان C مفید است. .IP \fBoffset\fR 4 .IX Item "offset" آفست اولیه بایتی را تنظیم می‌کند. .IP \fBend_offset\fR 4 .IX Item "end_offset" تلاش می‌کند تا درخواست را به بایت‌های قبل از این آفست محدود کند. .IP \fBmethod\fR 4 .IX Item "method" هنگامی که به عنوان گزینه کلاینت استفاده شود، متد HTTP را برای درخواست تنظیم می‌کند. .Sp هنگامی که به عنوان گزینه سرور استفاده شود، متد HTTP مورد انتظار از سوی کلاینت(ها) را مشخص می‌کند. اگر متد HTTP مورد انتظار و متد دریافتی مطابقت نداشته باشند، پاسخ Bad Request به کلاینت داده خواهد شد. در صورت تنظیم نشدن، متد HTTP در حال حاضر بررسی نمی‌شود. این رفتار در آینده با تشخیص خودکار جایگزین خواهد شد. .IP \fBreconnect\fR 4 .IX Item "reconnect" در صورت قطع اتصال پیش از رسیدن به EOF، اتصال مجدد را به طور خودکار برقرار می‌کند. .IP \fBreconnect_at_eof\fR 4 .IX Item "reconnect_at_eof" در صورت تنظیم، با eof همانند یک خطا رفتار می‌شود و سبب اتصال مجدد می‌گردد؛ این گزینه برای جریان‌های زنده / بی‌پایان کاربرد دارد. .IP \fBreconnect_on_network_error\fR 4 .IX Item "reconnect_on_network_error" در صورت بروز خطاهای TCP/TLS هنگام اتصال، اتصال مجدد را به طور خودکار برقرار می‌کند. .IP \fBreconnect_on_http_error\fR 4 .IX Item "reconnect_on_http_error" فهرستی جداشده با کاما از کدهای وضعیت HTTP برای اتصال مجدد. این فهرست می‌تواند شامل کدهای وضعیت خاص (مانند \*(Aq503\*(Aq) یا رشته‌های \*(Aq4xx\*(Aq / \*(Aq5xx\*(Aq باشد. .IP \fBreconnect_streamed\fR 4 .IX Item "reconnect_streamed" در صورت تنظیم، حتی جریان‌های زنده و پیوسته/غیرقابل‌پیمایش نیز در زمان بروز خطا مجدداً متصل خواهند شد. .IP \fBreconnect_delay_max\fR 4 .IX Item "reconnect_delay_max" حداکثر تاخیر را بر حسب ثانیه تعیین می‌کند که پس از آن از اتصال مجدد صرف‌نظر می‌شود. .IP \fBreconnect_max_retries\fR 4 .IX Item "reconnect_max_retries" حداکثر تعداد دفعات تلاش مجدد برای اتصال را تنظیم می‌کند. به طور پیش‌فرض تنظیم نشده است. .IP \fBreconnect_delay_total_max\fR 4 .IX Item "reconnect_delay_total_max" حداکثر مجموع تاخیر را بر حسب ثانیه تنظیم می‌کند که پس از آن از اتصال مجدد صرف‌نظر می‌شود. .IP \fBrespect_retry_after\fR 4 .IX Item "respect_retry_after" در صورت فعال بودن و مواجهه با سرفصل Retry\-After، به جای استفاده از عقب‌نشینی نمایی، تاخیر اتصال مجدد درخواست‌شده در آن رعایت خواهد شد. برای خطاهای 429 و 503 مفید است. به طور پیش‌فرض فعال است. .IP \fBlisten\fR 4 .IX Item "listen" اگر روی 1 تنظیم شود سرور آزمایشی HTTP را فعال می‌کند. این گزینه می‌تواند در هنگام استفاده به عنوان گزینه خروجی برای ارسال داده‌ها، یا در هنگام استفاده به عنوان گزینه ورودی برای خواندن داده‌ها از کلاینت با HTTP POST استفاده شود. اگر روی 2 تنظیم شود سرور چندکلاینتی آزمایشی HTTP را فعال می‌کند. این قابلیت هنوز در ffmpeg.c پیاده‌سازی نشده است و بنابراین نباید به عنوان گزینه خط فرمان استفاده شود. .Sp .Vb 2 \& # Server side (sending): \& ffmpeg \-i somefile.ogg \-c copy \-listen 1 \-f ogg http://: \& \& # Client side (receiving): \& ffmpeg \-i http://: \-c copy somefile.ogg \& \& # Client can also be done with wget: \& wget http://: \-O somefile.ogg \& \& # Server side (receiving): \& ffmpeg \-listen 1 \-i http://: \-c copy somefile.ogg \& \& # Client side (sending): \& ffmpeg \-i somefile.ogg \-chunked_post 0 \-c copy \-f ogg http://: \& \& # Client can also be done with wget: \& wget \-\-post\-file=somefile.ogg http://: .Ve .IP \fBresource\fR 4 .IX Item "resource" منبع درخواست‌شده توسط یک کلاینت، در زمانی که سرور آزمایشی HTTP مورد استفاده است. .IP \fBreply_code\fR 4 .IX Item "reply_code" کد HTTP بازگردانده‌شده به کلاینت، در زمانی که سرور آزمایشی HTTP مورد استفاده است. .IP \fBshort_seek_size\fR 4 .IX Item "short_seek_size" آستانه را بر حسب بایت تنظیم می‌کند که چه زمانی یک پیش‌خوانی (readahead) باید بر پیمایش (seek) و درخواست جدید HTTP ترجیح داده شود. این قابلیت به عنوان مثال برای اطمینان از اینکه از همان اتصال برای خواندن بسته‌های بزرگ ویدیویی با بسته‌های کوچک صوتی در میان آن‌ها استفاده می‌شود، سودمند است. .PP \fIکوکی‌های HTTP\fR .IX Subsection "HTTP Cookies" .PP برخی از درخواست‌های HTTP رد خواهند شد مگر اینکه مقادیر کوکی همراه با درخواست ارسال شوند. گزینه \fBcookies\fR امکان تعیین این کوکی‌ها را فراهم می‌کند. در کمترین حالت، هر کوکی باید یک مقدار را به همراه مسیر و دامنه مشخص کند. درخواست‌های HTTP که با هر دوی دامنه و مسیر مطابقت داشته باشند، به طور خودکار مقدار کوکی را در فیلد سرفصل HTTP Cookie می‌گنجانند. چندین کوکی را می‌توان با نویسه خط جدید از هم جدا کرد. .PP نحو مورد نیاز برای پخش جریانی با تعیین کوکی به این صورت است: .PP .Vb 1 \& ffplay \-cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8 .Ve .SS Icecast .IX Subsection "Icecast" پروتکل Icecast (ارسال جریان به سرورهای Icecast) .PP این پروتکل گزینه‌های زیر را می‌پذیرد: .IP \fBice_genre\fR 4 .IX Item "ice_genre" ژانر جریان را تعیین می‌کند. .IP \fBice_name\fR 4 .IX Item "ice_name" نام جریان را تعیین می‌کند. .IP \fBice_description\fR 4 .IX Item "ice_description" توضیحات جریان را تعیین می‌کند. .IP \fBice_url\fR 4 .IX Item "ice_url" نشانی اینترنتی وب‌سایت جریان را تعیین می‌کند. .IP \fBice_public\fR 4 .IX Item "ice_public" مشخص می‌کند که آیا جریان باید عمومی باشد یا خیر. پیش‌فرض 0 است (غیرعمومی). .IP \fBuser_agent\fR 4 .IX Item "user_agent" سرفصل User\-Agent را بازنویسی می‌کند. در صورت عدم تعیین، رشته‌ای به شکل "Lavf/" استفاده خواهد شد. .IP \fBpassword\fR 4 .IX Item "password" گذرواژه نقطه اتصال (mountpoint) در Icecast را تعیین می‌کند. .IP \fBcontent_type\fR 4 .IX Item "content_type" نوع محتوای جریان را تعیین می‌کند. اگر با audio/mpeg تفاوت داشته باشد باید تنظیم شود. .IP \fBlegacy_icecast\fR 4 .IX Item "legacy_icecast" پشتیبانی از نسخه‌های Icecast کمتر از 2.4.0 را فعال می‌کند که از متد HTTP PUT پشتیبانی نمی‌کنند بلکه متد SOURCE را به کار می‌برند. .IP \fBtls\fR 4 .IX Item "tls" یک اتصال TLS (HTTPS) با Icecast برقرار می‌کند. .PP .Vb 1 \& icecast://[[:]@]:/ .Ve .SS ipfs .IX Subsection "ipfs" پشتیبانی از پروتکل سامانه پرونده میان‌سیاره‌ای یا IPFS (InterPlanetary File System). افراد می‌توانند از طریق آنچه دروازه (gateway) نامیده می‌شود به پرونده‌های ذخیره‌شده روی شبکه IPFS دسترسی پیدا کنند. این‌ها نقاط پایانی http(s) هستند. این پروتکل، پروتکل‌های بومی IPFS (شامل ipfs:// و ipns://) را بسته‌بندی می‌کند تا به چنین دروازه‌ای ارسال شوند. کاربران می‌توانند (و باید) گره خود را میزبانی کنند، که به این معنی است که این پروتکل از دروازه محلی کاربر برای دسترسی به پرونده‌ها در شبکه IPFS استفاده خواهد کرد. .PP این پروتکل گزینه‌های زیر را می‌پذیرد: .IP \fBgateway\fR 4 .IX Item "gateway" دروازه مورد استفاده را مشخص می‌کند. در صورت عدم تنظیم، پروتکل ابتدا با بررسی \f(CW$IPFS_GATEWAY\fR، \f(CW$IPFS_PATH\fR و \f(CW\*(C`$HOME/.ipfs/\*(C'\fR به همین ترتیب، تلاش می‌کند دروازه محلی را پیدا کند. .PP می‌توان از این پروتکل به ۲ روش استفاده کرد. استفاده از IPFS: .PP .Vb 1 \& ffplay ipfs:// .Ve .PP یا پروتکل IPNS (که همان IPFS تغییرپذیر است): .PP .Vb 1 \& ffplay ipns:// .Ve .SS mmst .IX Subsection "mmst" پروتکل MMS (Microsoft Media Server) بر روی TCP. .SS mmsh .IX Subsection "mmsh" پروتکل MMS (Microsoft Media Server) بر روی HTTP. .PP نحو مورد نیاز به این صورت است: .PP .Vb 1 \& mmsh://[:][/][/] .Ve .SS md5 .IX Subsection "md5" پروتکل خروجی MD5. .PP هش MD5 داده‌های نوشته‌شدنی را محاسبه می‌کند و در هنگام بستن، آن را در خروجی تعیین‌شده یا در صورت عدم تعیین در خروجی استاندارد (stdout) می‌نویسد. می‌توان از آن برای آزمایش مالتی‌پلکسرها بدون نوشتن یک پرونده واقعی استفاده کرد. .PP در ادامه چند نمونه آمده است. .PP .Vb 2 \& # 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: .Ve .PP توجه داشته باشید که برخی از قالب‌ها (به ویژه MOV) نیاز دارند که پروتکل خروجی قابلیت پیمایش (seekable) داشته باشد، بنابراین با پروتکل خروجی MD5 با خطا مواجه می‌شوند. .SS pipe .IX Subsection "pipe" پروتکل دسترسی به لوله (pipe) یونیکس. .PP خواندن و نوشتن از لوله‌های یونیکس. .PP نحو پذیرفته‌شده به این صورت است: .PP .Vb 1 \& pipe:[] .Ve .PP اگر \fBfd\fR مشخص نشده باشد، \fInumber\fR عددی متناظر با توصیف‌کننده پرونده (file descriptor) لوله است (به عنوان مثال 0 برای stdin، 1 برای stdout، و 2 برای stderr). اگر \fInumber\fR مشخص نشده باشد، به طور پیش‌فرض توصیف‌کننده پرونده stdout برای نوشتن و stdin برای خواندن استفاده خواهد شد. .PP به عنوان مثال برای خواندن از stdin با \fBffmpeg\fR: .PP .Vb 3 \& cat test.wav | ffmpeg \-i pipe:0 \& # ...this is the same as... \& cat test.wav | ffmpeg \-i pipe: .Ve .PP برای نوشتن در stdout با \fBffmpeg\fR: .PP .Vb 3 \& 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 .Ve .PP این پروتکل گزینه‌های زیر را می‌پذیرد: .IP \fBblocksize\fR 4 .IX Item "blocksize" حداکثر اندازه بلوک عملیات ورودی/خروجی (I/O) را بر حسب بایت تنظیم می‌کند. مقدار پیش‌فرض \&\f(CW\*(C`INT_MAX\*(C'\fR است، که به عدم محدود کردن اندازه بلوک درخواستی می‌انجامد. تنظیم این مقدار در سطحی به اندازه کافی کم، زمان واکنش به درخواست قطع کاربر را بهبود می‌بخشد که در صورت کند بودن انتقال داده‌ها بسیار ارزشمند است. .IP \fBfd\fR 4 .IX Item "fd" توصیف‌کننده پرونده را تنظیم می‌کند. .PP توجه داشته باشید که برخی از قالب‌ها (به ویژه MOV)، نیاز دارند که پروتکل خروجی قابلیت پیمایش (seekable) داشته باشد، بنابراین با پروتکل خروجی لوله با خطا مواجه می‌شوند. .SS prompeg .IX Subsection "prompeg" پروتکل FEC بر اساس Pro\-MPEG Code of Practice #3 Release 2. .PP سازوکار Pro\-MPEG CoP#3 FEC یک سازوکار تصحیح خطای رو به جلو (forward error correction) با بررسی توازن دو بعدی (2D parity\-check) برای جریان‌های انتقال MPEG\-2 (Transport Streams) ارسال‌شده بر روی RTP است. .PP این پروتکل باید همراه با مالتی‌پلکسر \f(CW\*(C`rtp_mpegts\*(C'\fR و پروتکل \f(CW\*(C`rtp\*(C'\fR استفاده شود. .PP نحو مورد نیاز به این صورت است: .PP .Vb 1 \& \-f rtp_mpegts \-fec prompeg=