
Recherche avancée
Médias (91)
-
MediaSPIP Simple : futur thème graphique par défaut ?
26 septembre 2013, par
Mis à jour : Octobre 2013
Langue : français
Type : Video
-
avec chosen
13 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
sans chosen
13 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
config chosen
13 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
SPIP - plugins - embed code - Exemple
2 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
GetID3 - Bloc informations de fichiers
9 avril 2013, par
Mis à jour : Mai 2013
Langue : français
Type : Image
Autres articles (71)
-
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 -
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 (...)
Sur d’autres sites (9533)
-
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_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_open2 returns -22 "Invalid argument" trying to encode AV_CODEC_ID_H264
26 mai 2023, par Fries of DoomI'm trying to use libavcodec to encode h264 video but avcodec_open2 returns -22 "Invalid argument" and I can't figure out why. Here is my code, which is mostly a copy from the encode example from libavcodec.


/* find the mpeg1video encoder */
 const AVCodec* codec = avcodec_find_encoder(AV_CODEC_ID_H264);
 if (!codec) {
 fprintf(stderr, "Codec '%s' not found\n", "h.264");
 exit(1);
 }

 AVCodecContext* codecContext = avcodec_alloc_context3(codec);
 if (!codecContext) {
 fprintf(stderr, "Could not allocate video codec context\n");
 exit(1);
 }

 AVPacket* pkt = av_packet_alloc();
 if (!pkt)
 exit(1);

 /* put sample parameters */
 codecContext->bit_rate = 400000;
 /* resolution must be a multiple of two */
 codecContext->width = 1920;
 codecContext->height = 1080;
 /* frames per second */
 codecContext->time_base = { 1, 25 };
 codecContext->framerate = { 25, 1 };

 /* emit one intra frame every ten frames
 * check frame pict_type before passing frame
 * to encoder, if frame->pict_type is AV_PICTURE_TYPE_I
 * then gop_size is ignored and the output of encoder
 * will always be I frame irrespective to gop_size
 */
 codecContext->gop_size = 10;
 codecContext->max_b_frames = 1;
 codecContext->codec_type = AVMEDIA_TYPE_VIDEO;
 codecContext->pix_fmt = AV_PIX_FMT_YUV420P;

 if (codec->id == AV_CODEC_ID_H264)
 av_opt_set(codecContext->priv_data, "profile", "baseline", 0);

 /* open it */
 int ret = avcodec_open2(codecContext, codec, nullptr);
 if (ret < 0) {
 char eb[AV_ERROR_MAX_STRING_SIZE];
 fprintf(stderr, "Could not open codec: %s\n", av_make_error_string(eb, AV_ERROR_MAX_STRING_SIZE, ret));
 exit(1);
 }



Does anyone know what I'm doing wrong ?