Recherche avancée

Médias (0)

Mot : - Tags -/diogene

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (32)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip 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, par

    Modules 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, par

    Les 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 Dalot

    Je viens de faire un test en SPIP 2.0.25 [21954]
    Installation en Mysql

    Php 5.4 = ok
    app.engine=php
    app.engine.version=5.4

    http.firewall=none
    environment=production

    PHP 5.3 = Les tables du plugin agenda ne s’installent pas
    app.engine=php
    app.engine.version=5.3

    http.firewall=none
    environment=production

    J’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 TheSHEEEP

    I 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(&amp;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, &amp;pkt, frame, &amp;got_packet);
    if (result != 0)
    {
       av_log(c, AV_LOG_ERROR, "Error encoding audio. Code: %i\n", result);
       exit(1);
    }


    if (c->coded_frame &amp;&amp; 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, &amp;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 Kikohs

    I 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(&amp;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 ?