[Libav-user] How do I change the .TS files "Timestamps and Continuity Counters"?

Wagner Patriota wagner.patriota at gmail.com
Fri May 18 23:33:25 CEST 2012

I am working in a implementation of HLS protocol.

I see all my .TS files have the "audio timestamp" equal to 126000.

According to the HLS specification, section 4 Media segments, it says:

A media segment MUST be the continuation of the encoded media at the
end of the segment with the previous sequence number, where values in
a continuous series, such as *timestamps* and *Continuity Counters*,
continue uninterrupted - unless the media segment was the first ever
to appear in the Playlist file or has an EXT-X-DISCONTINUITY tag
applied to it.

And then I see my videos are getting out of sync because of it. *How do I
change the .TS files "timestamps and Continuity Counters"?*
Thank you...

I am transmuxing the HLS files one by one, so I would like to have a
parameter [that I think it doesn't exist here]

MPEGTS muxer AVOptions:
-mpegts_transport_stream_id <int>   E.... Set transport_stream_id field.
-mpegts_original_network_id <int>   E.... Set original_network_id field.
-mpegts_service_id <int>   E.... Set service_id field.
-mpegts_pmt_start_pid <int>   E.... Set the first pid of the PMT.
-mpegts_start_pid  <int>   E.... Set the first pid.
-mpegts_m2ts_mode  <int>   E.... Enable m2ts mode.
-muxrate           <int>   E....
-pes_payload_size  <int>   E.... Minimum PES packet payload in bytes
-resend_headers    <int>   E.... Reemit PAT/PMT before writing the next

SO, with this "parameter" I would have a chance to change this data...
however, I tried to figure out in the mpegtsenc.c WHERE is this "timestamp"
or continuity counter...

I thought it would be somthing around here:

typedef struct MpegTSWriteStream {
    struct MpegTSService *service;
    int pid; /* stream associated pid */
*    int cc;*
    int payload_size;
*    int first_pts_check; ///< first pts check needed*
    int prev_payload_key;
    int64_t payload_pts;
    int64_t payload_dts;
    int payload_flags;
    uint8_t *payload;
    ADTSContext *adts;
} MpegTSWriteStream;

BUT I think I misinterpreted it... because in the mpegts_write_header(), we
    ts->pat.pid = PAT_PID;
    ts->pat.cc = 15; // Initialize at 15 so that it wraps and be equal to 0
for the first packet we write

as fixed values.... so I don't understand HOW THE mpegtsenc MUXER GOT
126000 as the timestamp... where is this value in mpegtsenc.c so I could
tune it?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20120518/cc8e4e30/attachment.html>

More information about the Libav-user mailing list