[FFmpeg-devel] [PATCHed] change PAT/PMT/SDT playout to be dependant on PTS and not a number of packets.

JULIAN GARDNER joolzg at btinternet.com
Sat May 21 07:50:00 CEST 2011





----- Original Message -----
> From: Baptiste Coudurier <baptiste.coudurier at gmail.com>
> To: FFmpeg development discussions and patches <ffmpeg-devel at ffmpeg.org>
> Cc: 
> Sent: Friday, 20 May 2011, 23:23
> Subject: Re: [FFmpeg-devel] [PATCHed] change PAT/PMT/SDT playout to be dependant on PTS and not a number of packets.
> 
> Hi,
> 
> On 05/20/2011 07:07 AM, JULIAN GARDNER wrote:
>>  ----- Original Message -----
>>>  From: Michael Niedermayer <michaelni at gmx.at>
>>>  To: FFmpeg development discussions and patches 
> <ffmpeg-devel at ffmpeg.org>
>>>  Cc: 
>>>  Sent: Friday, 20 May 2011, 16:02
>>>  Subject: Re: [FFmpeg-devel] [PATCHed] change PAT/PMT/SDT playout to be 
> dependant on PTS and not a number of packets.
>>> 
>>>  On Fri, May 20, 2011 at 02:29:19PM +0100, JULIAN GARDNER wrote:
>>>  [...]
>>>>   I have a newer version if you want this, i removed the temp 
> variables and 
>>>  also added in 3 AVOption options to allow these 3 values to be set.
>>> 
>>>  please post it
>>> 
>>>  [...]
>> 
>>  New version, still uses pts as its base.
>> 
>>  Will look at changing to PCR but i dont think they need to be so accurate 
> +-40ms wont make a difference.
>> 
>>  Added 3 new options in the AVOption structure
>> 
>>  mpegts_pat_playout_rate
>>  mpegts_pmt_playout_rate
>>  mpegts_sdt_playout_rate
>> 
>>  joolz
>> 
>> 
>>  mpegtsenc.diff
>> 
>> 
>>  diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
>>  index 39185bb..f96934e 100644
>>  --- a/libavformat/mpegtsenc.c
>>  +++ b/libavformat/mpegtsenc.c
>>  @@ -58,8 +58,11 @@ typedef struct MpegTSWrite {
>>       MpegTSService **services;
>>   
>>       int64_t sdt_pts;
>>  +    int sdt_timeout;
>>       int64_t pmt_pts;
>>  +    int pmt_timeout;
>>       int64_t pat_pts;
>>  +    int pat_timeout;
>>   
>>       int nb_services;
>>       int onid;
>>  @@ -86,6 +89,12 @@ static const AVOption options[] = {
>>         offsetof(MpegTSWrite, pmt_start_pid), FF_OPT_TYPE_INT, {.dbl = 
> 0x1000 }, 0x1000, 0x1f00, AV_OPT_FLAG_ENCODING_PARAM},
>>       { "mpegts_start_pid", "Set the first pid.",
>>         offsetof(MpegTSWrite, start_pid), FF_OPT_TYPE_INT, {.dbl = 0x0100 }, 
> 0x0100, 0x0f00, AV_OPT_FLAG_ENCODING_PARAM},
>>  +    { "mpegts_pat_playout_rate", "Set the rate to playout 
> the PAT in ms.",
>>  +      offsetof(MpegTSWrite, pat_timeout), FF_OPT_TYPE_INT, {.dbl = 250 }, 
> 125, 500, AV_OPT_FLAG_ENCODING_PARAM},
>>  +    { "mpegts_pmt_playout_rate", "Set the rate to playout 
> the PMT in ms.",
>>  +      offsetof(MpegTSWrite, pmt_timeout), FF_OPT_TYPE_INT, {.dbl = 375 }, 
> 250, 750, AV_OPT_FLAG_ENCODING_PARAM},
>>  +    { "mpegts_sdt_playout_rate", "Set the rate to playout 
> the SDT in ms.",
>>  +      offsetof(MpegTSWrite, sdt_timeout), FF_OPT_TYPE_INT, {.dbl = 1250 }, 
> 250, 10000, AV_OPT_FLAG_ENCODING_PARAM},
>>       { NULL },
>>   };
>>   
>>  @@ -574,9 +583,9 @@ static int mpegts_write_header(AVFormatContext *s)
>>       else
>>           av_log(s, AV_LOG_INFO, "muxrate %d, ", ts->mux_rate);
>>       av_log(s, AV_LOG_INFO, "pcr every %d pkts, "
>>  -           "sdt every %d, pat %d, pmt every %d pkts\n",
>>  +           "sdt every %d, pat %d, pmt every %d ms\n",
>>              service->pcr_packet_period,
>>  -           SDT_RETRANS_TIME, PAT_RETRANS_TIME, PMT_RETRANS_TIME);
>>  +           ts->sdt_timeout, ts->pat_timeout, ts->pmt_timeout);
>>   
>>       avio_flush(s->pb);
>>   
>>  @@ -596,20 +605,16 @@ static void retransmit_si_info(AVFormatContext *s, 
> int64_t pts)
>>   {
>>       MpegTSWrite *ts = s->priv_data;
>>       int i;
>>  -    int64_t temp_pts;
>>   
>>  -    temp_pts = 90*SDT_RETRANS_TIME;
>>  -    if (ts->sdt_pts==-1 || (abs(ts->sdt_pts-pts)>temp_pts)) {
>>  +    if (ts->sdt_pts==-1 || 
> (abs(ts->sdt_pts-pts)>(90*ts->sdt_timeout))) {
>>           mpegts_write_sdt(s);
>>           ts->sdt_pts = pts;
>>       }
> 
> Is it possible to write everything in write_header the first time and do
> not check for -1 here ?
> 
> [...]
> 
> -- 
> Baptiste COUDURIER
> Key fingerprint          8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
> FFmpeg maintainer                          http://www.ffmpeg.org
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

yep i can do that,  will post in a little while

joolz


More information about the ffmpeg-devel mailing list