Annotation of multiplexer/iso13818ps.1, revision 1.2

1.1       oskar       1: .\" Man page for iso13818ps
                      2: .\"
                      3: .\" Copyright (C) 2001, Convergence Integrated Media GmbH
                      4: .\" Author: Oskar Schirmer
                      5: .\"
1.2     ! oskar       6: .TH iso13818ps 1 "August 30th, 2001" "0.0.2" "Multiplexer"
1.1       oskar       7: .SH NAME
                      8: iso13818ps \- multiplexer for ISO 13818 program streams
1.2     ! oskar       9: .SH SYNOPSIS
        !            10: iso13818ps [COMMAND...]
        !            11: .SH DESCRIPTION
        !            12: Generates an ISO 13818-1 conforming program stream from multiple
        !            13: input streams.
        !            14: The result is sent to \fIstdout\fR,
        !            15: the input streams are read from explicitely opened files.
        !            16: All of the following commands may also be fed to \fIstdin\fR during
        !            17: operation by omitting the leading hyphen (e.g. \fBQ\fR) or
        !            18: double-hyphen (e.g. \fBquit\fR).
        !            19: .TP
        !            20: \fB\-\-help\fR
        !            21: Display this help.
        !            22: .TP
        !            23: \fB\-V\fR, \fB\-\-version\fR
        !            24: Output version information.
        !            25: .TP
        !            26: \fB\-Q\fR, \fB\-\-quit\fR
        !            27: Quit this program.
        !            28: .TP
        !            29: \fB\-v\fR, \fB\-\-verbose\fR [\fIlevel\fR]
        !            30: Verbose mode, \fIlevel\fR = 0..6, default is 2 (providing warnings
        !            31: concerning data errors), initial verbosity is 1 (providing only
        !            32: program errors).
        !            33: .TP
        !            34: \fB\-p\fR, \fB\-\-pes\fR \fIfile\fR
        !            35: Open a PES input \fIfile\fR,
        !            36: output the contained stream.
        !            37: .TP
        !            38: \fB\-p\fR, \fB\-\-pes\fR \fIfile\fR \fItarget_stream_id\fR
        !            39: Open a PES input \fIfile\fR,
        !            40: output the contained stream
        !            41: with \fItarget_stream_id\fR (recommended range 0xBD..0xFE).
        !            42: The \fIfile\fR may be specified as \fB=\fR to denote
        !            43: the last previously mentioned file.
        !            44: .TP
        !            45: \fB\-P\fR, \fB\-\-ps\fR \fIfile\fR
        !            46: Open a PS input \fIfile\fR,
        !            47: output the contained program.
        !            48: .TP
        !            49: \fB\-P\fR, \fB\-\-ps\fR \fIfile\fR \fIsource_stream_id\fR [\fItarget_stream_id\fR]
        !            50: Open a PS input \fIfile\fR,
        !            51: extract the stream with \fIsource_stream_id\fR (range 0x00..0xFF)
        !            52: and output that stream
        !            53: with \fItarget_stream_id\fR (recommended range 0xBD..0xFE).
        !            54: If no \fItarget_stream_id\fR is given, \fIsource_stream_id\fR is used instead.
        !            55: The \fIfile\fR may be specified as \fB=\fR to denote
        !            56: the last previously mentioned file.
        !            57: .TP
        !            58: \fB\-T\fR, \fB\-\-ts\fR \fIfile\fR
        !            59: Open a TS input \fIfile\fR,
        !            60: extract all programs from it and output them.
        !            61: .TP
        !            62: \fB\-T\fR, \fB\-\-ts\fR \fIfile\fR \fIsource_program\fR
        !            63: Open a TS input \fIfile\fR,
        !            64: extract the program \fIsource_program\fR (range 0x0001..0xFFFF)
        !            65: and output that program.
        !            66: The \fIfile\fR may be specified as \fB=\fR to denote
        !            67: the last previously mentioned file.
        !            68: .TP
        !            69: \fB\-T\fR, \fB\-\-ts\fR \fIfile\fR \fIsource_program\fR \fIsource_stream_id\fR [\fItarget_stream_id\fR]
        !            70: Open a TS input \fIfile\fR,
        !            71: extract the stream with \fIsource_stream_id\fR (range 0x00..0xFF)
        !            72: from the program \fIsource_program\fR (range 0x0001..0xFFFF)
        !            73: and output that stream as \fItarget_stream_id\fR (recommended range 0xBD..0xFE)
        !            74: .
        !            75: If no \fItarget_stream_id\fR is given, use \fIsource_stream_id\fR instead.
        !            76: The \fIfile\fR may be specified as \fB=\fR to denote
        !            77: the last previously mentioned file.
        !            78: .TP
        !            79: \fB\-T\fR, \fB\-\-ts\fR \fIfile\fR 0 \fIsource_stream_id\fR [\fItarget_stream_id\fR]
        !            80: As before, but extract a stream with \fIsource_stream_id\fR (range 0x00..0xFF)
        !            81: from a transport stream with broken or missing PAT/PMT information.
        !            82: The stream is opened only, if there is \fBnot\fR any entry in the
        !            83: tables for that stream.
        !            84: Note, that if there is more than one stream with the given
        !            85: \fIsource_stream_id\fR,
        !            86: only one matching stream will be opened, and
        !            87: the choice is not deterministic.
        !            88: .TP
        !            89: \fB\-c\fR, \fB\-\-close\fR \fIfile\fR
        !            90: Close input \fIfile\fR, as if eof is reached.
        !            91: In combination with \fB\-\-repeat\fR this causes the next repeatition
        !            92: to start immediately.
        !            93: Note, that the input data file is cut of as is, i.e. no attempt
        !            94: is made to close the file on a clean audio or video frame border.
        !            95: .TP
        !            96: \fB\-a\fR, \fB\-\-append\fR \fIfile1\fR \fIfile2\fR [\fInum\fR]
        !            97: Earmark another \fIfile2\fR to be opened as soon as \fIfile1\fR
        !            98: comes to its end.
        !            99: The appended \fIfile2\fR is foreseen to be repeated \fInum\fR
        !           100: times, default is 1 (see \fB\-\-repeat\fR).
        !           101: Both files must contain the same type of data,
        !           102: as the data of both files is chained without considering clean
        !           103: transition of audio or video sequences.
        !           104: The \fIfile1\fR may be specified as \fB=\fR to denote
        !           105: the last previously mentioned file.
        !           106: .TP
        !           107: \fB\-f\fR, \fB\-\-file\fR \fIreference_number\fR \fIfile_name\fR
        !           108: The positive \fIreference_number\fR is associated with a \fIfile_name\fR.
        !           109: For all following commands, the \fIreference_number\fR may be
        !           110: used instead of the \fIfile_name\fR. This allows better control
        !           111: over file handles, as the same file may be addressed via different
        !           112: \fIreference_number\fRs.
        !           113: .TP
        !           114: \fB\-x\fR, \fB\-\-crop\fR [\fItarget_stream_id\fR]
        !           115: Delete a stream given by \fItarget_stream_id\fR,
        !           116: or the complete program
        !           117: from the output.
        !           118: The corresponding input file(s) will be closed, if not needed otherwise.
        !           119: .TP
        !           120: \fB\-r\fR, \fB\-\-repeat\fR \fIfile\fR \fInum\fR
        !           121: Set the repeatition counter for \fIfile\fR to \fInum\fR
        !           122: (or to infinite if \fInum\fR=0).
        !           123: The file will be reset as soon as eof is reached
        !           124: (or it is closed by the command \fB\-\-close\fR).
        !           125: Note, that the file will be reset without considering clean transition
        !           126: of audio or video sequences at the restart point.
        !           127: The \fIfile\fR may be specified as \fB=\fR to denote
        !           128: the last previously mentioned file.
        !           129: .TP
        !           130: \fB\-R\fR, \fB\-\-reopen\fR
        !           131: This command shall precede one of the commands that open a new file
        !           132: (i.e. \fB\-\-pes\fR, \fB\-\-ps\fR or \fB\-\-ts\fR must follow
        !           133: \fIon the same line\fR).
        !           134: The next file will be opened with a new file handle,
        !           135: regardless of whether the same file is yet open or not.
        !           136: .TP
        !           137: \fB\-\-descr\fR [\fIdescr_tag\fR [\fIdescr_length\fR \fIdata\fR...]]
        !           138: Add, inhibit or delete in the PMT section a descriptor,
        !           139: that does \fBnot\fR belong to a specific stream.
        !           140: To add a descriptor, all parameters must be given,
        !           141: \fIdescr_tag\fR (range 0x00..0xFF),
        !           142: \fIdescr_length\fR (range 1..255),
        !           143: and the appropriate amount of bytes given as \fIdata\fR (range 0x00..0xFF).
        !           144: To inhibit any descriptor with a given \fIdescr_tag\fR,
        !           145: \fIdescr_length\fR is set to \fB0\fR and no \fIdata\fR is given.
        !           146: This causes matching descriptors from input streams to
        !           147: be discarded instead of being copied to the target stream.
        !           148: To delete the manual setting of a descriptor,
        !           149: \fIdescr_length\fR is omitted. This causes descriptors
        !           150: with matching \fIdescr_tag\fR to be passed from input to
        !           151: the target stream.
        !           152: To delete all manual settings,
        !           153: that do \fBnot\fR belong to a specific stream,
        !           154: the \fIdescr_tag\fR is omitted, too.
        !           155: Note, that \fB\-\-descr\fR never modifies descriptors,
        !           156: that belong to a specific stream.
        !           157: To modify these, use the command \fB\-\-sdescr\fR.
        !           158: .TP
        !           159: \fB\-\-sdescr\fR [\fIstream_id\fR [\fIdescr_tag\fR [\fIdescr_length\fR \fIdata\fR...]]]
        !           160: Add, inhibit or delete in the PMT section a descriptor,
        !           161: that does belong to a specific stream.
        !           162: To add a descriptor, all parameters must be given,
        !           163: \fIstream_id\fR (recommended range 0xBD..0xFE),
        !           164: \fIdescr_tag\fR (range 0x00..0xFF),
        !           165: \fIdescr_length\fR (range 1..255),
        !           166: and the appropriate amount of bytes given as \fIdata\fR (range 0x00..0xFF).
        !           167: To inhibit any descriptor with a given \fIdescr_tag\fR,
        !           168: \fIdescr_length\fR is set to \fB0\fR and no \fIdata\fR is given.
        !           169: This causes matching descriptors from the corresponding input streams to
        !           170: be discarded instead of being copied to the target stream.
        !           171: To delete the manual setting of a descriptor,
        !           172: \fIdescr_length\fR is omitted. This causes descriptors
        !           173: with matching \fIdescr_tag\fR to be passed from input to
        !           174: the target stream.
        !           175: To delete all manual settings for a \fIstream_id\fR,
        !           176: the \fIdescr_tag\fR is omitted, too.
        !           177: To delete all manual settings for all streams \fBand\fR those
        !           178: that do not belong to a specific stream,
        !           179: the \fIstream_id\fR is omitted, too.
        !           180: .TP
        !           181: \fB\-B\fR, \fB\-\-busy\fR [\fInum\fR]
        !           182: Set the busy flag to \fInum\fR (range 0..1, default is 1).
        !           183: Whenever the program has no more data to handle and
        !           184: the busy flag is not set, it stops.
        !           185: .TP
        !           186: \fB\-\-timed\fR
        !           187: Force delay timing, even if solely disk files are in use.
        !           188: If not so, if delay is to be awaited while processing regular files,
        !           189: the delay is skipped instead and timing information in the resulting
        !           190: file is adjusted accordingly.
        !           191: .TP
        !           192: \fB\-F\fR, \fB\-\-fpsi\fR \fItime\fR
        !           193: Set the PSI table frequency to \fItime\fR msec
        !           194: (or to infinite if \fItime\fR=0, initial value is infinite).
        !           195: The PAT and PMT will be generated at more or less the given
        !           196: frequency, even if the tables did not change.
        !           197: In any case, the next tables will be generated immediately.
        !           198: .TP
        !           199: \fB\-\-trigin\fR \fItime\fR
        !           200: Set the input buffer trigger timing to \fItime\fR.
        !           201: For any input stream, that is newly opened
        !           202: (or has to be retriggered, e.g. due to intermediate emptiness),
        !           203: the buffer is triggered for promotion to the splice unit
        !           204: with a delay of \fItime\fR msec compared to the time
        !           205: of data entrance into the buffer.
        !           206: For any stream yet triggered the timing is not changed
        !           207: unless retriggering takes place.
        !           208: Not affected by this value are the other trigger conditions,
        !           209: mainly a certain buffer fullness
        !           210: and cotriggering with a corresponding stream that is triggered.
        !           211: .TP
        !           212: \fB\-\-trigout\fR \fItime\fR
        !           213: Set the output buffer trigger timing to \fItime\fR.
        !           214: As the output buffer is triggered for promotion to \fIstdout\fR,
        !           215: this is done with a delay of \fItime\fR msec compared to the time
        !           216: of data entrance into the buffer.
        !           217: The new timing is only valid if set before the first triggering
        !           218: of the output buffer,
        !           219: or if retriggering takes place, e.g. due to intermediate emptiness.
        !           220: Not affected by this value is the trigger condition
        !           221: of a certain buffer fullness.
        !           222: .TP
        !           223: \fB\-C\fR, \fB\-\-config\fR \fInum\fR
        !           224: Order output configuration of target stream with \fInum\fR=1,
        !           225: switch off with \fInum\fR=0.
        !           226: Set \fInum\fR=2, to get information about descriptors, too.
        !           227: When switched on, the configuration is printed each time it changes.
        !           228: First, the number of programs is printed,
        !           229: then for each program one line of description and
        !           230: for each stream within that program another line is printed.
        !           231: When \fInum\fR=2, then for each descriptor there is printed one more line.
        !           232: The following values are compiled:
        !           233: .RS
        !           234: .TP
        !           235: \fIprogs\fR
        !           236: Number of programs in target stream.
        !           237: .TP
        !           238: \fIprog\fR
        !           239: Program number within target stream.
        !           240: .TP
        !           241: \fIpmt\fR
        !           242: PMT PID for the program.
        !           243: .TP
        !           244: \fIpcr\fR
        !           245: PCR PID for the program.
        !           246: .TP
        !           247: \fIstreams\fR
        !           248: Number of streams in the program.
        !           249: .TP
        !           250: \fIstream\fR
        !           251: Stream PID.
        !           252: .TP
        !           253: \fItype\fR
        !           254: Stream type (according to ISO 13818-1 table 2-29).
        !           255: .TP
        !           256: \fIsid\fR
        !           257: PES stream ID.
        !           258: .TP
        !           259: \fIfile\fR
        !           260: Source file contents type (PES=0, PS=1, TS=2).
        !           261: .TP
        !           262: \fIsource\fR
        !           263: Stream index in source file (SID for PS, PID for TS).
        !           264: .TP
        !           265: \fInum\fR
        !           266: Source file reference number (-1 if none).
        !           267: .TP
        !           268: \fIname\fR
        !           269: Source file name.
        !           270: .TP
        !           271: \fIdescr\fR
        !           272: Descriptor tag.
        !           273: .TP
        !           274: \fIlen\fR
        !           275: Descriptor length, number of data bytes in the descriptor.
        !           276: .TP
        !           277: \fIdata\fR
        !           278: Descriptor data, bytewise.
        !           279: .RE
        !           280: .TP
        !           281: \fB\-S\fR, \fB\-\-statistics\fR \fItime\fR
        !           282: Order output load statistics to be generated about every
        !           283: \fItime\fR msec.
        !           284: Switch off with \fItime\fR=0.
        !           285: The statistics are written to \fIstderr\fR linewise,
        !           286: the following values are calculated:
        !           287: .RS
        !           288: .TP
        !           289: \fInow\fR
        !           290: Internal clock in msec.
        !           291: .TP
        !           292: \fIout\fR
        !           293: Number of bytes written to stdout since last statistics,
        !           294: and number of write operations needed.
        !           295: .TP
        !           296: \fIbuf\fR
        !           297: Number of bytes in the output buffers (lower and upper bound).
        !           298: .TP
        !           299: \fItime\fR
        !           300: Time in msec, for how long the contents of the
        !           301: output buffers should suffice (lower and upper bound).
        !           302: .TP
        !           303: \fIburst\fR
        !           304: Size of write burst, i.e. number of bytes prepared to
        !           305: be written in a single write operation (lower and upper bound).
        !           306: .RE
        !           307: .TP
        !           308: \fB\-\-badtiming\fR
        !           309: In conjunction with a program stream originating from a DVB-s
        !           310: digital TV receiver card, You might want to automatically
        !           311: correct some of the PCR values produced by that card, to
        !           312: prevent discontinuities in the output.
        !           313: .SH OVERVIEW
        !           314: The multiplexer is designed to run uninterrupted and
        !           315: be controlled via \fIstdin\fR and \fIstderr\fR.
        !           316: It is designed to process data in real time,
        !           317: i.e. if the processing is not performed fast
        !           318: enough (e.g. because of low processor performance),
        !           319: errors in the resulting data may occur, namely
        !           320: concerning the timing.
        !           321: The multiplexer may be invoked interactively with
        !           322: the streams to process given as command line options
        !           323: or with the commands to be processed typed into
        !           324: \fIstdin\fR during operation.
        !           325: The latter type of usage is also designed for use
        !           326: with an user interface front-end, that may
        !           327: translate some GUI input to iso13818ps commands
        !           328: and filter its responses to be presented to the user
        !           329: as appropriate.
        !           330: .P
        !           331: Three different types of input are supported:
        !           332: Paketized elementary streams (PES),
        !           333: Program streams (PS),
        !           334: Transport streams (TS).
        !           335: .P
        !           336: Numeric parameters may be given in decimal (e.g. 31)
        !           337: or in hex (e.g. 0x1F).
        !           338: .SH DETAILS
        !           339: The output file or device does not change throughout the
        !           340: time the program runs. The input files, however, may vary.
        !           341: Also the contents of an input file may vary, but not its
        !           342: type. E.g., a file opened as program stream must contain
        !           343: valid program stream data up to its end (and including
        !           344: any files that are appended to this file with \fB\-\-append\fR).
        !           345: .P
        !           346: All basic PSI is evaluated contiguously, and changes in
        !           347: the configuration (changing PID, etc.) are taken into
        !           348: account and tracked. Thus a stream should not get lost
        !           349: simply because its PID is changed in the middle of the
        !           350: broadcast.
        !           351: .SH EXAMPLES
        !           352: To convert a program stream file x.PS to a program stream file y.PS,
        !           353: and System Header and Stream Map generated about every half second:
        !           354: .IP
        !           355: $ iso13818ps --fpsi 500 --ps x.PS > y.PS
        !           356: .PP
        !           357: If the program stream doesn't contain correct PSI,
        !           358: the single streams may be extracted one by one. Assuming
        !           359: one video stream (0xE0) and mono audio (0xC0):
        !           360: .IP
        !           361: $ iso13818ps --fpsi 500 --ps x.PS 0xE0 --ps = 0xC0 > y.PS
        !           362: .PP
        !           363: To bundle two streams originating from video devices and
        !           364: send them out to a video output device, e.g.:
        !           365: .IP
        !           366: $ iso13818ps -F 500 -P /dev/video0 -P /dev/video1 > /dev/video2
        !           367: .PP
        !           368: .PP
        !           369: To invoke the multiplexer for interactive use, it must
        !           370: be put in all-time-busy-mode. Subsequently, commands can
        !           371: be fed to \fIstdin\fR, e.g. to do the same as with the
        !           372: first example:
        !           373: .IP
        !           374: $ iso13818ps --busy > y.PS
        !           375: .br
        !           376: fpsi 500
1.1       oskar     377: .br
1.2     ! oskar     378: ps x.PS
        !           379: .PP
        !           380: This instance of the multiplexer will not cease when the
        !           381: end of file in x.PS is reached. To stop the multiplexer,
        !           382: either \fBquit\fR or \fBbusy 0\fR may be typed to \fIstdin\fR.
        !           383: .P
        !           384: To output a movie repeatedly (e.g. seven times):
        !           385: .IP
        !           386: $ iso13818ps -F 500 --ps thepurpleroseofcairo.PS --repeat = 7 > /dev/video2
        !           387: .PP
        !           388: Note, that if during the movie is processed, the command
        !           389: .IP
        !           390: close thepurpleroseofcairo.PS
        !           391: .PP
        !           392: is issued, and supposed it is not yet processed the seventh time,
        !           393: it is not closed, but restarted immediately.
        !           394: .P
        !           395: To concatenate two movies and output them in sequence:
        !           396: .IP
        !           397: $ iso13818ps -F 500 --ps rambo1.PS --append = rambo2.PS > /dev/video2
        !           398: .PP
        !           399: Note, that a file can only be appended to a file, that is
        !           400: yet in use (i.e. being processed). Thus, it is not possible
        !           401: to append a third movie (rambo3.PS) from within the command
        !           402: line. Instead, the processing of the second movie must be
        !           403: awaited, and then the following command can be fed to \fIstdin\fR:
        !           404: .IP
        !           405: append rambo2.PS rambo3.PS
        !           406: .PP
        !           407: If the source is a transport stream with broken or
        !           408: missing PSI (i.e. PAT/PMT), and if further it can
        !           409: be assumed, that there is only one program to be found
        !           410: in the stream, then the \fIsource program number\fR
        !           411: can be specified as \fB0\fR. With the following
        !           412: example, one video and one audio stream are extracted
        !           413: (the first one found, if more than one exist):
        !           414: .IP
        !           415: $ iso13818ps -F 500 -T deficient.TS 0 0xE0 -T = 0 0xC0 > complete.PS
        !           416: .PP
        !           417: .SH "KNOWN PROBLEMS"
        !           418: The program might not work in conjunction with device drivers
        !           419: that do not deliver or accept data unless a first read or write
        !           420: is done on the device. E.g., for a MPEG video data source, that
        !           421: does not produce output without being triggered by being read
        !           422: from, this program will await the readability of the first
        !           423: data infinitely. On the other hand it is obvious that the driver
        !           424: should not encode data as long as there is no application that
        !           425: will read this data.
        !           426: One possibly solution to this dilemma is to patch such a driver
        !           427: to interpret the \fIpoll\fR command as an order for data, thus
        !           428: triggering the read mechanisms. Analogous considerations hold
        !           429: for polling the output device and writing to it.
        !           430: .P
        !           431: Paketized elementary streams do not necessarily contain
        !           432: usable time stamps, so when multiplexing raw PES, streams
        !           433: belonging together may be out of sync. This is especially
        !           434: noteworthy in case streams shall be demultiplexed and then
        !           435: again multiplexed in some way. Results will always be better
        !           436: when this remultiplexing takes place entirely within the
        !           437: multiplexer, because that way timing information won't get lost.
        !           438: .SH BUGS
        !           439: End of action sometimes is not detected correctly, which
        !           440: causes the multiplexer to hang.
        !           441: Nevertheless, it then can be stopped by the \fBquit\fR command.
        !           442: .P
        !           443: Changing configuration is not printed if the change
        !           444: is solely a descriptor coming from a source file.
        !           445: .SH "SEE ALSO"
        !           446: .BR iso13818ts (1),
        !           447: .BR ISO\ 13818-1 ,
        !           448: .BR ETSI\ EN\ 300\ 468 .
1.1       oskar     449: .SH AUTHOR
                    450: Oskar Schirmer (oskar@convergence.de).

LinuxTV legacy CVS <linuxtv.org/cvs>