
Recherche avancée
Autres articles (70)
-
Mise à jour de la version 0.1 vers 0.2
24 juin 2013, parExplications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...) -
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)
Sur d’autres sites (11783)
-
FFmpeg av_read_frame() interrupt_callback
14 octobre 2024, par Elijaclass TimeoutHandler_c
{
public:
 TimeoutHandler_c() = default;
 ~TimeoutHandler_c() = default;
 
 void Reset(time_t timeout_microseconds)
 {
 Timeout = timeout_microseconds;
 TimeLast = GET_US_TIME();
 }
 
 bool IsTimeout()
 {
 const time_t duration = GET_US_TIME() - TimeLast;
 LOG(LOG_LEVEL_DEBUG, "Duration = %lli, timeout = %lli, result %i\n", duration, Timeout, duration > Timeout);
 return duration > Timeout;
 }
 
 static int CheckInterrupt(void* t)
 {
 return t && static_cast(t)->IsTimeout();
 }
 
 private:
 time_t Timeout{ 0 }; // microseconds
 time_t TimeLast{ 0 }; // microseconds
};
 
...

TimeoutHandler_c TimeoutHandler; //!< Control maximum time of packets waiting
AvFormatContext->interrupt_callback.opaque = (void*)&TimeoutHandler;
AvFormatContext->interrupt_callback.callback = &TimeoutHandler_c::CheckInterrupt;
 
...

while(1)
{
 ...
 TimeoutHandler.Reset(10000000);
 time_t time_before_av_read_frame = GET_US_TIME(); // microseconds
 int av_res = av_read_frame(AvFormatContext, av_packet.get());
 time_t time_after_av_read_frame = GET_US_TIME(); // microseconds
 LOG(LOG_LEVEL_DEBUG, "av_read_frame() res %i, time %lli, time_limit %lli\n", av_res, time_after_av_read_frame - time_before_av_read_frame, options_open->ReadFrameTimeout);
 
 if (av_res == 0) // packet with frame
 {
 LOG(LOG_LEVEL_DEBUG, "AVPacket(%i): stream_index %i, pts %lli, dts %lli, time_base.num %i, time_base.den %i, duration %lli, size %i, flags 0x%x, pos %lli, side_data_elems %i\n", av_packet_cnt, av_packet->stream_index, av_packet->pts, av_packet->dts, av_packet->time_base.num, av_packet->time_base.den, av_packet->duration, av_packet->size, av_packet->flags, av_packet->pos, av_packet->side_data_elems);
 ++av_packet_cnt;
 av_read_frame_error_count = 0;
 }
 else // no packet
 {
 ++av_read_frame_error_count;
 LOG(LOG_LEVEL_WARNING, "No av_packet, %lli errors in a row. av_read_frame() failed with averror: %s\n", av_read_frame_error_count, av_err2str(av_res));
 }
 ...
}



Logging (times in microseconds) :


10:52:50.234176:Run(925): av_read_frame() res 0, time 20354, time_limit 10000000
10:52:50.234235:Run(931): AVPacket(1695): stream_index 1, pts 661875112, dts 661875112, time_base.num 0, time_base.den 1, duration 1920, size 251, flags 0x1, pos 6341240, side_data_elems 1
10:52:50.234272:Run(925): av_read_frame() res 0, time 1, time_limit 10000000
10:52:50.234293:Run(931): AVPacket(1696): stream_index 1, pts 661877032, dts 661877032, time_base.num 0, time_base.den 1, duration 1920, size 250, flags 0x1, pos -1, side_data_elems 0
10:52:50.234319:Run(925): av_read_frame() res 0, time 1, time_limit 10000000
10:52:50.234338:Run(931): AVPacket(1697): stream_index 1, pts 661878952, dts 661878952, time_base.num 0, time_base.den 1, duration 1920, size 287, flags 0x1, pos -1, side_data_elems 0
10:52:50.234365:Run(925): av_read_frame() res 0, time 0, time_limit 10000000
10:52:50.234393:Run(931): AVPacket(1698): stream_index 1, pts 661880872, dts 661880872, time_base.num 0, time_base.den 1, duration 1920, size 323, flags 0x1, pos -1, side_data_elems 0
10:52:50.234423:IsTimeout(146): Duration = 1, timeout = 10000000, result 0
10:52:50.345009:IsTimeout(146): Duration = 110579, timeout = 10000000, result 0
10:52:50.456198:IsTimeout(146): Duration = 221772, timeout = 10000000, result 0
10:52:50.566359:IsTimeout(146): Duration = 331934, timeout = 10000000, result 0
10:52:50.675843:IsTimeout(146): Duration = 441409, timeout = 10000000, result 0
10:52:50.785050:IsTimeout(146): Duration = 550621, timeout = 10000000, result 0
10:52:50.906415:IsTimeout(146): Duration = 671985, timeout = 10000000, result 0
10:52:51.030219:IsTimeout(146): Duration = 795790, timeout = 10000000, result 0
10:52:51.155401:IsTimeout(146): Duration = 920970, timeout = 10000000, result 0
10:52:51.280220:IsTimeout(146): Duration = 1045789, timeout = 10000000, result 0
10:52:51.405379:IsTimeout(146): Duration = 1170948, timeout = 10000000, result 0
10:52:51.530548:IsTimeout(146): Duration = 1296118, timeout = 10000000, result 0
10:52:51.655525:IsTimeout(146): Duration = 1421099, timeout = 10000000, result 0
10:52:51.780054:IsTimeout(146): Duration = 1545622, timeout = 10000000, result 0
10:52:51.905742:IsTimeout(146): Duration = 1671312, timeout = 10000000, result 0
10:52:52.030028:IsTimeout(146): Duration = 1795598, timeout = 10000000, result 0
10:52:52.156941:IsTimeout(146): Duration = 1922516, timeout = 10000000, result 0
10:52:52.280096:IsTimeout(146): Duration = 2045669, timeout = 10000000, result 0
10:52:52.405634:IsTimeout(146): Duration = 2171209, timeout = 10000000, result 0
10:52:52.530967:IsTimeout(146): Duration = 2296541, timeout = 10000000, result 0
10:52:52.655179:IsTimeout(146): Duration = 2420754, timeout = 10000000, result 0
10:52:52.781832:IsTimeout(146): Duration = 2547403, timeout = 10000000, result 0
10:52:52.905314:IsTimeout(146): Duration = 2670889, timeout = 10000000, result 0
10:52:53.030055:IsTimeout(146): Duration = 2795630, timeout = 10000000, result 0
10:52:53.155874:IsTimeout(146): Duration = 2921448, timeout = 10000000, result 0
10:52:53.281438:IsTimeout(146): Duration = 3047014, timeout = 10000000, result 0
10:52:53.405043:IsTimeout(146): Duration = 3170613, timeout = 10000000, result 0
10:52:53.531218:IsTimeout(146): Duration = 3296793, timeout = 10000000, result 0
10:52:53.656935:IsTimeout(146): Duration = 3422504, timeout = 10000000, result 0
10:52:53.781820:IsTimeout(146): Duration = 3547395, timeout = 10000000, result 0
10:52:53.907028:IsTimeout(146): Duration = 3672600, timeout = 10000000, result 0
10:52:54.030327:IsTimeout(146): Duration = 3795899, timeout = 10000000, result 0
10:52:54.155265:IsTimeout(146): Duration = 3920833, timeout = 10000000, result 0
10:52:54.281383:IsTimeout(146): Duration = 4046958, timeout = 10000000, result 0
10:52:54.405035:IsTimeout(146): Duration = 4170604, timeout = 10000000, result 0
10:52:54.530395:IsTimeout(146): Duration = 4295971, timeout = 10000000, result 0
10:52:54.655403:IsTimeout(146): Duration = 4420976, timeout = 10000000, result 0
10:52:54.780385:IsTimeout(146): Duration = 4545954, timeout = 10000000, result 0
10:52:54.905529:IsTimeout(146): Duration = 4671098, timeout = 10000000, result 0
10:52:55.030476:IsTimeout(146): Duration = 4796050, timeout = 10000000, result 0
10:52:55.155904:IsTimeout(146): Duration = 4921479, timeout = 10000000, result 0
10:52:55.280770:IsTimeout(146): Duration = 5046339, timeout = 10000000, result 0
10:52:55.405693:IsTimeout(146): Duration = 5171254, timeout = 10000000, result 0
10:52:55.530824:IsTimeout(146): Duration = 5296397, timeout = 10000000, result 0
10:52:55.655984:IsTimeout(146): Duration = 5421559, timeout = 10000000, result 0
10:52:55.780807:IsTimeout(146): Duration = 5546382, timeout = 10000000, result 0
10:52:55.905002:IsTimeout(146): Duration = 5670577, timeout = 10000000, result 0
10:52:56.030066:IsTimeout(146): Duration = 5795641, timeout = 10000000, result 0
10:52:56.155151:IsTimeout(146): Duration = 5920726, timeout = 10000000, result 0
10:52:56.281405:IsTimeout(146): Duration = 6046980, timeout = 10000000, result 0
10:52:56.406788:IsTimeout(146): Duration = 6172357, timeout = 10000000, result 0
10:52:56.530478:IsTimeout(146): Duration = 6296054, timeout = 10000000, result 0
10:52:56.656392:IsTimeout(146): Duration = 6421968, timeout = 10000000, result 0
10:52:56.781922:IsTimeout(146): Duration = 6547497, timeout = 10000000, result 0
10:52:56.905743:IsTimeout(146): Duration = 6671311, timeout = 10000000, result 0
10:52:57.031014:IsTimeout(146): Duration = 6796589, timeout = 10000000, result 0
10:52:57.155710:IsTimeout(146): Duration = 6921282, timeout = 10000000, result 0
10:52:57.281593:IsTimeout(146): Duration = 7047168, timeout = 10000000, result 0
10:52:57.406115:IsTimeout(146): Duration = 7171690, timeout = 10000000, result 0
10:52:57.530220:IsTimeout(146): Duration = 7295796, timeout = 10000000, result 0
10:52:57.655566:IsTimeout(146): Duration = 7421135, timeout = 10000000, result 0
10:52:57.780723:IsTimeout(146): Duration = 7546298, timeout = 10000000, result 0
10:52:57.905480:IsTimeout(146): Duration = 7671050, timeout = 10000000, result 0
10:52:58.030799:IsTimeout(146): Duration = 7796375, timeout = 10000000, result 0
10:52:58.155789:IsTimeout(146): Duration = 7921364, timeout = 10000000, result 0
10:52:58.281769:IsTimeout(146): Duration = 8047344, timeout = 10000000, result 0
10:52:58.405858:IsTimeout(146): Duration = 8171427, timeout = 10000000, result 0
10:52:58.531698:IsTimeout(146): Duration = 8297271, timeout = 10000000, result 0
10:52:58.656105:IsTimeout(146): Duration = 8421681, timeout = 10000000, result 0
10:52:58.780503:IsTimeout(146): Duration = 8546072, timeout = 10000000, result 0
10:52:58.905195:IsTimeout(146): Duration = 8670770, timeout = 10000000, result 0
10:52:59.030539:IsTimeout(146): Duration = 8796114, timeout = 10000000, result 0
10:52:59.156909:IsTimeout(146): Duration = 8922482, timeout = 10000000, result 0
10:52:59.281819:IsTimeout(146): Duration = 9047392, timeout = 10000000, result 0
10:52:59.405967:IsTimeout(146): Duration = 9171536, timeout = 10000000, result 0
10:52:59.531362:IsTimeout(146): Duration = 9296937, timeout = 10000000, result 0
10:52:59.655612:IsTimeout(146): Duration = 9421181, timeout = 10000000, result 0
10:52:59.780532:IsTimeout(146): Duration = 9546101, timeout = 10000000, result 0
10:52:59.906761:IsTimeout(146): Duration = 9672331, timeout = 10000000, result 0
10:53:00.030563:IsTimeout(146): Duration = 9796138, timeout = 10000000, result 0
10:53:00.156556:IsTimeout(146): Duration = 9922131, timeout = 10000000, result 0
10:53:00.280257:IsTimeout(146): Duration = 10045828, timeout = 10000000, result 1
10:53:00.280398:Run(925): av_read_frame() res 0, time 10045975, time_limit 10000000
10:53:00.280420:Run(931): AVPacket(1699): stream_index 0, pts 661881817, dts 661874257, time_base.num 0, time_base.den 1, duration 3753, size 1874, flags 0x0, pos 6334472, side_data_elems 1
10:53:00.280480:Run(925): av_read_frame() res 0, time 21, time_limit 10000000
10:53:00.280501:Run(931): AVPacket(1700): stream_index 0, pts 661878037, dts 661878037, time_base.num 0, time_base.den 1, duration 3753, size 1154, flags 0x0, pos 6339924, side_data_elems 0
10:53:00.280533:Run(925): av_read_frame() res -1414092869, time 5, time_limit 10000000
10:53:00.280561:Run(952): No av_packet, 1 errors in a row. av_read_frame() failed with averror: Immediate exit requested
10:53:00.290830:Run(925): av_read_frame() res -1414092869, time 17, time_limit 10000000
10:53:00.290862:Run(952): No av_packet, 2 errors in a row. av_read_frame() failed with averror: Immediate exit requested
10:53:00.301673:Run(925): av_read_frame() res -1414092869, time 25, time_limit 10000000
10:53:00.301725:Run(952): No av_packet, 3 errors in a row. av_read_frame() failed with averror: Immediate exit requested
10:53:00.312259:Run(925): av_read_frame() res -1414092869, time 10, time_limit 10000000
10:53:00.312308:Run(952): No av_packet, 4 errors in a row. av_read_frame() failed with averror: Immediate exit requested
10:53:00.323144:Run(925): av_read_frame() res -1414092869, time 11, time_limit 10000000
10:53:00.323196:Run(952): No av_packet, 5 errors in a row. av_read_frame() failed with averror: Immediate exit requested
10:53:00.334049:Run(925): av_read_frame() res -1414092869, time 9, time_limit 10000000
10:53:00.334101:Run(952): No av_packet, 6 errors in a row. av_read_frame() failed with averror: Immediate exit requested



I start broadcasting to the address udp ://239.0.0.1:6688. I start receiving data successfully. Then I stop broadcasting. As a result, the av_read_frame(), as expected, is blocked for 10 seconds, which I set before calling av_read_frame().
But I have two questions :


- 

- Why, after 10 seconds of blocking and exiting at the maximum waiting time I set, I get 2 good video frames (stream_index 0). Why don't I get these frames earlier ? It seems that the blocking occurs while waiting for elementary audio stream data (stream_index 1), although the elementary video stream data (stream_index 0) is available. But this can't be true, can it ?
- Why do I get "Immediate exit requested" errors with a frequency of 10 milliseconds, although I set the maximum waiting time to 10 seconds each time before av_read_frame() ? Or is the "Immediate exit requested" error not related to the maximum wait time I set ? How is this situation different from waiting for data for 10 seconds earlier, when the broadcast was also already stopped ? I saw that ffplay in some situations uses a wait of 10 milliseconds (https://ffmpeg.org/doxygen/trunk/ffplay_8c_source.html#l03023)






-
8 Best Tools to Analyse Website Traffic
12 septembre 2023, par Erin — Analytics Tips, Marketing -
Revision 37444 : Si les theora+vorbis plantent sur vorbis quand ils sont en mono, vorbis ...
20 avril 2010, par kent1@… — LogSi les theora+vorbis plantent sur vorbis quand ils sont en mono, vorbis plantera aussi ... on rationalise tout cela