Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

An analyzer for MPEG 2 Program Stream files

0.00/5 (No votes)
12 Apr 2004 1  
Simple program that interprets a MPEG 2 file.

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:

Sample screenshot

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):

Sample screenshot

This is how the program looks when you start it.

Main window (after processing a file) :

Sample screenshot

This is how the main window looks after a successful process.

Browse window:

Sample screenshot

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:

Sample screenshot

at the beginning of file.

Sample screenshot

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).

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here