
Recherche avancée
Médias (1)
-
The pirate bay depuis la Belgique
1er avril 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Image
Autres articles (47)
-
Supporting all media types
13 avril 2011, parUnlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)
-
Des sites réalisés avec MediaSPIP
2 mai 2011, parCette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page. -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir
Sur d’autres sites (6069)
-
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 ();
}