@@ -49,9 +49,14 @@ void* thread_stream_from_file(void *vargp)
49
49
char channelId [KMP_MAX_CHANNEL_ID ];
50
50
json_get_string (GetConfig (),"input.channelId" ,"1_abcdefgh" ,channelId ,sizeof (channelId ));
51
51
52
- int jumpOffsetSec = 0 ;
52
+ int64_t jumpOffsetSec = 0 ;
53
53
json_get_int64 (GetConfig (),"input.jumpoffsetsec" ,0 ,& jumpOffsetSec );
54
54
55
+ int64_t hiccupDurationSec , hiccupIntervalSec ;
56
+ json_get_int64 (GetConfig (),"input.hiccupDurationSec" ,0 ,& hiccupDurationSec );
57
+
58
+ json_get_int64 (GetConfig (),"input.hiccupIntervalSec" ,0 ,& hiccupIntervalSec );
59
+
55
60
AVPacket packet ;
56
61
av_init_packet (& packet );
57
62
@@ -86,8 +91,10 @@ void* thread_stream_from_file(void *vargp)
86
91
LOGGER ("SENDER" ,AV_LOG_INFO ,"Realtime = %s" ,realTime ? "true" : "false" );
87
92
srand ((int )time (NULL ));
88
93
uint64_t lastDts = 0 ;
89
- int64_t start_time = av_gettime_relative ();
90
-
94
+ int64_t start_time = av_gettime_relative (),
95
+ hiccup_duration = hiccupDurationSec * 1000 * 1000 ,
96
+ hiccup_interval = hiccupIntervalSec * 1000 * 1000 ,
97
+ next_hiccup = start_time + hiccup_interval ;
91
98
92
99
samples_stats_t stats ;
93
100
sample_stats_init (& stats ,standard_timebase );
@@ -143,12 +150,26 @@ void* thread_stream_from_file(void *vargp)
143
150
144
151
if (realTime && lastDts > 0 ) {
145
152
146
- int64_t timePassed = av_rescale_q (packet .dts - lastDts ,standard_timebase ,AV_TIME_BASE_Q );
147
- //LOGGER("SENDER",AV_LOG_DEBUG,"XXXX dt=%ld dd=%ld", (av_gettime_relative() - start_time),timePassed);
148
- while ((av_gettime_relative () - start_time ) < timePassed ) {
153
+ int64_t timePassed = av_rescale_q (packet .dts ,standard_timebase ,AV_TIME_BASE_Q ) + start_time ,
154
+ clockPassed = av_gettime_relative ();
155
+
156
+ if (clockPassed >= next_hiccup && clockPassed < next_hiccup + hiccup_duration ) {
157
+ next_hiccup += hiccup_duration ;
158
+ LOGGER ("SENDER" ,AV_LOG_INFO ,"hiccup! [ %ld - %ld ]" ,
159
+ ts2str ((clockPassed - start_time ) * 90 ,true),
160
+ ts2str ((next_hiccup - start_time ) * 90 ,true));
161
+
162
+ av_usleep (next_hiccup - clockPassed );
163
+
164
+ next_hiccup = av_gettime_relative () + hiccup_interval ;
165
+ }
166
+
167
+ LOGGER ("SENDER" ,AV_LOG_DEBUG ,"XXXX clockPassed=%ld timePassed=%ld" , clockPassed - start_time ,timePassed - start_time );
168
+ while (clockPassed < timePassed ) {
149
169
150
170
LOGGER0 ("SENDER" ,AV_LOG_DEBUG ,"XXXX Sleep 10ms" );
151
171
av_usleep (10 * 1000 );//10ms
172
+ clockPassed = av_gettime_relative ();
152
173
}
153
174
}
154
175
@@ -180,7 +201,7 @@ void* thread_stream_from_file(void *vargp)
180
201
LOGGER ("SENDER" ,AV_LOG_DEBUG ,"sent packet pts=%s dts=%s size=%d" ,
181
202
ts2str (packet .pts ,true),
182
203
ts2str (packet .dts ,true),
183
- packet .dts , packet . size );
204
+ packet .size );
184
205
185
206
186
207
av_packet_unref (& packet );
0 commit comments