Build man pages

And add install targets for them
Also fix a few small documentation issues in the source
master
John Cox 2015-10-29 18:23:25 +00:00
rodzic beb9855a81
commit f1d24ff47e
24 zmienionych plików z 2609 dodań i 291 usunięć

103
Makefile
Wyświetl plik

@ -39,10 +39,14 @@ prefix=/usr/local
exec_prefix=$(prefix)
bindir=$(exec_prefix)/bin
libdir=$(exec_prefix)/lib
mandir=/usr/local/man
man1dir=$(mandir)/man1
manext=.1
INSTALL=install
INSTALL_PROGRAM=$(INSTALL) -m 0555 -s
INSTALL_LIB=$(INSTALL) -m 0444 -s
INSTALL_DATA=$(INSTALL) -m 0444
ifdef CROSS_COMPILE
@ -101,6 +105,7 @@ LDFLAGS = -g $(PROFILE_FLAGS) $(ARCH_FLAGS) -lm
OBJDIR = obj
LIBDIR = lib
BINDIR = bin
MANDIR = docs/mdoc
# All of our non-program object modules
OBJS = \
@ -167,10 +172,12 @@ STATIC_LIB = $(LIBDIR)/libtstools.a
LIBOPTS = $(ARCH_FLAGS) $(STATIC_LIB)
ifeq ($(shell uname -s), Darwin)
SHARED_LIB = $(LIBDIR)/libtstools.xxx
SHARED_LIB_NAME = libtstools.xxx
else
SHARED_LIB = $(LIBDIR)/libtstools.so
SHARED_LIB_NAME = libtstools.so
endif
SHARED_LIB = $(LIBDIR)/$(SHARED_LIB_NAME)
# All of our programs (except the testing ones)
PROGS = \
$(BINDIR)/esfilter \
@ -207,7 +214,6 @@ TEST_PROGS = test_nal_unit_list test_es_unit_list
# ------------------------------------------------------------
all: $(BINDIR) $(LIBDIR) $(OBJDIR) $(PROGS) $(SHARED_LIB)
echo "BINDIR=$(BINDIR), bindir=$(bindir)"
# ts2ps is not yet an offical program, so for the moment build
# it separately
@ -404,13 +410,61 @@ $(OBJDIR)/test_es_unit_list.o: test_es_unit_list.c $(ES_H) version.h
# ------------------------------------------------------------
# Directory creation
$(OBJDIR) $(LIBDIR) $(BINDIR) $(DESTDIR)$(bindir) $(DESTDIR)$(libdir):
$(OBJDIR) $(LIBDIR) $(BINDIR) $(DESTDIR)$(bindir) $(DESTDIR)$(libdir) $(DESTDIR)$(man1dir):
mkdir -p $@
# ------------------------------------------------------------
.PHONY: install
install: all $(DESTDIR)$(bindir) $(DESTDIR)$(libdir)
.PHONY: install-man
install-man: $(DESTDIR)$(man1dir)
$(INSTALL_DATA) $(MANDIR)/esfilter.1 $(DESTDIR)$(man1dir)/esfilter$(manext)
$(INSTALL_DATA) $(MANDIR)/ts2es.1 $(DESTDIR)$(man1dir)/ts2es$(manext)
$(INSTALL_DATA) $(MANDIR)/es2ts.1 $(DESTDIR)$(man1dir)/es2ts$(manext)
$(INSTALL_DATA) $(MANDIR)/esdots.1 $(DESTDIR)$(man1dir)/esdots$(manext)
$(INSTALL_DATA) $(MANDIR)/esmerge.1 $(DESTDIR)$(man1dir)/esmerge$(manext)
$(INSTALL_DATA) $(MANDIR)/esreport.1 $(DESTDIR)$(man1dir)/esreport$(manext)
$(INSTALL_DATA) $(MANDIR)/esreverse.1 $(DESTDIR)$(man1dir)/esreverse$(manext)
$(INSTALL_DATA) $(MANDIR)/stream_type.1 $(DESTDIR)$(man1dir)/stream_type$(manext)
$(INSTALL_DATA) $(MANDIR)/psreport.1 $(DESTDIR)$(man1dir)/psreport$(manext)
$(INSTALL_DATA) $(MANDIR)/psdots.1 $(DESTDIR)$(man1dir)/psdots$(manext)
$(INSTALL_DATA) $(MANDIR)/ps2ts.1 $(DESTDIR)$(man1dir)/ps2ts$(manext)
$(INSTALL_DATA) $(MANDIR)/tsinfo.1 $(DESTDIR)$(man1dir)/tsinfo$(manext)
$(INSTALL_DATA) $(MANDIR)/tsreport.1 $(DESTDIR)$(man1dir)/tsreport$(manext)
$(INSTALL_DATA) $(MANDIR)/tsserve.1 $(DESTDIR)$(man1dir)/tsserve$(manext)
$(INSTALL_DATA) $(MANDIR)/tsplay.1 $(DESTDIR)$(man1dir)/tsplay$(manext)
$(INSTALL_DATA) $(MANDIR)/ts_packet_insert.1 $(DESTDIR)$(man1dir)/ts_packet_insert$(manext)
$(INSTALL_DATA) $(MANDIR)/m2ts2ts.1 $(DESTDIR)$(man1dir)/m2ts2ts$(manext)
$(INSTALL_DATA) $(MANDIR)/pcapreport.1 $(DESTDIR)$(man1dir)/pcapreport$(manext)
$(INSTALL_DATA) $(MANDIR)/tsfilter.1 $(DESTDIR)$(man1dir)/tsfilter$(manext)
$(INSTALL_DATA) $(MANDIR)/tsdvbsub.1 $(DESTDIR)$(man1dir)/tsdvbsub$(manext)
$(INSTALL_DATA) $(MANDIR)/rtp2264.1 $(DESTDIR)$(man1dir)/rtp2264$(manext)
.PHONY: uninstall-man
uninstall-man:
rm -f $(DESTDIR)$(man1dir)/esfilter$(manext)
rm -f $(DESTDIR)$(man1dir)/ts2es$(manext)
rm -f $(DESTDIR)$(man1dir)/es2ts$(manext)
rm -f $(DESTDIR)$(man1dir)/esdots$(manext)
rm -f $(DESTDIR)$(man1dir)/esmerge$(manext)
rm -f $(DESTDIR)$(man1dir)/esreport$(manext)
rm -f $(DESTDIR)$(man1dir)/esreverse$(manext)
rm -f $(DESTDIR)$(man1dir)/stream_type$(manext)
rm -f $(DESTDIR)$(man1dir)/psreport$(manext)
rm -f $(DESTDIR)$(man1dir)/psdots$(manext)
rm -f $(DESTDIR)$(man1dir)/ps2ts$(manext)
rm -f $(DESTDIR)$(man1dir)/tsinfo$(manext)
rm -f $(DESTDIR)$(man1dir)/tsreport$(manext)
rm -f $(DESTDIR)$(man1dir)/tsserve$(manext)
rm -f $(DESTDIR)$(man1dir)/tsplay$(manext)
rm -f $(DESTDIR)$(man1dir)/ts_packet_insert$(manext)
rm -f $(DESTDIR)$(man1dir)/m2ts2ts$(manext)
rm -f $(DESTDIR)$(man1dir)/pcapreport$(manext)
rm -f $(DESTDIR)$(man1dir)/tsfilter$(manext)
rm -f $(DESTDIR)$(man1dir)/tsdvbsub$(manext)
rm -f $(DESTDIR)$(man1dir)/rtp2264$(manext)
.PHONY: install-prog
install-prog: all $(DESTDIR)$(bindir) $(DESTDIR)$(libdir)
$(INSTALL_PROGRAM) $(BINDIR)/esfilter $(DESTDIR)$(bindir)/esfilter
$(INSTALL_PROGRAM) $(BINDIR)/ts2es $(DESTDIR)$(bindir)/ts2es
$(INSTALL_PROGRAM) $(BINDIR)/es2ts $(DESTDIR)$(bindir)/es2ts
@ -432,7 +486,38 @@ install: all $(DESTDIR)$(bindir) $(DESTDIR)$(libdir)
$(INSTALL_PROGRAM) $(BINDIR)/tsfilter $(DESTDIR)$(bindir)/tsfilter
$(INSTALL_PROGRAM) $(BINDIR)/tsdvbsub $(DESTDIR)$(bindir)/tsdvbsub
$(INSTALL_PROGRAM) $(BINDIR)/rtp2264 $(DESTDIR)$(bindir)/rtp2264
$(INSTALL_LIB) $(SHARED_LIB) $(DESTDIR)$(libdir)
$(INSTALL_LIB) $(SHARED_LIB) $(DESTDIR)$(libdir)/$(SHARED_LIB_NAME)
.PHONY: uninstall-prog
uninstall-prog:
rm -f $(DESTDIR)$(bindir)/esfilter
rm -f $(DESTDIR)$(bindir)/ts2es
rm -f $(DESTDIR)$(bindir)/es2ts
rm -f $(DESTDIR)$(bindir)/esdots
rm -f $(DESTDIR)$(bindir)/esmerge
rm -f $(DESTDIR)$(bindir)/esreport
rm -f $(DESTDIR)$(bindir)/esreverse
rm -f $(DESTDIR)$(bindir)/stream_type
rm -f $(DESTDIR)$(bindir)/psreport
rm -f $(DESTDIR)$(bindir)/psdots
rm -f $(DESTDIR)$(bindir)/ps2ts
rm -f $(DESTDIR)$(bindir)/tsinfo
rm -f $(DESTDIR)$(bindir)/tsreport
rm -f $(DESTDIR)$(bindir)/tsserve
rm -f $(DESTDIR)$(bindir)/tsplay
rm -f $(DESTDIR)$(bindir)/ts_packet_insert
rm -f $(DESTDIR)$(bindir)/m2ts2ts
rm -f $(DESTDIR)$(bindir)/pcapreport
rm -f $(DESTDIR)$(bindir)/tsfilter
rm -f $(DESTDIR)$(bindir)/tsdvbsub
rm -f $(DESTDIR)$(bindir)/rtp2264
rm -f $(DESTDIR)$(libdir)/$(SHARED_LIB_NAME)
.PHONY: install
install: install-man install-prog
.PHONY: uninstall
uninstall: uninstall-man uninstall-prog
.PHONY: objclean
objclean:
@ -457,9 +542,7 @@ clean: objclean
.PHONY: distclean
distclean: clean
-rmdir $(OBJDIR)
-rmdir $(LIBDIR)
-rmdir $(BINDIR)
-rm -rf $(OBJDIR) $(LIBDIR) $(BINDIR)
TESTDATAFILE = /data/video/CVBt_hp_trail.264

121
docs/mdoc/es2ts.1 100644
Wyświetl plik

@ -0,0 +1,121 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt ES2TS 1
.Os
.Sh NAME
.Nm es2ts
.Nd Convert an ES video stream to H.222 TS
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm es2ts
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Op Fl pid Ar pid_no
.Op Fl pmt Ar pmt_pid_no
.Op Fl host Ar host Ns Op : Ns Ar port
.Op Fl max Ar max_units | Fl m Ar max_units
.Ar in_file | Fl stdin
.Ar out_file | Op Fl stdout
.Sh DESCRIPTION
Convert an elementary video stream to H.222 transport stream.
Supports input streams conforming to MPEG-2 (H.262), MPEG-4/AVC
(H.264) and AVS. Also supports MPEG-1 input streams, insofar as MPEG-2
is backwards compatible with MPEG-1.
.Pp
Note that this program works by reading and packaging the elementary
stream packages directly - it does not parse them as H.262 or H.264
data.
.Ss Files
.Bl -tag
.It Ar in_file
is a file containing the Elementary Stream data (but see -stdin below)
.It Ar out_file
is an H.222 Transport Stream file (but see -stdout and -host below)
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl v , Fl verbose
Output summary information about each ES packet as it is read
.It Fl q , Fl quiet
Only output error messages
.It Fl pid Ar pid_no
.Ar pid_no
is the video PID to use for the data.
Use '-pid 0x<pid>' to specify a hex value.
.Bq default = 0x68
.It Fl pmt Ar pmt_pid_no
.Ar pmt_pid_no
is the PMT PID to use.
Use '-pmt 0x<pid>' to specify a hex value.
.Bq default = 0x66
.It Fl max Ar max_units , Fl m Ar max_units
Maximum number of ES data units to read
.It Fl stdin
Input from standard input, instead of a file
.It Fl stdout
Write output to <stdout>, instead of a named file
Forces -quiet and -err stderr.
.It Fl host Ar host Ns Op : Ns Ar port
Writes output (over TCP/IP) to the named
.Ar host ,
instead of to a named file. If
.Ar port
is not specified, it defaults to 88.
.El
.Ss Stream type
When the TS data is being output, it is flagged to indicate whether
it conforms to H.262, H.264 or AVS. It is important to get this right,
as it will affect interpretation of the TS data.
.Pp
If input is from a file, then the program will look at the start of
the file to determine if the stream is H.264, H.262 or AVS. This
process may occasionally come to the wrong conclusion, in which case
the user can override the choice using the following switches.
.Pp
If input is from standard input (via -stdin), then it is not possible
for the program to make its own decision on the input stream type.
Instead, it defaults to H.262, and relies on the user indicating if
this is wrong.
.Bl -tag
.It Fl h264 , avc
Force the program to treat the input as MPEG-4/AVC.
.It Fl h262
Force the program to treat the input as MPEG-2.
.It Fl avs
Force the program to treat the input as AVS.
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.Sh BUGS
For the moment, the video input must be H.264 or AVS, and the audio input
ADTS, AC-3 ATSC or MPEG layer 2. Also, the audio is assumed to have a
constant number of samples per frame.

108
docs/mdoc/esdots.1 100644
Wyświetl plik

@ -0,0 +1,108 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt ESDOTS 1
.Os
.Sh NAME
.Nm esdots
.Nd Present the content of an ES as a sequence of characters
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm esdots
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl max Ar max_units | Fl m Ar max_units
.Op Fl pes | ts
.Op Fl hasheos
.Op Fl es
.Op Fl gop
.Op Fl fr Ar frame_rate
.Ar in_file | Fl stdin
.Sh DESCRIPTION
Present the content of an H.264 (MPEG-4/AVC), H.262 (MPEG-2) or AVS
elementary stream as a sequence of characters, representing access
units/MPEG-2 items/AVS items.
.Pp
(Note that for H.264 it is access units and not frames that are
represented, and for H.262 it is items and not pictures.)
.Ss Files
.Bl -tag
.It Ar in_file
is an H.222 Transport Stream file (but see
.Fl stdin Ns )
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl stdin
Input from standard input, instead of a file
.It Fl v , Fl verbose
Output extra information about packets
.It Fl q , Fl quiet
Only output error messages
.It Fl max Ar max_units , Fl m Ar max_units
Maximum number of entities to read
.It Fl pes , ts
The input file is TS or PS, to be read via the
PES->ES reading mechanisms
.It Fl hasheos
Print a # on finding an EOS (end-of-stream) NAL unit
rather than stopping (only applies to H.264)
.It Fl es
Report ES units, rather than any 'higher' unit
(not necessarily suppported for all file types)
.It Fl gop
Show the duration of each GOP (for MPEG-2 steams)
OR the distance between random access points (H.264)
.It Fl fr
Set the video frame rate (default = 25 fps)
.El
.Ss Stream type:
If input is from a file, then the program will look at the start of
the file to determine if the stream is H.264 or H.262 data. This
process may occasionally come to the wrong conclusion, in which case
the user can override the choice using the following switches.
.Pp
For AVS data, the program will never guess correctly, so the user must
specify the file type, using -avs.
.Pp
If input is from standard input (via -stdin), then it is not possible
for the program to make its own decision on the input stream type.
Instead, it defaults to H.262, and relies on the user indicating if
this is wrong.
.Bl -tag
.It Fl h264 , avc
Force the program to treat the input as MPEG-4/AVC.
.It Fl h262
Force the program to treat the input as MPEG-2.
.It Fl avs
Force the program to treat the input as AVS.
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,149 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt ESFILTER 1
.Os
.Sh NAME
.Nm esfilter
.Nd Output a filtered or truncated version of an elementary stream
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm esfilter
.Fl copy | filter | strip
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Op Fl host Ar dest_ip Ns Op : Ns Ar port
.Op Fl max Ar max_frames | Fl m Ar max_frames
.Op Fl freq Ar keep_frequency
.Op Fl allref
.Op Fl tsout
.Op Fl pes | ts
.Op Fl h264 | avc | h262
.Ar in_file | Fl stdin
.Ar out_file | Fl stdout
.Sh DESCRIPTION
Output a filtered or truncated version of an elementary stream.
The input is either H.264 (MPEG-4/AVC) or H.262 (MPEG-2).
The output is either an elementary stream, or an H.222 transport
stream
.Pp
If output is to an H.222 Transport Stream, then fixed values for
the PMT PID (0x66) and video PID (0x68) are used.
.Ss Files
.Bl -tag
.It Ar in_file
is the input elementary stream (but see
.Fl stdin
below).
.It Ar out_file
is the output stream, either an equivalent elementary
stream, or an H.222 Transport Stream (but see
.Fl stdout
and
.Fl host
below).
.El
.Ss Actions
.Bl -tag
.It Fl copy
Copy the input data to the output file
(mostly useful as a way of truncating data with
.Fl max Ns )
.It Fl filter
Filter data from input to output, aiming to keep every
.Ar keep_frequency Ns
th frame (where
.Ar keep_frequency
is specified by
.Fl freq Ns
).
.It Fl strip
For H.264, output just the IDR and I pictures, for H.262,
output just the I pictures, but see
.Fl allref
below.
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl stdin
Input from standard input, instead of a file
.It Fl v , Fl verbose
Output extra information about packets
.It Fl q , Fl quiet
Only output error messages
.It Fl host Ar dest_ip Ns Op : Ns Ar port
Writes output (over TCP/IP) to the named
.Ar host ,
instead of to a named file. If
.Ar port
is not specified, it defaults to 88. Implies
.Fl tsout .
.It Fl max Ar max_frames , Fl m Ar max_frames
Maximum number of frames to read (for
.Fl filter
and
.Fl strip Ns ),
or ES units/NAL units (for
.Fl copy Ns ).
.It Fl freq Ar keep_frequency
Specify the frequency of frames to try to keep
with -filter. Defaults to 8.
.It Fl allref
With
.Fl strip ,
keep all reference pictures (H.264)
or all I and P pictures (H.262)
.It Fl tsout
Output data as Transport Stream PES packets
(the default is as Elementary Stream)
.It Fl pes , ts
The input file is TS or PS, to be read via the
PES->ES reading mechanisms. Not allowed with
.Fl stdin .
.El
.Ss Stream type:
If input is from a file, then the program will look at the start of
the file to determine if the stream is H.264 or H.262 data. This
process may occasionally come to the wrong conclusion, in which case
the user can override the choice using the following switches.
.Pp
If input is from standard input (via -stdin), then it is not possible
for the program to make its own decision on the input stream type.
Instead, it defaults to H.262, and relies on the user indicating if
this is wrong.
.Bl -tag
.It Fl h264 , avc
Force the program to treat the input as MPEG-4/AVC.
.It Fl h262
Force the program to treat the input as MPEG-2.
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

107
docs/mdoc/esmerge.1 100644
Wyświetl plik

@ -0,0 +1,107 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt ESMERGE 1
.Os
.Sh NAME
.Nm esmerge
.Nd Merge the contents of two ES to make a TS
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm esmerge
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Op Fl x
.Op Fl h264 | avs
.Op Fl vidrate Ar video_hz
.Op Fl rate Ar audio_hz | Fl cd | dat
.Op Fl adts | l2 | mp2adts | mp4adts | ac3
.Op Fl patpmtfreq Ar pat_freq
.Ar video_file audio_file out_file
.Sh DESCRIPTION
Merge the contents of two Elementary Stream (ES) files, one containing
video data, and the other audio, to produce an output file containing
Transport Stream (TS).
.Ss Files
.Bl -tag
.It Ar video_file
is the ES file containing video.
.It Ar audio_file
is the ES file containing audio.
.It Ar out_file
is the resultant TS file.
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl stdin
Input from standard input, instead of a file
.It Fl v , Fl verbose
Output extra information about each audio/video frame
.It Fl q , Fl quiet
Only output error messages
.It Fl x
Output diagnostic information.
.It Fl h264
The video stream is H.264 (the default)
.It Fl avs
The video stream is AVS
.It Fl vidrate Ar video_hz
Video frame rate in Hz - defaults to 25Hz.
.It Fl rate Ar audio_hz
Audio sample rate in Hertz - defaults to 44100, i.e., 44.1KHz.
.It Fl cd
Equivalent to
.Fl rate Cm 44100 No (CD rate), the default.
.It Fl dat
Equivalent to
.Fl rate Cm 48000 No (DAT rate).
.It Fl adts
The audio stream is ADTS (the default)
.It Fl l2
The audio stream is MPEG layer 2 audio
.It Fl mp2adts
The audio stream is MPEG-2 style ADTS regardless of ID bit
.It Fl mp4adts
The audio stream is MPEG-4 style ADTS regardless of ID bit
.It Fl ac3
The audio stream is Dolby AC-3 in ATSC
.It Fl patpmtfreq Ar pat_freq
PAT and PMT will be inserted every
.Ar pat_freq
video frames. By default,
.Ar pat_freq No = 0 and PAT/PMT are inserted only at
the start of the output stream.
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.Sh BUGS
For the moment, the video input must be H.264 or AVS, and the audio input
ADTS, AC-3 ATSC or MPEG layer 2. Also, the audio is assumed to have a
constant number of samples per frame.

Wyświetl plik

@ -0,0 +1,128 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt ESREPORT 1
.Os
.Sh NAME
.Nm esreport
.Nd Report on the contents of an ES
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm esmerge
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Op Fl frames | findfields | afd | es
.Op Fl framesize
.Op Fl frametype
.Op Fl x
.Op Fl max Ar max-units | Fl m Ar max_units
.Op Fl pes | ts
.Op Fl pesreport
.Op Fl h264 | avc | h262 | avs
.Ar in_file | Fl stdin
.Sh DESCRIPTION
Report on the content of an elementary stream containing H.264
(MPEG-4/AVC), H.262 (MPEG-2) or AVS video data.
.Ss Files
.Bl -tag
.It Ar in_file
is the Elementary Stream file (but see -stdin below)
.El
.Ss What to report
The default is to report on H.262 items, AVS frames or H.264 NAL units.
Other choices are:
.Bl -tag
.It Fl frames
Report by frames. The default for AVS.
.It Fl findfields
Report on any fields in the data. Ignored for AVS.
.It Fl afd
Report (just) on AFD changes in H.262. Ignored for the other types of file.
.It Fl es
Report on ES units.
.El
.Pp
Reporting on frames may be modified by:
.Bl -tag
.It Fl framesize
Report on the sizes of frames (mean, etc.).
.It Fl frametype
Report on the numbers of different type of frame.
.El
.Pp
(in fact, both of these imply -frame).
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl stdin
Input from standard input, instead of a file
.It Fl v , Fl verbose
For H.262 data, output information about the data
in each MPEG-2 item. For ES units, output information
about the data in each ES unit. Ignored for H.264 data.
.It Fl q , Fl quiet
Only output summary information (i.e., the number
of entities in the file, statistics, etc.)
.It Fl x
Show details of each NAL unit as it is read.
.It Fl stdin
Take input from <stdin>, instead of a named file
.It Fl max Ar max_units , Fl m Ar max_units
Maximum number of NAL units/MPEG-2 items/AVS frames/ES units
to read. If -frames, then the program will stop after
that many frames. If reading 'frames', MPEG-2 and AVS will
also count sequence headers and sequence end.
.It Fl pes , ts
The input file is TS or PS, to be read via the PES to
ES reading mechanisms
.It Fl pesreport
Report on PES headers. Implies
.Fl pes No and Fl q .
.El
.Ss Stream type:
If input is from a file, then the program will look at the start of
the file to determine if the stream is H.264, H.262 or AVS data. This
process may occasionally come to the wrong conclusion, in which case
the user can override the choice using the following switches.
.Pp
If input is from standard input (via -stdin), then it is not possible
for the program to make its own decision on the input stream type.
Instead, it defaults to H.262, and relies on the user indicating if
this is wrong.
.Bl -tag
.It Fl h264 , avc
Force the program to treat the input as MPEG-4/AVC.
.It Fl h262
Force the program to treat the input as MPEG-2.
.It Fl avs
Force the program to treat the input as AVS.
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,111 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt ESREVERSE 1
.Os
.Sh NAME
.Nm esreverse
.Nd Report on the contents of an ES
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm esreverse
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Op Fl host Ar host Ns Op : Ns Ar port
.Op Fl max Ar max_frames | Fl m Ar max_frames
.Op Fl freq Ar frame_freq
.Op Fl tsout
.Op Fl pes |-ts
.Op Fl server
.Op Fl x
.Op Fl h264 | avc | h262
.Ar in_file
.Ar out_file | Fl stdout
.Sh DESCRIPTION
Output a reversed stream derived from the input H.264 (MPEG-4/AVC)
or H.262 (MPEG-2) elementary stream.
.Pp
If output is to an H.222 Transport Stream, then fixed values for
the PMT PID (0x66) and video PID (0x68) are used.
.Ss Files
.Bl -tag
.It Ar in_file
is the input elementary stream.
.It Ar out_file
is the output stream, either an equivalent elementary
stream, or an H.222 Transport Stream (but see
Fl stdout No and Fl host below).
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl v , Fl verbose
Output additional (debugging) messages
.It Fl q , Fl quiet
Only output error messages
.It Fl stdout
Write output to <stdout>, instead of a named file. Forces
.Fl quiet No and Fl "err stderr".
.It Fl host Ar host Ns Op : Ns Ar port
Writes output (over TCP/IP) to the named <host>,
instead of to a named file. If <port> is not
specified, it defaults to 88. Implies
.Fl tsout .
.It Fl max Ar max_frames | Fl m Ar max_frames
Maximum number of frames to read
.It Fl freq Ar frame_freq
Specify the frequency of frames to try to keep
when reversing. Defaults to 8.
.It Fl tsout
Output H.222 Transport Stream
.It Fl pes , ts
The input file is TS or PS, to be read via the
PES to ES reading mechanisms
.It Fl server
Also output as normal forward video as reversal
data is being collected. Implies
.Fl pes No and Fl tsout .
.It Fl x
Temporary extra debugging information
.El
.Ss Stream type:
If input is from a file, then the program will look at the start of
the file to determine if the stream is H.264 or H.262 data. This
process may occasionally come to the wrong conclusion, in which case
the user can override the choice using the following switches.
.Bl -tag
.It Fl h264 , avc
Force the program to treat the input as MPEG-4/AVC.
.It Fl h262
Force the program to treat the input as MPEG-2.
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,75 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt M2TS2TS 1
.Os
.Sh NAME
.Nm m2ts2ts
.Nd convert .m2ts to .ts
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm m2ts2ts
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Op Fl buffer Ar buf_pkts | Fl b Ar buf_pkts
.Ar in_file | Fl stdin
.Ar out_file | Fl stdout
.Sh DESCRIPTION
Converts BDAV MPEG-2 Transport Stream file (M2TS) to an 'ordinary' TS file
.Ss Files
.Bl -tag
.It Ar in_file
is a BDAV MPEG-2 Transport Stream file (M2TS)(but see
.Fl stdin
below).
.It Ar out_file
is an H.222 Transport Stream file (but see
.Fl stdout
below).
.El
.Ss General switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl v , Fl verbose
Output extra information
.It Fl q , Fl quiet
Only output error messages
.It Fl stdin
Input from standard input instead of a file
.It Fl stdout
Output to standard output instead of a file. Forces
.Fl quiet No and Fl "err stderr" .
.It Fl b Ar buf_pkts , Fl buffer Ar buf_pkts
Number of TS packets to buffer for reordering
.Bq default = 4
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,178 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt PCAPREPORT 1
.Os
.Sh NAME
.Nm pcapreport
.Nd Get info about a TS in a pcap
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm pcapinfo
.Fl h | help Op Cm detail
.Nm pcapinfo
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl name Ar base_name | Fl n Ar base_name
.Op Fl extract | Fl x
.Op Fl csvgen | Fl c
.Op Fl output Ar udp_name | Fl o Ar udp_name
.Op Fl max Ar max_read | Fl m Ar max_read
.Op Fl data
.Op Fl a
.Op Fl d Ar dest_ip Ns Op : Ns Ar port
.Op Fl g | Fl good-ts-only
.Op Fl keep-bad
.Op Fl tfmt Ar time_format
.Op Fl dump-data | Fl D
.Op Fl extra-dump | Fl E
.Op Fl times | Fl t
.Op Fl skew-discontinuity-threshold Ar threshold | Fl skew Ar threshold
.Ar file
.Sh DESCRIPTION
Report and/or extract the Transport Streams in a .pcap. In analyse mode (
.Fl a
) the timing info in the TS (PCRs) can be compared with the timing info in
the pcap.
.Bl -tag
.It Fl h , help
Produce usage summary
.It Fl h Cm detail , Fl help Cm detail
Produce usage + more detail on what the output actually means
.It Fl a , analyse
Analyse. Produces summary info on every TS in the pcap
.It Fl d Ar dest_ip Ns Oo : Ns Ar port Oc , Fl destip Ar dest_ip Ns Oo : Ns Ar port Oc
Select data with the given destination IP and port.
If the
.Ar port
is not specified, it defaults to 0 (see below).
.It Fl g , Fl good-ts-only
Only extract/analyse packets that seem entirely good.
By default there is a bit of slack in determining if a
packet is good and some dodgy packets are let through.
This switch ensures that all packets pass simple testing
.It Fl keep-bad
Extract all packets including bad ones. Is implied if
an ip & port filter is set. Overriden by
.Fl -good-ts-only .
.It Fl tfmt Ar time_format
Sets the format for printed times
.Pp
.Ar time_format
is one of
.Bl -tag
.It Cm 90
.Bq Default
show as 90KHz timestamps (suffix 't' on the values: e.g., 4362599t).
.It Cm 27
Show as 27MHz timestamps (similar, e.g., 25151:000t).
.It Cm 32
Show as 90KHz timestamps, but only the low 32 bits.
.It Cm ms
Show as milliseconds.
.It Cm hms
Show as hours/minutes/seconds (H:MM:SS.ssss, the H
can be more than one digit if necessary)
.El
.It Fl dump-data , Fl D
Dump any data in the input file to stdout.
.It Fl extra-dump , Fl E
Dump only data which isn't being sent to the
Fl o
file.
.It Fl times , Fl t
Report continuously on PCR vs PCAP timing for the destination specified in
.Fl d .
.It Fl skew-discontinuity-threshold Ar threshold , Fl skew Ar threshold
Gives the skew discontinuity threshold in 90kHz units.
A value of 0 disables this.
.Bq "default = 6*90000"
.It Fl split-section
Split extracted streams into multiple files on section
(discontinutity) boundries
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl v , Fl verbose
Output extra information about packets
.It Ar file
The pcap stream file to get info on
.El
.Pp
Specifying 0.0.0.0 for destination IP will capture all hosts, specifying 0
as a destination port will capture all ports on the destination host.
.Pp
Network packet numbers start at 1 (like wireshark)
.Pp
TS packet numbers start at 0.
.Ss Analyse output
.Bl -tag
.It Times
(packet and PCR)
The times associated with packets and PCR are held internally in 90kHz units
and are displayed in those units by default
.It Stream
A set of packets to the same IP & Port. TS streams are detected by looking
for 0x47s at appropriate places in the packets
.It Section
A part of a stream which appears to have a continuous TS embedded in it. If
the PCR jumps then a new section should be started (though this will not
generate a separate .ts file if the extraction option is in effect unless
.Fl split-section
is specified, nor will it generate a new .csv file.)
.Pp
As it stands pcapreport will only report on a single PCR pid within a TS. If
multiple pids with PCRs are detected then this will be reported but the other
PCRs will be ignored
.It Skew
This is the difference between the time in the pcap for a UDP packet and any
PCR found in the TS contained within that packet. The accuracy of this figure
obviously depends on how good the clock was in the capture process. Skew is
arbitrarily set to zero at the start of a section. A skew of >6s is assumed
to be a discontinuity and will start a new section.
.Pp
Positive skew means that we received too low a PCR for this timestamp.
.It Drift
This is skew over time and (assuming that the playout process is good)
represents the difference in speed between the transmitters clock and the
receivers clock. The algorithm for determining this isn't very sophisticated
so if you have a large maximum jitter or a short sample this should be taken
with a pinch of salt. Beware also that PC clocks (like the one in the m/c
doing the tcpdump) are not always amongst the most stable or accurate; however
they should be good enough to detect gross errors
.It Jitter
This is measured as the difference between the maximum and minimum skews over
a 10sec (max 1024 samples) period. This should be long enough to capture a
good baseline but short enough that drift has a negligible effect
.It Max Jitter
The maximum value of jitter (see above) found in a section
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tsinfo 1 ,
.Xr tsreport 1
.Xr rtp2264 1
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.Sh BUGS
pcapreport can only deal with IPv4. IPv6 is beyond its current capabilities.

194
docs/mdoc/ps2ts.1 100644
Wyświetl plik

@ -0,0 +1,194 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt ps2ts 1
.Os
.Sh NAME
.Nm ps2ts
.Nd Extract a program stream from a Transport Stream
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm ps2ts
.Fl pid Ar pid | Fl video | audio
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Op Fl max Ar max_pkts | Fl m Ar max_pkts
.Op Fl dvd | notdvd | nodvd
.Op Fl vstream Ar vstream_no
.Op Fl astream Ar astream_no
.Op Fl ac3stream Ar ac3stream_no
.Op Fl host Ar host Ns Op : Ns port
.Op Fl vpid Ar vpid_no
.Op Fl apid Ar apid_no
.Op Fl noaudio
.Op Fl pmt Ar pmt_pid_no
.Op Fl prepeat Ar pat_freq
.Op Fl pad Ar pad_pkts
.Op Fl h264 | avc | h262 | mp42 | vtype Ar video_type
.Op Fl dolby Cm dvd | atsc
.Ar in_file | Fl stdin
.Ar out_file | Fl stdout
.Sh DESCRIPTION
Convert an H.222 program stream to H.222 transport stream.
.Pp
This program does not make use of any Program Stream Map packets
in the data (mainly because I have yet to see data with any). This
means that the program has to determine the stream type of the data
based on the first few ES units.
.Pp
This program does not output more than one video and one audio
stream. If the program stream data contains more than one of each,
the first will be used, and the others ignored (with a message
indicating this).
.Pp
It is assumed that the video stream will contain DTS values in its
PES packets at reasonable intervals, which can be used as PCR values
in the transport stream, and thus the video stream's PID can be used
as the PCR PID in the transport stream.
.Ss Files
.Bl -tag
.It Ar in_file
is a file containing the program stream data
(but see -stdin below)
.It Ar out_file
is a transport stream file
(but see -stdout and -host below)
.El
.Ss input switches
.Bl -tag
.It Fl stdin
take input from <stdin>, instead of a named file
.It Fl dvd
The PS data is from a DVD. This is the default.
This switch has no effect on MPEG-1 PS data.
.It Fl notdvd , nodvd
The PS data is not from a DVD.
The DVD specification stores AC-3 (Dolby), DTS and
other audio in a specialised manner in private_stream_1.
.It Fl vstream Ar vstream_no
Take video from video stream
.Ar vstream_no
(0..7). The default is the first video stream found.
.It Fl astream Ar astream_no
Take audio from audio stream
.Ar astream_no
(0..31). The default is the first audio stream found
(this includes private_stream_1 on non-DVD streams).
.It Fl ac3stream Ar astream_no
Take audio from AC3 substream
.Ar ac3stream_no
(0..7), from private_stream_1. This implies -dvd.
(If audio is being taken from a substream, the user
is assumed to have determined which one is wanted,
e.g., using psreport)
.El
.Ss Output Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl host Ar host Ns Op : Ns Arport
Writes output (over TCP/IP) to the named <host>,
instead of to a named file. If
.Ar <port>
is not specified, it defaults to 88.
.It Fl vpid Ar vpid_no
.Ar vpid_no is the video PID to use for the data.
Use '-vpid 0x<pid>' to specify a hex value.
Defaults to 0x68.
.It Fl apid Ar apid_no
.Ar apid_no
is the audio PID to use for the data.
Use '-apid 0x<pid>' to specify a hex value.
Defaults to 0x67.
.It Fl noaudio
Don't output the audio data
.It Fl pmt Ar pmt_pid_no
.Ar pmt_pid_no is the PMT PID to use.
Use '-pmt 0x<pid>' to specify a hex value.
Defaults to 0x66
.It Fl prepeat Ar pat_freq
Output the program data (PAT/PMT) after every
.Ar pat_freq
PS packs. Defaults to 100.
.It Fl pad Ar pad_pkts
Pad the start with
.Ar pad_pkts
filler TS packets, to allow
a TS reader to synchronize with the datastream.
Defaults to 8.
.El
.Ss General switches
.Bl -tag
.It Fl v , Fl verbose
Print a 'v' for each video packet and an 'a' for
each audio packet, as it is read
.It Fl q , Fl quiet
Only output error messages
.It Fl max Ar max_pkts , Fl m Ar max_pkts
Maximum number of PS packets to read.
.El
.Ss Stream type
When the TS data is being output, it is flagged to indicate whether
it conforms to H.262, H.264, etc. It is important to get this right, as
it will affect interpretation of the TS data.
.Pp
If input is from a file, then the program will look at the start of
the file to determine if the stream is H.264 or H.262 data. This
process may occasionally come to the wrong conclusion, in which case
the user can override the choice using the following switches.
.Pp
If input is from standard input (via -stdin), then it is not possible
for the program to make its own decision on the input stream type.
Instead, it defaults to H.262, and relies on the user indicating if
this is wrong.
.Bl -tag
.It Fl h264 , avc
Force the program to treat the input as MPEG-4/AVC.
.It Fl h262
Force the program to treat the input as MPEG-2.
.It Fl mp42
Force the program to treat the input as MPEG-4/Part 2.
.It Fl vtype Ar video_type
Force the program to treat the input as video of
stream type <type> (e.g., 0x42 means AVS video). It is
up to the user to specify a valid <type>.
.El
If the audio stream being output is Dolby (AC-3), then the stream type
used to output it differs for DVB (European) and ATSC (USA) data. It
may be specified as follows:
.Bl -tag
.It Fl dolby Cm dvb
Use stream type 0x06 (the default)
.It Fl dolby Cm atsc
Use stream type 0x81
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

63
docs/mdoc/psdots.1 100644
Wyświetl plik

@ -0,0 +1,63 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt PSDOTS 1
.Os
.Sh NAME
.Nm psdots
.Nd Present the content of an PS as a sequence of characters
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm psdots
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl max Ar max_pkts | Fl m Ar max_pkts
.Ar in_file | Fl stdin
.Sh DESCRIPTION
Present the content of a Program Stream file as a sequence of
characters, representing the packets.
.Ss Files
.Bl -tag
.It Ar in_file
is an H.222 Program Stream file (but see
.Fl stdin Ns )
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl stdin
Input from standard input, instead of a file
.It Fl v , Fl verbose
Output a description of the characters used
.It Fl max Ar max_pkts , Fl m Ar max_pkts
Maximum number of PS packets to read
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,73 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt PSREPORT 1
.Os
.Sh NAME
.Nm psreport
.Nd Report on the contents of a PS
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm psreport
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl max Ar max_pkts | Fl m Ar max_pkts
.Op Fl dvd | notdvd | nodvd
.Ar in_file | Fl stdin
.Sh DESCRIPTION
Report on the packets in a Program Stream.
.Ss Files
.Bl -tag
.It Ar in_file
is an H.222 Program Stream file (but see
.Fl stdin
below)
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl stdin
Input from standard input, instead of a file
.It Fl v , Fl verbose
Output packet data as well
.It Fl stdin
Take input from <stdin>, instead of a named file
.It Fl max Ar max_pkts , Fl m Ar max_pkts
Maximum number of PS packets to read
.It Fl dvd
The PS data is from a DVD. This is the default.
This switch has no effect on MPEG-1 PS data.
.It Fl notdvd , nodvd
The PS data is not from a DVD.
The DVD specification stores AC-3 (Dolby), DTS and
other audio in a specialised manner in private_stream_1.
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,52 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt RTP2264 1
.Os
.Sh NAME
.Nm rtp2264
.Nd convert H.264 in RTP into H.264 ES
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm rtp2264
.Ar in_file
.Ar out_file
.Op Ar b64_block Ns Op , Ns Ar b64_block Ns Op ,...
.Sh DESCRIPTION
Take a RTP file (probably generated by
.Xr pcapreport 1 Ns )
containing
an H.264 stream and convert it into an Annex B encoded .264
elementary stream file.
.Pp
If
.Ar b64_block Ns s
are specified then it is assumed to be one or more
B64 encoded blocks containing SPS or PPS or other similar blocks.
These will each have a 00 00 00 01 sequence added at the start and
then written at the start of the out_file
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr pcapreport 1
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,97 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt STREAM_TYPE 1
.Os
.Sh NAME
.Nm stream-type
.Nd Guess the type of a stream file
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm stream-type
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Ar in_file
.Sh DESCRIPTION
Attempt to determine if an input stream is Transport Stream,
Program Stream, or Elementary Stream, and if the latter, if it
is H.262 or H.264 (i.e., MPEG-2 or MPEG-4/AVC respectively).
The mechanisms used are fairly crude, assuming that:
.Bl -dash
.It
data is byte aligned
.It
for TS, the first byte in the file will be the start of a NAL unit,
and PAT/PMT packets will be findable
.It
for PS, the first packet starts immediately at the start of the
file, and is a pack header
.It
if the first 1000 packets could be H.262 *or* H.264, then the data
is assumed to be H.264 (the program doesn't try to determine
sensible sequences of H.262/H.264 packets, so this is a reasonable
way of guessing)
.El
It is quite possible that data which is not relevant will be
misidentified
.Ss Files
.Bl -tag
.It Ar in_file
is the file to analyse
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl v , Fl verbose
Output more detailed information about how it is making its decision
.It Fl q , Fl quiet
Only output error messages
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.Sh RETURN VALUES
The program exit value is:
.Bl -tag
.It 10
if it detects Transport Stream,
.It 11
if it detects Program Stream,
.It 12
if it detects Elementary Stream containing H.262 (MPEG-2),
.It 14
if it detects Elementary Stream containing H.264 (MPEG-4/AVC),
.It 5
if it looks like it might be PES,
.It 9
if it really cannot decide, or
.It 0
if some error occurred
.El
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

90
docs/mdoc/ts2es.1 100644
Wyświetl plik

@ -0,0 +1,90 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt TS2ES 1
.Os
.Sh NAME
.Nm ts2es
.Nd Extract a program stream from a Transport Stream
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm ts2es
.Fl pid Ar pid | Fl video | audio
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Op Fl max Ar max_pkts | Fl m Ar max_pkts
.Op Fl pes | ps
.Ar in_file | Fl stdin
.Ar out_file | Fl stdout
.Sh DESCRIPTION
Extract a single (elementary) program stream from a Transport Stream
(or Program Stream).
.Ss Files
.Bl -tag
.It Ar in_file
is an H.222 Transport Stream file (but see -stdin and -pes)
.It Ar out_file
is a single elementary stream file (but see -stdout)
.El
.Ss Which stream to extract:
.Bl -tag
.It Fl pid Ar pid
Output data for the stream with the given
.Ar pid .
Use
.Fl pid No 0x Ns Ar pid No to specify a hex value
.It Fl video
Output data for the (first) video stream
named in the (first) PMT. This is the default.
.It Fl audio
Output data for the (first) audio stream
named in the (first) PMT
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl stdin
Input from standard input, instead of a file
.It Fl v , Fl verbose
Output extra information about packets
.It Fl q , Fl quiet
Only output error messages
.It Fl max Ar max_pkts , Fl m Ar max_pkts
Maximum number of TS packets to read.
.It Fl pes , ps
Use the PES interface to read ES units from
the input file. This allows PS data to be read
(there is no point in using this for TS data).
Does not support
.Fl pid , stdin No or Fl stdout.
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,75 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt TS_PACKET_INSERT 1
.Os
.Sh NAME
.Nm ts_packet_insert
.Nd Insert TS packets into a Transport Stream
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm ts_packet_insert
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl p Ar positions
.Op Fl pid Ar pid_no
.Op Fl s string
.Op Fl o Ar out_file
.Ar in_file
.Sh DESCRIPTION
Insert TS packets into a Transport Stream at positions
specified by the user.
.Ss Input
.Bl -tag
.It Ar in_file
An H.222 Transport Stream file.
.El
.Ss Switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl p Ar positions
This a a colon (':') delimited string of numbers
between 0 and 1, representing how far through to put
each TS packet. E.g., -p 0.1:0.4:0.7:0.9 will insert
4 packets at 10%, 40%, 70% and 90% through the file.
.It Fl pid Ar pid_no
The inserted packets will have the PID specfied.
.Bq default = 0x68
.It Fl s Ar string
The inserted packets will contain
.Ar string
as their payload.
.Bq default = 'Inserted packet'
.It Fl o Ar out_file
The new TS file will be written out with the given name
.Bq default = out.ts
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.Sh EXAMPLES
ts_packet_insert -p 0.3:0.6 -o out.ts -pid 89 -s "AD=start" in.ts
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,82 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt TSDVBSUB 1
.Os
.Sh NAME
.Nm tsdvbsub
.Nd Dump DVB subtitling from a stream
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm tsdvbsub
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | q
.Op Fl max Ar max_pkts | Fl m Ar max_pkts
.Op Fl pid Ar pid_no
.Op Fl prog Ar prog_no
.Ar in_file | Fl stdin
.Sh DESCRIPTION
Parse & dump the contents of a single DVB subtitling stream from a
Transport Stream (or Program Stream).
.Ss Files
.Bl -tag
.It Ar in_file
is an H.222 Transport Stream file (but see
.Fl stdin
and
.Fl pes
below).
.El
.Ss Stream to extract
.Bl -tag
.It Fl pid Ar pid_no
Output data for the stream with the given
.Ar pid_no .
Use -pid 0x<pid> to specify a hex value
.Bq default = the stream will be located from the PMT info
.It Fl prog Ar prog_no
Program number
.Bq default = 1
.El
.Ss general switches
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl v , Fl verbose
Output informational/diagnostic messages
.It Fl q , Fl quiet
Only output error messages
.It Fl stdin
Input from standard input, instead of a file
.It Fl m Ar max_pkts , Fl max Ar max_pkts
Maximum number of TS packets to read
.El
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,62 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt TSFILTER 1
.Os
.Sh NAME
.Nm tsfilter
.Nd Output a filtered or truncated version of a transport stream
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm tsfilter
.Op Fl verbose | Fl v
.Op Fl i Ar in_file
.Op Fl o Ar out_file
.Op Fl max Ar max_pkts | Fl m Ar max_pkts
.Op Fl \&! | Fl invert
.Ar pid_no Oo Ar pid_no Oc No ...
.Sh DESCRIPTION
Filter the given
.Ar pid_no Ns s
out of stdin and write the result on stdout.
.Bl -tag
.It Fl i Ar in_file
Take input from this file and not stdin.
.It Fl o Ar out_file
Send output to this file and not stdout.
.It Fl v , verbose
Be verbose.
.It Fl m Ar max_pkts, Fl max Ar max_pkts
All packets after the nth are regarded as
not matching any pids.
.It Fl \&! , invert
Invert whatever your decision was before
applying it - the output contains only
pids not in the list up to max packets
and all packets in the input from then
on.
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr esdots 1 ,
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

71
docs/mdoc/tsinfo.1 100644
Wyświetl plik

@ -0,0 +1,71 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt TSINFO 1
.Os
.Sh NAME
.Nm tsinfo
.Nd get info about the contents of a transport stream
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm tsinfo
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl stdin
.Op Fl verbose | Fl v
.Op Fl max Ar max_scan | Fl m Ar max_scan
.Op Fl repeat Ar PMT_count
.Op Ar file
.Sh DESCRIPTION
Report on the program streams in a Transport Stream. This command just dumps
the initial PAT/PMT pairing. If you want more info on the program streams
within the transport stream then use
.Xr tsreport 1 .
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl stdin
Input from standard input, instead of a file
.It Fl v , Fl verbose
Output extra information about packets
.It Fl m Ar max_scan , Fl max Ar max_scan
.Ar max_qscan
is the Number of TS packets to scan. Defaults to 10000.
.It Fl repeat Ar PMT_count
Look for
.Ar PMT_count
PMT packets, and report on each
.It Ar file
The transport stream file to get info on. If
.Fl stdin
is specified then no
.Ar file
is expected
.El
.\" The following commands should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tsreport 1
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

115
docs/mdoc/tsplay.1 100644
Wyświetl plik

@ -0,0 +1,115 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt TSPLAY 1
.Os
.Sh NAME
.Nm tsplay
.Nd stream a file
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm tsplay
.Fl help
.Op Ar subject
.Nm tsplay
.Op Fl details
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl quiet | q
.Op Fl verbose | v
.Op Fl loop
.Op Fl max Ar max_pkts | Fl m Ar max_pkts
.Op Fl mcastif Ar mcast_if | Fl i Ar mcast_if
.Op Fl tcp | udp
.Ar in_file | Fl stdin
.Ar host Ns Oo : Ns Ar port Oc |
.Fl output Ar out_file | Fl o Ar out_file | Fl stdout
.Sh DESCRIPTION
Act as a server which plays the given file (containing Transport
Stream or Program Stream data). The output is always Transport
Stream.
.Ss Input
.Bl -tag
.It Ar in_file
Input is from the named H.222 TS file.
.It Fl stdin
Input is from standard input.
.El
.Ss Output
.Bl -tag
.It Ar host Ns Op : Ns Ar port
Normally, output is to a named host. If
.Ar port
is not specified, it defaults to 88.
Output defaults to UDP.
.It Fl o Ar out_file , Fl output Ar out_file
Output is to file
.Ar out_file .
.It Fl tcp
Output to the host is via TCP.
.It Fl udp
Output to the host is via UDP.
.Bq default
.It Fl stdout
Output is to standard output. Forces
.Fl quiet No and Fl "err stderr" .
.It Fl i Ar mcast_if , Fl mcastif Ar mcast_if
If output is via UDP, and
.Ar host
is a multicast
address, then
.Ar mcast_if
is the IP address of the network interface to use. This may not be supported
on some versions of Windows.
.El
.Ss General Switches
.Bl -tag
.It Fl details
Print out more detailed help information,
including some less common options.
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl v , Fl verbose
Output additional diagnostic messages
.It Fl q , Fl quiet
Suppress informational and warning messages
.It Fl help
Summarise the
.Ar subject Ns s
that can be specified
.It Fl help Ar subject
Show help on a particular subject
.It Fl m Ar max_pkts , Fl max Ar max_pkts
Maximum number of TS/PS packets to read.
See -details for more information.
.It Fl loop
Play the input file repeatedly. Can be combined with
Fl max .
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tsinfo 1 ,
.Xr pcapreport 1
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -0,0 +1,138 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt TSREPORT 1
.Os
.Sh NAME
.Nm tsreport
.Nd get info about the streams within a transport stream.
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm tsinfo
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl timing | Fl t
.Op Fl max Ar max_read | Fl m Ar max_read
.Op Fl data
.Ar file | Fl stdin
.Nm tsinfo
.Fl buffering | Fl b
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl verbose | Fl v
.Op Fl quiet | Fl q
.Op Fl max Ar max_read | Fl m Ar max_read
.Op Fl o Ar csv_file Op Fl 32
.Op Fl cnt
.Op Fl prog Ar prog_no
.Op Fl tfmt Ar time_format
.Op Fl tafmt Ar time_format
.Ar file | Fl stdin
.Nm tsinfo
.Fl justpid Ar pid
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl max Ar max_read | Fl m Ar max_read
.Ar file | Fl stdin
.Sh DESCRIPTION
Report on the streams in a Transport Stream. In general the most
useful inforation is returned by the
.Fl b
option.
.Ss Common options
.Bl -tag
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl v , Fl verbose
Output extra information about packets
.It Fl q , Fl quiet
Output less information
.It Fl m Ar max_scan , Fl max Ar max_scan
.Ar max_scan
is the Number of TS packets to scan. Defaults to the entire file.
.It Fl stdin
Input from standard input, instead of a file
.It Ar file
The transport stream file to get info on. If
.Fl stdin
is specified then no
.Ar file
is expected
.El
.Ss Fl b , Fl buffering
Report on the differences between PCR and PTS, and
between PCR and DTS. This is relevant to the size of
buffers needed in the decoder. Also reports bitrates;
the max bitrate is calculated over 0.5sec
.Bl -tag
.It Fl o Ar csv_file Op Fl 32
Output timing in to a CSV file called
.Ar csv_file .
If
.Fl 32
is used as well then the timing ifo is restricted to the bottom 32 bits
.It Fl cnt Ar pid
Check values of continuity_counter for pid
.Ar pid .
Writes all the values of the counter to a file called
.Pa continuity_counter.txt .
.It Fl prog Ar prog_no
Report on program prog_no
.Bq "default = 1"
(hopefully default will be 'all' in the future)
.It Fl tfmt Ar time_format
Specify format of time differences.
.It Fl tafmt Ar time_format
Specify format of absolute times.
.Pp
.Ar time_format
is one of
.Bl -tag
.It Cm 90
.Bq Default
show as 90KHz timestamps (suffix 't' on the values: e.g., 4362599t).
.It Cm 27
Show as 27MHz timestamps (similar, e.g., 25151:000t).
.It Cm 32
Show as 90KHz timestamps, but only the low 32 bits.
.It Cm ms
Show as milliseconds.
.It Cm hms
Show as hours/minutes/seconds (H:MM:SS.ssss, the H
can be more than one digit if necessary)
.El
.El
.Ss Fl justpid Ar pid
Just show data (file offset, index, adaptation field
and payload) for TS packets with the given PID.
PID 0 is allowed (i.e., the PAT)
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tsinfo 1 ,
.Xr pcapreport 1
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

124
docs/mdoc/tsserve.1 100644
Wyświetl plik

@ -0,0 +1,124 @@
.\" The following commands are required for all man pages.
.Dd October 28, 2015
.Dt TSSERVE 1
.Os
.Sh NAME
.Nm tsserve
.Nd get info about the streams within a transport stream
.\" This next command is for sections 2 and 3 only.
.\" .Sh LIBRARY
.Sh SYNOPSIS
.Nm tsserve
.Op Fl details
.Op Fl "err stdout"
.Op Fl "err stderr"
.Op Fl quiet | q
.Op Fl verbose | v
.Op Fl port Ar port_no
.Op Fl noaudio
.Op Fl pad Ar filler_pkts
.Op Fl noseqhdr
.Op Fl prepeat Ar pat_freq
.Op Fl h264 | avc | h262
.Op Fl dolby Cm dvb | atsc
.Op Fl 0
.Ar file0
.Op Fl 1 Ar file1
.Op Fl 2 Ar file2
.Ns ...
.Sh DESCRIPTION
Act as a server which plays the given file (containing Transport
Stream or Program Stream data). The output is always Transport
Stream.
.Ss Input:
.Bl -tag
.It Ar infile
An H.222.0 TS or PS file to serve to the client.
This will be treated as file 0 (see below).
.It Fl 0 Ar file0 No .. Fl 9 Ar file9
Specify files 0 through 9, selectable with command
characters 0 through 9. The lowest numbered file
will be the default for display.
.El
.Ss General Switches:
.Bl -tag
.It Fl details
Print out more detailed help information,
including some less common options.
.It Fl "err stdout"
Write error messages to standard output (the default)
.It Fl "err stderr"
Write error messages to standard error (Unix traditional)
.It Fl v , Fl verbose
Output additional diagnostic messages
.It Fl q , Fl quiet
Suppress informational and warning messages
.It Fl port Ar port_no
Listen for a client on port
.Ar port_no
.Bq default = 88
.It Fl noaudio
Ignore any audio data
.It Fl pad Ar filler_pkts
Pad the start of the output with
.Ar filler_pkts
filler TS packets, to allow the client to synchronize with
the datastream.
.Bq default = 8
.It Fl noseqhdr
Do not output sequence headers for fast forward/reverse
data. Only relevant to H.262 data.
.El
.Ss Program Stream Switches:
.Bl -tag
.It Fl prepeat Ar pat_freq
Output the program data (PAT/PMT) after every
.Ar pat_freq
PS packs.
.Bq default = 100
.It Fl h264 , avc
Force the program to treat the input as MPEG-4/AVC.
.It Fl h262
Force the program to treat the input as MPEG-2.
.El
Both of these affect the stream type of the output data.
.Pp
If the audio stream being output is Dolby (AC-3), then the stream type
used to output it differs for DVB (European) and ATSC (USA) data. It
may be specified as follows:
.Bl -tag
.It Fl dolby Cm dvb
Use stream type 0x06.
.Bq default
.It Fl dolby Cm atsc
Use stream type 0x81
.El
.Pp
For information on using the program in other modes, see
.Fl details.
.\" The following cnds should be uncommented and
.\" used where appropriate.
.\" .Sh IMPLEMENTATION NOTES
.\" This next command is for sections 2, 3 and 9 function
.\" return values only.
.\" .Sh RETURN VALUES
.\" This next command is for sections 1, 6, 7 and 8 only.
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next command is for sections 1, 6, 7, 8 and 9 only
.\" (command return values (to shell) and
.\" fprintf/stderr type diagnostics).
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" This next command is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tsinfo 1 ,
.Xr pcapreport 1
.\" .Sh STANDARDS
.\" .Sh HISTORY
.\" .Sh AUTHORS
.\" .Sh BUGS

Wyświetl plik

@ -1425,6 +1425,8 @@ static void print_usage()
" -skew-discontinuity-threshold <number>\n"
" -skew <number> Gives the skew discontinuity threshold in 90kHz units.\n"
" A value of 0 disables this. [default = 6*90000]\n"
" -split-section Split extracted streams into multiple files on section\n"
" (discontinutity) boundries\n"
"\n"
" -err stdout Write error messages to standard output (the default)\n"
" -err stderr Write error messages to standard error (Unix traditional)\n"

582
rtp2264.c
Wyświetl plik

@ -1,281 +1,301 @@
/*
* Report on a pcap (.pcap) file.
*
* <rrw@kynesim.co.uk> 2008-09-05
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is the MPEG TS, PS and ES tools.
*
* The Initial Developer of the Original Code is Amino Communications Ltd.
* Portions created by the Initial Developer are Copyright (C) 2008
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Richard Watts, Kynesim <rrw@kynesim.co.uk>
*
* ***** END LICENSE BLOCK *****
*/
// H.264 over RTP is defined in RFC3984
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <time.h>
#ifdef _WIN32
#include <stddef.h>
#endif // _WIN32
#include "compat.h"
#include "version.h"
#include "misc_fns.h"
#include "fmtx.h"
#define RTP_HDR_LEN 8
#define RTP_PREFIX_STRING "RTP "
#define RTP_PREFIX_LEN 4
#define RTP_LEN_OFFSET 4
static int c642b(const char c)
{
return (c >= 'A' && c <= 'Z') ? c - 'A' :
(c >= 'a' && c <= 'z') ? c - 'a' + 26 :
(c >= '0' && c <= '9') ? c - '0' + 52 :
(c == '+' || c == '-') ? 62 :
(c == '/' || c == '_') ? 63 :
(c == '=') ? -1 : -2;
}
static size_t b64str2binn(byte * const dest0, const size_t dlen, const char ** const plast, const char * src)
{
byte * dest = dest0;
uint32_t a = 0;
ssize_t i = 4;
size_t slen = (dlen * 4 + 5) / 3;
int b;
while ((b = c642b(*src++)) >= 0 && --slen != 0)
{
a = (a << 6) | b;
if (--i == 0)
{
*dest++ = (a >> 16) & 0xff;
*dest++ = (a >> 8) & 0xff;
*dest++ = a & 0xff;
i = 4;
}
}
// Tidy up at the end
if (i < 3) // i == 4 good, all done, i == 3 error
{
a <<= i * 6;
*dest++ = (a >> 16) & 0xff;
// Consume '='
if (b == -1)
b = c642b(*src++);
if (i == 1)
{
*dest++ = (a >> 8) & 0xff;
}
else if (b == -1)
++src;
}
if (plast != NULL)
*plast = src - 1;
return dest - dest0;
}
int main(int argc, char **argv)
{
FILE *f_in = NULL;
FILE *f_out = NULL;
const char * fname_in;
const char * fname_out;
int zcount = 0;
if (argc < 3)
{
fprintf(stderr, "Usage: <in.rtp> <out.264>\n");
return 1;
}
fname_in = argv[1];
fname_out = argv[2];
if ((f_in = fopen(fname_in, "rb")) == NULL)
{
perror(argv[1]);
return 1;
}
if ((f_out = fopen(fname_out, "wb")) == NULL)
{
perror(argv[2]);
return 1;
}
if (argc > 3)
{
byte psbuf[0x1000];
const char * eo64 = argv[3];
psbuf[0] = 0;
psbuf[1] = 0;
psbuf[2] = 0;
psbuf[3] = 1;
do
{
size_t len = b64str2binn(psbuf + 4, sizeof(psbuf) - 4, &eo64, eo64);
if ((*eo64 != 0 && *eo64 != ',') || len == 0)
{
fprintf(stderr, "Bad B64 string: '%s' (len=%zd, chr=%d)\n", argv[3], len, *eo64);
exit(1);
}
if (fwrite(psbuf, len + 4, 1, f_out) != 1)
{
perror(fname_out);
exit(1);
}
} while (*eo64++ == ',');
}
for (;;)
{
byte buf[0x10000];
uint32_t rtplen;
if (fread(buf, RTP_HDR_LEN, 1, f_in) != 1)
{
if (ferror(f_in))
perror(fname_in);
break;
}
if (memcmp(buf, RTP_PREFIX_STRING, RTP_PREFIX_LEN) != 0)
{
fprintf(stderr, "### Bad RTP prefix\n");
break;
}
rtplen = uint_32_be(buf + RTP_LEN_OFFSET);
if (rtplen > sizeof(buf) || rtplen < 12)
{
fprintf(stderr, "### Bad RTP len: %" PRIu32 "\n", rtplen);
break;
}
if (fread(buf, rtplen, 1, f_in) != 1)
{
if (ferror(f_in))
perror(fname_in);
else
fprintf(stderr, "### Unexpected EOF\n");
break;
}
{
size_t offset = 12 + (buf[0] & 0xf) * 4;
size_t padlen = ((buf[0] & 0x20) != 0) ? buf[rtplen - 1] : 0;
// Check for extension
if ((buf[0] & 0x10) != 0) // X bit
offset += 4 + uint_16_be(buf + offset + 2);
if (rtplen < offset + padlen + 1)
{
fprintf(stderr, "### Bad RTP offset + padding\n");
}
// OK - got payload
{
const byte * p = buf + offset;
const byte * p_end = buf + rtplen - padlen;
byte buf2[0x18000]; // Allow for max expansion
byte * q = buf2;
byte sc1 = *p++;
if ((sc1 & 0x1f) == 28)
{
byte sc2 = *p++;
if ((sc2 & 0x80) != 0) // S bit
{
// Start of fragmented unit
sc1 = (sc1 & 0xe0) | (sc2 & 0x1f);
*q++ = 0;
*q++ = 0;
*q++ = 0;
*q++ = 1;
*q++ = sc1;
zcount = 0;
printf("Fragmented block with code: %x\n", sc1);
}
}
else
{
// Normal start code
*q++ = 0;
*q++ = 0;
*q++ = 0;
*q++ = 1;
*q++ = sc1;
zcount = 0;
printf("Start block with code: %x\n", sc1);
}
// Engage emulation protect
while (p < p_end)
{
const byte b = *p++;
if (zcount == 2 && b <= 3)
{
*q++ = 3;
zcount = 0;
}
*q++ = b;
zcount = (b == 0) ? zcount + 1 : 0;
}
if (fwrite(buf2, q - buf2, 1, f_out) != 1)
{
perror(fname_out);
exit(1);
}
}
}
}
fclose(f_out);
fclose(f_in);
return 0;
}
/*
* Filter a transport stream by a list of pids.
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is the MPEG TS, PS and ES tools.
*
* The Initial Developer of the Original Code is Amino Communications Ltd.
* Portions created by the Initial Developer are Copyright (C) 2008
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Amino Communications Ltd, Swavesey, Cambridge UK
*
* ***** END LICENSE BLOCK *****
*/
// H.264 over RTP is defined in RFC3984
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <time.h>
#ifdef _WIN32
#include <stddef.h>
#endif // _WIN32
#include "compat.h"
#include "version.h"
#include "misc_fns.h"
#include "fmtx.h"
#define RTP_HDR_LEN 8
#define RTP_PREFIX_STRING "RTP "
#define RTP_PREFIX_LEN 4
#define RTP_LEN_OFFSET 4
static int c642b(const char c)
{
return (c >= 'A' && c <= 'Z') ? c - 'A' :
(c >= 'a' && c <= 'z') ? c - 'a' + 26 :
(c >= '0' && c <= '9') ? c - '0' + 52 :
(c == '+' || c == '-') ? 62 :
(c == '/' || c == '_') ? 63 :
(c == '=') ? -1 : -2;
}
static size_t b64str2binn(byte * const dest0, const size_t dlen, const char ** const plast, const char * src)
{
byte * dest = dest0;
uint32_t a = 0;
ssize_t i = 4;
size_t slen = (dlen * 4 + 5) / 3;
int b;
while ((b = c642b(*src++)) >= 0 && --slen != 0)
{
a = (a << 6) | b;
if (--i == 0)
{
*dest++ = (a >> 16) & 0xff;
*dest++ = (a >> 8) & 0xff;
*dest++ = a & 0xff;
i = 4;
}
}
// Tidy up at the end
if (i < 3) // i == 4 good, all done, i == 3 error
{
a <<= i * 6;
*dest++ = (a >> 16) & 0xff;
// Consume '='
if (b == -1)
b = c642b(*src++);
if (i == 1)
{
*dest++ = (a >> 8) & 0xff;
}
else if (b == -1)
++src;
}
if (plast != NULL)
*plast = src - 1;
return dest - dest0;
}
static void usage(void)
{
print_msg(
"Usage: rtp2264 <infile> <outfile> [<B64_header>[,<B64_header>...]]\n"
"\n");
REPORT_VERSION("rtp2264");
print_msg(
"\n"
" Take a RTP file (probably generated by pcapreport) containing\n"
" an H.264 stream and convert it into an Annex B encoded .264\n"
" elementary stream file.\n"
"\n"
" If <B64_header>s are specified then they are one or more\n"
" B64 encoded blocks containing SPS or PPS or other similar headers.\n"
" These will each have a 00 00 00 01 sequence added at the start and\n"
" then written at the start of <outfile>\n"
"\n"
"Switches:\n"
" none\n"
);
exit(1);
}
int main(int argc, char **argv)
{
FILE *f_in = NULL;
FILE *f_out = NULL;
const char * fname_in;
const char * fname_out;
int zcount = 0;
if (argc < 3)
{
usage();
}
fname_in = argv[1];
fname_out = argv[2];
if ((f_in = fopen(fname_in, "rb")) == NULL)
{
perror(argv[1]);
return 1;
}
if ((f_out = fopen(fname_out, "wb")) == NULL)
{
perror(argv[2]);
return 1;
}
if (argc > 3)
{
byte psbuf[0x1000];
const char * eo64 = argv[3];
psbuf[0] = 0;
psbuf[1] = 0;
psbuf[2] = 0;
psbuf[3] = 1;
do
{
size_t len = b64str2binn(psbuf + 4, sizeof(psbuf) - 4, &eo64, eo64);
if ((*eo64 != 0 && *eo64 != ',') || len == 0)
{
fprintf(stderr, "Bad B64 string: '%s' (len=%zd, chr=%d)\n", argv[3], len, *eo64);
exit(1);
}
if (fwrite(psbuf, len + 4, 1, f_out) != 1)
{
perror(fname_out);
exit(1);
}
} while (*eo64++ == ',');
}
for (;;)
{
byte buf[0x10000];
uint32_t rtplen;
if (fread(buf, RTP_HDR_LEN, 1, f_in) != 1)
{
if (ferror(f_in))
perror(fname_in);
break;
}
if (memcmp(buf, RTP_PREFIX_STRING, RTP_PREFIX_LEN) != 0)
{
fprintf(stderr, "### Bad RTP prefix\n");
break;
}
rtplen = uint_32_be(buf + RTP_LEN_OFFSET);
if (rtplen > sizeof(buf) || rtplen < 12)
{
fprintf(stderr, "### Bad RTP len: %" PRIu32 "\n", rtplen);
break;
}
if (fread(buf, rtplen, 1, f_in) != 1)
{
if (ferror(f_in))
perror(fname_in);
else
fprintf(stderr, "### Unexpected EOF\n");
break;
}
{
size_t offset = 12 + (buf[0] & 0xf) * 4;
size_t padlen = ((buf[0] & 0x20) != 0) ? buf[rtplen - 1] : 0;
// Check for extension
if ((buf[0] & 0x10) != 0) // X bit
offset += 4 + uint_16_be(buf + offset + 2);
if (rtplen < offset + padlen + 1)
{
fprintf(stderr, "### Bad RTP offset + padding\n");
}
// OK - got payload
{
const byte * p = buf + offset;
const byte * p_end = buf + rtplen - padlen;
byte buf2[0x18000]; // Allow for max expansion
byte * q = buf2;
byte sc1 = *p++;
if ((sc1 & 0x1f) == 28)
{
byte sc2 = *p++;
if ((sc2 & 0x80) != 0) // S bit
{
// Start of fragmented unit
sc1 = (sc1 & 0xe0) | (sc2 & 0x1f);
*q++ = 0;
*q++ = 0;
*q++ = 0;
*q++ = 1;
*q++ = sc1;
zcount = 0;
printf("Fragmented block with code: %x\n", sc1);
}
}
else
{
// Normal start code
*q++ = 0;
*q++ = 0;
*q++ = 0;
*q++ = 1;
*q++ = sc1;
zcount = 0;
printf("Start block with code: %x\n", sc1);
}
// Engage emulation protect
while (p < p_end)
{
const byte b = *p++;
if (zcount == 2 && b <= 3)
{
*q++ = 3;
zcount = 0;
}
*q++ = b;
zcount = (b == 0) ? zcount + 1 : 0;
}
if (fwrite(buf2, q - buf2, 1, f_out) != 1)
{
perror(fname_out);
exit(1);
}
}
}
}
fclose(f_out);
fclose(f_in);
return 0;
}