
Recherche avancée
Autres articles (32)
-
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 -
Configuration spécifique d’Apache
4 février 2011, parModules spécifiques
Pour la configuration d’Apache, il est conseillé d’activer certains modules non spécifiques à MediaSPIP, mais permettant d’améliorer les performances : mod_deflate et mod_headers pour compresser automatiquement via Apache les pages. Cf ce tutoriel ; mode_expires pour gérer correctement l’expiration des hits. Cf ce tutoriel ;
Il est également conseillé d’ajouter la prise en charge par apache du mime-type pour les fichiers WebM comme indiqué dans ce tutoriel.
Création d’un (...) -
Librairies et binaires spécifiques au traitement vidéo et sonore
31 janvier 2010, parLes logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
Binaires complémentaires et facultatifs flvtool2 : (...)
Sur d’autres sites (3463)
-
Anomalie #3418 : Les tables des plugins ne s’installent pas
20 avril 2015, par Franck DalotJe viens de faire un test en SPIP 2.0.25 [21954]
Installation en MysqlPhp 5.4 = ok
app.engine=php
app.engine.version=5.4http.firewall=none
environment=productionPHP 5.3 = Les tables du plugin agenda ne s’installent pas
app.engine=php
app.engine.version=5.3http.firewall=none
environment=productionJ’ai fait ce test, car b_b n’avait pas fait de report de https://core.spip.net/issues/3086 dans cette branche.
Le comportement semble identique à spip 3.1 -
av_write_frame fails when encoding a larger audio file to .mpg
27 novembre 2012, par TheSHEEEPI am encoding live rendered video data and an existing .wav file into an mpg-file.
To do that I first write all audio frames, and then the video frames as they come in from the render engine. For smaller .wav files (< 25 seconds), everything works perfectly fine. But as soon as I use a longer .wav file, av_write_frame (when writing the audio frame) just returns -1 after having written some 100 frames. It is never the same frame at which it fails, also it is never the last frame.
All test files can be played perfectly with any player I tested.I am following the muxing example (more or less).
Here is my function that writes an audio frame :
void write_audio_frame( Cffmpeg_dll * ptr, AVFormatContext *oc, AVStream *st, int16_t sample_val )
{
AVCodecContext *c;
AVPacket pkt = { 0 }; // data and size must be 0;
AVFrame *frame = avcodec_alloc_frame();
int got_packet;
av_init_packet(&pkt);
c = st->codec;
get_audio_frame(ptr, ptr->samples, ptr->audio_input_frame_size, c->channels);
frame->nb_samples = ptr->audio_input_frame_size;
int result = avcodec_fill_audio_frame(frame, c->channels, c->sample_fmt,
(uint8_t *) ptr->samples,
ptr->audio_input_frame_size *
av_get_bytes_per_sample(c->sample_fmt) *
c->channels, 0);
if (result != 0)
{
av_log(c, AV_LOG_ERROR, "Error filling audio frame. Code: %i\n", result);
exit(1);
}
result = avcodec_encode_audio2(c, &pkt, frame, &got_packet);
if (result != 0)
{
av_log(c, AV_LOG_ERROR, "Error encoding audio. Code: %i\n", result);
exit(1);
}
if (c->coded_frame && c->coded_frame->pts != AV_NOPTS_VALUE)
pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
pkt.flags |= AV_PKT_FLAG_KEY;
pkt.stream_index= st->index;
av_log(c, AV_LOG_ERROR, "Got? %i Pts: %i Dts: %i Flags: %i Side Elems: %i Size: %i\n",
got_packet, pkt.pts, pkt.dts, pkt.flags, pkt.side_data_elems, pkt.size);
/* write the compressed frame in the media file */
result = av_write_frame(oc, &pkt);
if (result != 0)
{
av_log(c, AV_LOG_ERROR, "Error while writing audio frame. Result: %i\n", result);
exit(1);
}
}So "Error while writing audio frame. Result : -1" is what I always get after some frames.
And here is my get_audio_frame function :
void get_audio_frame( Cffmpeg_dll* ptr, int16_t* samples, int frame_size, int nb_channels, int16_t sample_val )
{
fread( samples, sizeof( int16_t ), frame_size * nb_channels, ptr->fp_sound_input );
};And finally, this is the loop in which I write all audio frames (don't worry about the .wav header, I skipped it before that loop) :
while (!feof(ptr->fp_sound_input))
{
write_audio_frame( ptr, ptr->oc, ptr->audio_st, -1 );
}As you can see, I'm outputting almost everything in the packet and check for any possible error. Other than av_write_frame failing after some time when I am encoding a longer audio file, everything seems perfectly fine. All the packet values I am tracking are 100% the same for all frames (except the data pointer, obviously). Also, as stated, the same procedure works flawlessly for shorter fp_sound_input files. avcodec_encode_audio2() and avcodec_fill_audio_frame() also never fail.
The codecs I use for encoding are CODEC_ID_MPEG2VIDEO (video) and CODEC_ID_MP2 (audio). The .wav files are saved in PCM 16 LE (all use the exact same encoding).
What could be wrong here ?
-
FFmpeg insufficient thread locking only when deploying application using homebrew
20 décembre 2012, par KikohsI have the strangest bug of my life.
I have installed ffmpeg using homebrew. I use it from a dll.
I have set a lock manager because I use ffmpeg from multiple threads.In Engine.h :
class EXPORT_LIB Engine
{
public:
static int initEngine();
static int closeEngine();
};In Engine.cpp :
static int ff_lockmgr(void **mutex, enum AVLockOp op)
{
if (NULL == mutex)
return -1;
switch(op)
{
case AV_LOCK_CREATE:
{
*mutex = NULL;
boost::mutex * m = new boost::mutex();
*mutex = static_cast(m);
break;
}
case AV_LOCK_OBTAIN:
{
boost::mutex * m = static_cast(*mutex);
m->lock();
break;
}
case AV_LOCK_RELEASE:
{
boost::mutex * m = static_cast(*mutex);
m->unlock();
break;
}
case AV_LOCK_DESTROY:
{
boost::mutex * m = static_cast(*mutex);
delete m;
break;
}
default:
break;
}
return 0;
}
int Engine::initEngine()
{
int res = -1;
res = av_lockmgr_register(&ff_lockmgr);
av_register_all();
av_log_set_level(AV_LOG_QUIET); // ERROR, PANIC
// Av lock manager success
if( res == 0 ) {
res = MULTITHREAD;
}
else {
res = SINGLETHREAD;
}
return res;
}
int Engine::closeEngine()
{
int res = 0;
res = av_lockmgr_register(NULL);
return res;
}So far so good, everything works as expected.
When I deploy my app using CMake fix_bundle. I have an error message
insufficient thread locking around avcodec_open/close()
If I compile ffmpeg by hand in a custom location, when I deploy the app everything works as expected. What is wrong with homebrew ?