#!/usr/bin/python

import pygst
pygst.require ("0.10")
import gst

import sys

def pat_info_cb (sender, demux, param):
    print "PAT Info:", demux.get_name()
    pi = demux.get_property ("pat-info")
    for prog in pi:
        print "  Program %d on PID 0x%04x" % (prog.props.program_number, prog.props.pid)

def pmt_info_cb (sender, demux, param):
    pi = demux.get_property ("pmt-info")
    print "PMT Info for program %d:" % (pi.props.program_number), demux.get_name()
    print "  PCR on PID 0x%04x" % (pi.props.pcr_pid)
    for s in pi.props.stream_info:
        print "  Stream on pid 0x%04x" % (s.props.pid)

if len (sys.argv) < 2:
    print "Usage: %s filename [program-num]" % (sys.argv[0])
    sys.exit (1)

filename = sys.argv[1]
prog_no = -1
if len (sys.argv) == 3:
  prog_no = int (sys.argv[2])

p = gst.parse_launch ("filesrc location=%s ! flutsdemux program-number=%d check-crc=false ! video/mpeg ! fakesink" % (filename, prog_no))

p.connect ("deep-notify::pat-info", pat_info_cb)
p.connect ("deep-notify::pmt-info", pmt_info_cb)
p.set_state (gst.STATE_PLAYING);

bus = p.get_bus()
while 1:
      # msg = bus.poll(gst.MESSAGE_EOS | gst.MESSAGE_ERROR, -1)
      msg = bus.poll(gst.MESSAGE_EOS | gst.MESSAGE_ERROR, 3 * gst.SECOND)
      if msg:
         break

p.set_state(gst.STATE_NULL)
