[linux-dvb] RE : inserting user PIDs in TS

Morgan Tørvolt morgan.torvolt at gmail.com
Mon May 19 13:26:47 CEST 2008

I am not sure that I agreen on having to modify PCR even if you add
data to the mux. Every service has it's own PCR, If you add a new pid
without PCR, then you just have to increase output datarate
accordingly. As long as the PCR leaves the muxing software at the same
time as it would do without injecting the pid, there should be no
difference at the receiving end. You should be able to inject any
ammount of pids and data as long as you don't introduce a lot of PCR
jitter (given that the receiving end can handle the increased datarate
of course)


On 13/05/2008, Thierry Lelegard <thierry.lelegard at tv-numeric.com> wrote:
> >I would like to know that can we insert user defined PIDs into the TS
>  >stream. how should i go about? What standard should i follow? How should I
>  >format the the packets ( segment - section etc...).
>  >can any body help in this regard.
> Yes, in theory, you can.
>  Keep in mind, however, that multiplexing is a quite difficult job
>  (this is what multiplexers are made for).
>  Several issue (no specific order):
>  - What is your target application in the STB? What kind of data does it
>  expect? How does it determine the data PID?
>  - Selecting a data format. If you target an EPG as your previous postings
>  suggest, you need to build EIT-schedule sections. See ETSI EN 300 468,
>  "Digital Video Broadcasting (DVB); Specification for Service Information
>  (SI) in DVB systems".
>  - Build TS packets from sections. See ISO/IEC 13818-1, "Information technology,
>  Generic coding of moving pictures and associated audio information: Systems"
>  (a.k.a. "MPEG-2 system layer"). Also be careful to update continuity counters.
>  - Insert TS packets in the transport stream. Several possibilities:
>  1) Really "insert" (ie. "add") packets in the TS. Note that this will increase
>  the bitrate of the TS, which may be a problem depending on the transport medium.
>  You will also have to resample all PCR's, which can be very tricky.
>  2) Replace existing packets with yours, without deleting any. This way, the
>  bitrate of the TS remains the same and you do not need to modify the PCR.
>  Now, the question is "which packets should I replace?" since these packets
>  will be deleted from the TS. Two possibilities:
>  2.1) If your data naturally replace one PID, replace all packets from this
>  PID. If you want to replace the EIT for instance, replace all packets from
>  PID 0x0012. But keep in mind that this PID potentially contains 4 types of
>  EIT's: schedule and present/following, both either "actual" or "other".
>  So, if you replace only one type of EIT, be cautious to keep to others
>  and to reinject them in your rebuilt PID.
>  2.2) If you create a new PID, the simplest method is to "steal" stuffing
>  packets (any packet from PID 0x1FFF). Most TS contain stuffing, sometimes
>  more than 1 Mb/s of stuffing. If your required data rate is less than the
>  suffing rate of the TS, this is the simplest method.
>  - Finally, make sure your PID is referenced somewhere, in accordance with
>  your application: predefined standard PID such as 0x0012 for EIT or as a
>  component of a service in a PMT, or as a new data service with a dedicated
>  PMT (also require to update the PAT and optionally the SDT and NIT).
>  Remember that if your TS is going through a MUX, PID remapping may occur
>  and your TS need to be consistent from the beginning.
>  I have already done all of this (creating sections, packetizing them,
>  stealing stuffing, adding components in a PMT, etc). It works quite well
>  but it is not really easy without the appropriate tools (you need to code
>  everything yourself).
>  -Thierry
>  _______________________________________________
>  linux-dvb mailing list
>  linux-dvb at linuxtv.org
>  http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

More information about the linux-dvb mailing list