Recherche avancée

Médias (1)

Mot : - Tags -/intégration

Autres articles (58)

  • Mediabox : ouvrir les images dans l’espace maximal pour l’utilisateur

    8 février 2011, par

    La visualisation des images est restreinte par la largeur accordée par le design du site (dépendant du thème utilisé). Elles sont donc visibles sous un format réduit. Afin de profiter de l’ensemble de la place disponible sur l’écran de l’utilisateur, il est possible d’ajouter une fonctionnalité d’affichage de l’image dans une boite multimedia apparaissant au dessus du reste du contenu.
    Pour ce faire il est nécessaire d’installer le plugin "Mediabox".
    Configuration de la boite multimédia
    Dès (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-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

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

Sur d’autres sites (12277)

  • Set H264 high quality encoding in FFMPEG

    25 décembre 2015, par hiitiger

    I’m working on a function, using ffmpeg to encode a serial images to a MP4 file.
    I use H264 codec, and want to have a high quality output.

    Other things now goes well, but the video quality looks obvious loss.

    After some Google, I set codec context like this

    video_st = avformat_new_stream(oc, 0);
    ....
    pVideoCodec  = avcodec_find_encoder(fmt->video_codec); //AV_CODEC_ID_H264
    ....
    avcodec_get_context_defaults3(video_st->codec, pVideoCodec);
    video_st->codec->codec_id =  fmt->video_codec;
    video_st->codec->width = m_outWidth;
    video_st->codec->height = m_outHeight;
    video_st->codec->time_base.den = m_fps;
    video_st->codec->time_base.num = 1;
    video_st->codec->pix_fmt = AV_PIX_FMT_YUV420P;

    AVDictionary *param = nullptr;
    av_dict_set(&param, "qp", "0", 0);
    av_dict_set(&param, "preset", "medium", 0);

    I also try to set bit_rate. But all turned out to be bad.

    I want a visually loss less output video.

    So what parameters should I set or anything else did I missed ?

  • Revision bde04ce503 : Merge branch 'frame-parallel' to enable frame parallel decode in master branch.

    21 janvier 2015, par hkuang

    Changed Paths :
     Modify /test/test-data.mk


     Modify /test/test-data.sha1


     Modify /test/test.mk


     Modify /test/test_vector_test.cc


     Modify /test/test_vectors.cc


     Modify /test/vp9_encoder_parms_get_to_decoder.cc


     Modify /test/vp9_frame_parallel_test.cc


     Modify /vp9/common/vp9_alloccommon.c


     Modify /vp9/common/vp9_alloccommon.h


     Modify /vp9/common/vp9_entropymode.c


     Modify /vp9/common/vp9_mvref_common.c


     Modify /vp9/common/vp9_mvref_common.h


     Modify /vp9/common/vp9_onyxc_int.h


     Modify /vp9/common/vp9_reconinter.c


     Modify /vp9/common/vp9_reconinter.h


     Modify /vp9/decoder/vp9_decodeframe.c


     Modify /vp9/decoder/vp9_decodeframe.h


     Modify /vp9/decoder/vp9_decodemv.c


     Modify /vp9/decoder/vp9_decoder.c


     Modify /vp9/decoder/vp9_decoder.h


     Modify /vp9/decoder/vp9_dthread.c


     Modify /vp9/decoder/vp9_dthread.h


     Modify /vp9/encoder/vp9_encoder.c


     Modify /vp9/encoder/vp9_encoder.h


     Modify /vp9/encoder/vp9_firstpass.c


     Modify /vp9/encoder/vp9_pickmode.c


     Modify /vp9/encoder/vp9_rd.c


     Modify /vp9/encoder/vp9_rdopt.c


     Modify /vp9/vp9_cx_iface.c


     Modify /vp9/vp9_dx_iface.c


     Modify /vp9/vp9dx.mk


     Modify /vpx/vpx_frame_buffer.h



    Merge branch ’frame-parallel’ to enable frame parallel decode in master branch.

    In frame parallel decode, libvpx decoder decodes several frames on all
    cpus in parallel fashion. If not being flushed, it will only return frame
    when all the cpus are busy. If getting flushed, it will return all the
    frames in the decoder. Compare with current serial decode mode in which
    libvpx decoder is idle between decode calls, libvpx decoder is busy
    between decode calls. VP9 frame parallel decode is >30% faster than serial
    decode with tile parallel threading which will makes devices play 1080P
    VP9 videos more easily.

    * frame-parallel :
    Add error handling for frame parallel decode and unit test for that.
    Fix a bug in frame parallel decode and add a unit test for that.
    Add two test vectors to test frame parallel decode.
    Add key frame seeking to webmdec and webm_video_source.
    Implement frame parallel decode for VP9.
    Increase the thread test range to cover 5, 6, 7, 8 threads.
    Fix a bug in adding frame parallel unit test.
    Add VP9 frame-parallel unit test.
    Manually pick "Make the api behavior conform to api spec." from master branch.
    Move vp9_dec_build_inter_predictors_* to decoder folder.
    Add segmentation map array for current and last frame segmentation.
    Include the right header for VP9 worker thread.
    Move vp9_thread.* to common.
    ctrl_get_reference does not need user_priv.
    Seperate the frame buffers from VP9 encoder/decoder structure.
    Revert "Revert "Revert "Revert 3 patches from Hangyu to get Chrome to
    build :"""

    Conflicts :
    test/codec_factory.h
    test/decode_test_driver.cc
    test/decode_test_driver.h
    test/invalid_file_test.cc
    test/test-data.sha1
    test/test.mk
    test/test_vectors.cc
    vp8/vp8_dx_iface.c
    vp9/common/vp9_alloccommon.c
    vp9/common/vp9_entropymode.c
    vp9/common/vp9_loopfilter_thread.c
    vp9/common/vp9_loopfilter_thread.h
    vp9/common/vp9_mvref_common.c
    vp9/common/vp9_onyxc_int.h
    vp9/common/vp9_reconinter.c
    vp9/decoder/vp9_decodeframe.c
    vp9/decoder/vp9_decodeframe.h
    vp9/decoder/vp9_decodemv.c
    vp9/decoder/vp9_decoder.c
    vp9/decoder/vp9_decoder.h
    vp9/encoder/vp9_encoder.c
    vp9/encoder/vp9_pickmode.c
    vp9/encoder/vp9_rdopt.c
    vp9/vp9_cx_iface.c
    vp9/vp9_dx_iface.c

    Change-Id : Ib92eb35851c172d0624970e312ed515054e5ca64

  • ffplay cannot play more than one song

    5 février 2020, par Bernie gach

    i have taken ffplay.c file from http://ffmpeg.org/doxygen/trunk/ffplay_8c-source.html and re edited it to a cpp file to embed in my win32 gui application . i have made the following changes to it.

    1. made the int main function into a local function as follows, i can pass the HWND to embedd the player
    void Ffplay::play_song(string file, HWND parent, bool* successfull)
    {
       int flags;
       VideoState* is;
       input_filename = file;
       /* register all codecs, demux and protocols */
    #if CONFIG_AVDEVICE
       avdevice_register_all();
    #endif
       //avformat_network_init();
       //check whether the filename is valid
       if (input_filename.empty())
       {
           logger.log(logger.LEVEL_ERROR, "filename %s is not valid\n", file);
           return;
       }
       if (display_disable)
       {
           video_disable = 1;
       }
       flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER;
       if (audio_disable)
           flags &= ~SDL_INIT_AUDIO;
       else
       {
           /* Try to work around an occasional ALSA buffer underflow issue when the
            * period size is NPOT due to ALSA resampling by forcing the buffer size. */
           if (!SDL_getenv("SDL_AUDIO_ALSA_SET_BUFFER_SIZE"))
               SDL_setenv("SDL_AUDIO_ALSA_SET_BUFFER_SIZE", "1", 1);
       }
       if (display_disable)
           flags &= ~SDL_INIT_VIDEO;
       SDL_SetMainReady();
       if (SDL_Init(flags))
       {
           logger.log(logger.LEVEL_ERROR, "Could not initialize SDL - %s\n", SDL_GetError());
           logger.log(logger.LEVEL_ERROR, "(Did you set the DISPLAY variable?)\n");
           return;
       }
       //Initialize optional fields of a packet with default values.
       //Note, this does not touch the data and size members, which have to be initialized separately.
       av_init_packet(&flush_pkt);
       flush_pkt.data = (uint8_t*)&flush_pkt;

       if (!display_disable)
       {
           int flags = SDL_WINDOW_HIDDEN;
           if (alwaysontop)
    #if SDL_VERSION_ATLEAST(2,0,5)
               flags |= SDL_WINDOW_ALWAYS_ON_TOP;
    #else
               logger.log(logger.LEVEL_INFO, "SDL version doesn't support SDL_WINDOW_ALWAYS_ON_TOP. Feature will be inactive.\n");
    #endif
           if (borderless)
               flags |= SDL_WINDOW_BORDERLESS;
           else
               flags |= SDL_WINDOW_RESIZABLE;
           SDL_InitSubSystem(flags);
           ShowWindow(parent, true);
           //window = SDL_CreateWindow(program_name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, default_width, default_height, flags);
           window = SDL_CreateWindowFrom(parent);
           SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
           if (window) {
               renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
               if (!renderer)
               {
                   logger.log(logger.LEVEL_ERROR, "Failed to initialize a hardware accelerated renderer: %s\n", SDL_GetError());
                   renderer = SDL_CreateRenderer(window, -1, 0);
               }
               if (renderer)
               {
                   if (!SDL_GetRendererInfo(renderer, &renderer_info))
                   {
                       logger.log(logger.LEVEL_INFO, "Initialized %s renderer.\n", renderer_info.name);
                   }
               }
           }
           if (!window || !renderer || !renderer_info.num_texture_formats)
           {
               logger.log(logger.LEVEL_ERROR, "Failed to create window or renderer: %s\n", SDL_GetError());
               return;
           }
       }

       is = stream_open(input_filename.c_str(), file_iformat);
       if (!is)
       {
           logger.log(logger.LEVEL_ERROR, "Failed to initialize VideoState!\n");
           return;
       }
       //the song is playing now
       *successfull = true;
       event_loop(is);
       //the song has quit;
       *successfull = false;
    }
    1. changed the callback functions as the static ones couldn’t be used by c++ eg,
    void Ffplay::static_sdl_audio_callback(void* opaque, Uint8* stream, int len)
    {
       static_cast(opaque)->sdl_audio_callback(opaque, stream, len);
    }

    closing doesn’t change from the main file to close the audio and sdl framework

    void Ffplay::do_exit(VideoState* is)
    {
       abort = true;
       if(is)
       {
           stream_close(is);
       }
       if (renderer)
           SDL_DestroyRenderer(renderer);
       if (window)
            SDL_DestroyWindow(window);
    #if CONFIG_AVFILTER
       av_freep(&vfilters_list);
    #endif
       avformat_network_deinit();
       SDL_Quit();

    }

    i call the functions as follows from main gui

    ft=std::async(launch::async, &Menu::play_song, this, songs_to_play.at(0));

    the menu::play_song function is :

    void Menu::play_song(wstring song_path)
    {
       ready_to_play_song = false;
       OutputDebugString(L"\nbefore song\n");
       using std::future;
       using std::async;
       using std::launch;

       string input{ song_path.begin(),song_path.end() };
       Ffplay ffplay;
       ffplay.play_song(input, h_sdl_window, &song_opened);

       OutputDebugString(L"\nafter song\n");
       ready_to_play_song = true;
    }

    THE PROBLEM is i can only play one song . if i call the menu::play_song function again the sound is missing and the video/art cover is occasionally missing also. it seems some resources are not been released or something like that.

    i have localised the proble to this function

    int Ffplay::packet_queue_get(PacketQueue* q, AVPacket* pkt, int block, int* serial)
    {

       MyAVPacketList* pkt1;
       int ret;
       int count=0;
       SDL_LockMutex(q->mutex);

       for (;;)
       {


           if (q->abort_request)
           {
               ret = -1;
               break;
           }

           pkt1 = q->first_pkt;
           if (pkt1) {
               q->first_pkt = pkt1->next;
               if (!q->first_pkt)
                   q->last_pkt = NULL;
               q->nb_packets--;
               q->size -= pkt1->pkt.size + sizeof(*pkt1);
               q->duration -= pkt1->pkt.duration;
               *pkt = pkt1->pkt;
               if (serial)
                   *serial = pkt1->serial;
               av_free(pkt1);
               ret = 1;
               break;
           }
           else if (!block) {
               ret = 0;
               break;
           }
           else
           {
               logger.log(logger.LEVEL_INFO, "packet_queue before");
               SDL_CondWait(q->cond, q->mutex);
               logger.log(logger.LEVEL_INFO, "packet_queue after");

           }
       }
       SDL_UnlockMutex(q->mutex);
       return ret;
    }

    the call to SDL_CondWait(q->cond, q->mutex); never returns