
Recherche avancée
Médias (1)
-
Video d’abeille en portrait
14 mai 2011, par
Mis à jour : Février 2012
Langue : français
Type : Video
Autres articles (104)
-
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
Configurer la prise en compte des langues
15 novembre 2010, parAccéder à la configuration et ajouter des langues prises en compte
Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...) -
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs
Sur d’autres sites (11270)
-
av_read_frame() in ffmpeg returns -5 while receiving UDP data [closed]
26 février 2024, par zttangI'm working on an app which is using ffmpeg lib. There is a living source keep sending TS stream thru udp. Then I allocated a thread use ffmpeg receive the TS packets. the code for this thread is like :


void* av_source_thread(void *data) {
 char udp_url[50];
 snprintf(udp_url, sizeof(udp_url), "udp://127.0.0.1:12345");
 AVDictionary* options = NULL;
 av_dict_set(&options, "timeout", "500000", 0); // timeout=0.5s
 av_dict_set(&options, "overrun_nonfatal", "1", 0);
 av_dict_set(&options, "fifo_size", "278876", 0); //50MB

 AVFormatContext *ffmpeg_source = avformat_alloc_context();
 while (running) {
 if (avformat_open_input(&ffmpeg_source, udp_url, NULL, &options) != 0) {
 continue;
 } else {
 break;
 }
 }
 // Some code fill codec type and alloc context here

 av_format_inject_global_side_data(ffmpeg_source);
 AVPacket *packet = av_packet_alloc();
 while (running) {
 ret = av_read_frame(ffmpeg_source, packet);
 if (ret < 0) {
 char errbuf[AV_ERROR_MAX_STRING_SIZE];
 av_strerror(ret, errbuf, AV_ERROR_MAX_STRING_SIZE);
 usleep(10000);
 log("av_read_frame failed, Exit, %s, %d", errbuf, ret);
 continue;
 }
 putPkt2Q(packet); 
 }
 av_packet_free(&packet);
 avformat_close_input(&ffmpeg_source);
 av_dict_free(&options);
 return nullptr;
}



Then the packets will be sent to Q and other thread will process them. but when I run the program, the av_read_frame will return -5(I/O error) from time to time. and once it returned -5, it can not recover unless I restart this thread.


since this is a real time source, so lost some frames are acceptable, I just want to know how to avoid this kind of issue or how to recover without restart the whole thread. I tried to increase the fifo_size in options, but it does not work.


-
avcodec_decode_video2 RETURNS THE VALUE -1094995529 in the threaded function
2 février 2016, par WhoamiI am developing rtsp streaming player, and followed the below approach.
1) Read packet, decode, display -> works perfectly.
while (1) {
if ( av_read_frame(pFormatCtx, &packet) >= 0) {
if (packet.stream_index == videoStream) {
retDecoder = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if ( retDecoder <= 0)
LOGD (" Unable to Decode...retval %d ", retDecoder);
if (frameFinished) {
}
}
av_free_packet (&packet);
}
}Whereas,
I introduced two threads, one is reading and pushing into the queue and the second one is reading from the queue.
My problem is while reading the same packet, and decode, i m unable to decode, the return value of the
av_video_decode2
is-1094995529
.Below is the short description of code. Kindly help to solve this issue ?.
AVPacketList *firstNode=NULL, *lastNode=NULL;
int pushPacket (AVPacket * pkt)
{
AVPacketList *newNode = av_malloc(sizeof(AVPacketList));
newNode->pkt = *pkt;
newNode->next = NULL;
SDL_LockMutex (rwMutex);
if (lastNode != NULL ) {
lastNode->next = newNode;
lastNode = newNode;
} else {
firstNode = lastNode = newNode;
}
SDL_UnlockMutex (rwMutex);
}
int pullPacket ()
{
AVPacketList *tempNode;
AVPacket *pkt;
int res=0;
SDL_LockMutex (rwMutex);
if ( firstNode != NULL ) {
tempNode = firstNode;
*pkt = tempNode->pkt;
res = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, pkt); // HERE IS THE PROBLEM.
if (frameFinished) {
LOGD (" fRAME DECODED.. %d \n", counter++);
}
if (firstNode->next != NULL) {
firstNode = firstNode->next;
}
else {
firstNode = NULL;
lastNode = NULL;
}
av_free (tempNode);
}
}In Thread 1 :
int PacketReader (void *ptr)
{
AVPacket pkt1, *rpacket;
rpacket = &pkt1;
while (globalQuit != 0) {
if ( av_read_frame(pFormatCtx, rpacket) >= 0) {
if (packet.stream_index == videoStream) {
pushPacket (rpacket);
}
av_free_packet(rpacket);
}
}
}In thread 2 :
while (1) {
pullPacket ();
} -
av_video_decode2 RETURNS THE VALUE -1094995529 in the threaded function
24 mai 2014, par WhoamiI am developing rtsp streaming player, and followed the below approach.
1) Read packet, decode, display -> works perfectly.
while (1) {
if ( av_read_frame(pFormatCtx, &packet) >= 0) {
if (packet.stream_index == videoStream) {
retDecoder = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if ( retDecoder <= 0)
LOGD (" Unable to Decode...retval %d ", retDecoder);
if (frameFinished) {
}
}
av_free_packet (&packet);
}
}Whereas,
I introduced two threads, one is reading and pushing into the queue and the second one is reading from the queue.
My problem is while reading the same packet, and decode, i m unable to decode, the return value of the
av_video_decode2
is-1094995529
.Below is the short description of code. Kindly help to solve this issue ?.
AVPacketList *firstNode=NULL, *lastNode=NULL;
int pushPacket (AVPacket * pkt)
{
AVPacketList *newNode = av_malloc(sizeof(AVPacketList));
newNode->pkt = *pkt;
newNode->next = NULL;
SDL_LockMutex (rwMutex);
if (lastNode != NULL ) {
lastNode->next = newNode;
lastNode = newNode;
} else {
firstNode = lastNode = newNode;
}
SDL_UnlockMutex (rwMutex);
}
int pullPacket ()
{
AVPacketList *tempNode;
AVPacket *pkt;
int res=0;
SDL_LockMutex (rwMutex);
if ( firstNode != NULL ) {
tempNode = firstNode;
*pkt = tempNode->pkt;
res = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, pkt); // HERE IS THE PROBLEM.
if (frameFinished) {
LOGD (" fRAME DECODED.. %d \n", counter++);
}
if (firstNode->next != NULL) {
firstNode = firstNode->next;
}
else {
firstNode = NULL;
lastNode = NULL;
}
av_free (tempNode);
}
}In Thread 1 :
int PacketReader (void *ptr)
{
AVPacket pkt1, *rpacket;
rpacket = &pkt1;
while (globalQuit != 0) {
if ( av_read_frame(pFormatCtx, rpacket) >= 0) {
if (packet.stream_index == videoStream) {
pushPacket (rpacket);
}
av_free_packet(rpacket);
}
}
}In thread 2 :
while (1) {
pullPacket ();
}