Intro:
This program is about demultiplexing a MPEG 2 movie file to its elementary packets. The program is a standalone release that I developed after the TS_Constructor program and represents the next step in multiplexing elementary streams for the HDTV standard.
The concept:
You know, of course, that a movie file of any type must contain specific info (audio, video, data and other stuff). What this program does is to identify and list detailed info on a MPEG 2 standard file. Each movie file is encoded in specific packets. Each packet serves a purpose: you have video packets, audio packets, stream specific packets (as PACK Header, System Header or PSM-Program Stream Map packet). Video and Audio packets usually form the ES (Elementary Streams) of a movie file and are encoded in PES (Packetized Elementary Streams) packets. One or more PES are regarded as PACKS, delimited by PACK Headers, as shown in the figure below that explains how a MPEG 2 stream is composed:
The program:
PS_Analyzer counts every type of packet in an input MPEG 2 file. The counts are displayed on screen while detailed info (type, number, size, SCR, PTS, DTS) for each packet as well as an overall statistic, is listed to an output text file specified by the user. As a note, SCR stands for System Clock Reference and is found in every PACK Header, PTS stands for Presentation Time Stamp and indicates the decoder when a specific picture or sound is to be displayed, DTS stands for Decoding Time Stamp and indicates the decoder when a certain picture or sound is to be decoded, because the order of images in a MPEG 2 file isn't the order of viewing when displayed as a movie. All this values are given in milliseconds. This concept isn't something new at all, you'll find the same idea in BBTOOLS sources from the BBMPEG project. The difference might be that this isn't a console application and is specifically developed for MPEG 2 files (also known as Program Streams). The program isn't too fancy but surely is functional and easy to use. It features only two forms, a main form, and a BROWSER form to help retrieve MPEG 2 files that are in different locations as the program.
Main window (at start):
This is how the program looks when you start it.
Main window (after processing a file) :
This is how the main window looks after a successful process.
Browse window:
This is the browse window used to change the current directory.
Output text file:
That's what you'll see in the output text file after processing a MPEG 2 stream:
at the beginning of file.
at the end of file.
Author notes:
This program might prove very useful. Apart from extracting info on a MPEG 2 files, with slight modifications it can be used to read any type of movie or to demultiplex a movie into Elementary Streams (Audio & Video components). The down side might be that comments are mostly in Romanian, but giving the MPEG 2 organization picture provided and the ease of C# classes, I hope it is not too hard to decipher the source code.
For impressions regarding this program or discussions related to this subject, feel free to contact me by e-mail (ro_angel_bv@hotmail.com or ro_angel_bv@fastmail.fm).