Recherche avancée

Médias (91)

Autres articles (67)

  • Les vidéos

    21 avril 2011, par

    Comme les documents de type "audio", Mediaspip affiche dans la mesure du possible les vidéos grâce à la balise html5 .
    Un des inconvénients de cette balise est qu’elle n’est pas reconnue correctement par certains navigateurs (Internet Explorer pour ne pas le nommer) et que chaque navigateur ne gère en natif que certains formats de vidéos.
    Son avantage principal quant à lui est de bénéficier de la prise en charge native de vidéos dans les navigateur et donc de se passer de l’utilisation de Flash et (...)

  • Amélioration de la version de base

    13 septembre 2013

    Jolie sélection multiple
    Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
    Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)

  • Emballe médias : à quoi cela sert ?

    4 février 2011, par

    Ce plugin vise à gérer des sites de mise en ligne de documents de tous types.
    Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ;

Sur d’autres sites (6253)

  • Windows 2003 using php popen "start /b" because of executing ffmpeg.exe

    1er juillet 2013, par Oh Seung Kwon

    I have some problem.

    There is a php code that convert audio(wav) to mp3 file with using ffmpeg.exe.

    Here is some code.

    $cmd = "./inc/ffmpeg.exe -i ".$file_name." -acodec mp3 -y -ac 1 -ab 96k ".$mp3_file_name;

    echo $cmd;
    echo "Windows";
    $handle = popen("start /B ".$cmd, "r");
    while(!feof($handle)) {
       $read = fread($handle, 2096);
       echo $read;
    }
    pclose($handle);

    Problem is when I execute this code, ffmpeg.exe process isn't terminated. And not gonna die when I stop process with using Windows task manager.

    Do you have a solution for this situation ?

  • Evolution #3284 (En cours) : changer le vert de l’espace privé par defaut

    20 juillet 2015, par b b

    J’ouvre de nouveau puisque la modification a été annulée par r22314 et r22314, cf :

    http://archives.rezo.net/archives/spip-commit.mbox/E7F52BFKBGVZYK4UAOUUUKDI7S7AF4GE/

  • FFmpeg - avcodec_receive_frame doesn't receive all frames and lose frames before receving frames

    22 mars 2019, par Jinx

    The vcodec_receive_frame function didn’t receive the rest of the frames. I tested that there were totally 132 frames of the video and it only received 125 frames losing 7 frames at the END of the video. How can I get the lost frames back ?

    But something weird happened. As you can see the output from my MyDecode::receiveFrame() function. The code inside the block if (ret != 0){} executed first, but the lost frames are at the end of the video. So how could they come out first ? What caused this happen ?

    MyDecode.cpp

    AVFrame* MyDecode::receiveFrame()
    {
       mux.lock();
       if (!codecCtx) {
           mux.unlock();
           return 0;
       }
       AVFrame* frame = av_frame_alloc();
       int ret = avcodec_receive_frame(codecCtx, frame);
       mux.unlock();
       if (ret != 0)
       {
           static int lost_frames = 1;
           std::cout << "Lost frames: " << lost_frames << std::endl;
           lost_frames += 1;
           av_frame_free(&frame);
           return nullptr;
       }
       std::cout << "Received frames: " << received_frame_num << std::endl;
       received_frame_num += 1;
       return frame;
    }

    bool MyDecode::sendPacket(AVPacket* packet)
    {
       if (!packet || !packet->data || packet->size == 0)
           return false;
       mux.lock();
       if (!codecCtx) {
           mux.unlock();
           return false;
       }
       int ret = avcodec_send_packet(codecCtx, packet);
       mux.unlock();
       av_packet_free(&packet);
       if (ret != 0) {
           return false;
       }
       return true;
    }

    Console output

    Total frames: 132
    Lost frames: 1
    Lost frames: 2
    Lost frames: 3
    Lost frames: 4
    Lost frames: 5
    Lost frames: 6
    Lost frames: 7
    Received frames: 1
    Received frames: 2
    Received frames: 3
    ................
    Received frames: 125

    UPDATE :

    MyDemux.cpp

    AVPacket* MyDemux::readFrame()
    {
       mux.lock();
       if (!formatCtx) {
           std::cout << "formaetCtx is null" << std::endl;
           mux.unlock();
           return nullptr;
       }
       AVPacket* packet = av_packet_alloc();
       if (!packet) {
           std::cout << "packet is null" << std::endl;
           mux.unlock();
           return nullptr;
       }

       int ret = av_read_frame(formatCtx, packet);
       if (ret != 0) {
           while (true) {
               av_read_frame(formatCtx, nullptr);
           }
           mux.unlock();
           av_packet_free(&packet);
           av_packet_unref(packet);
           return nullptr;
       }
       media_type = packet->stream_index;
       mux.unlock();
       return packet;
    }

    main.cpp

    while (true) {
               AVPacket* pkt = demux.readFrame();
               if (demux.get_media_type() == 0) {
                   AVFrame* frame = video_decode.receiveFrame();
                   videoWidget->paintFrame(frame);
               }
               else if (demux.get_media_type() == 1) {
               }
               if (!pkt) {
                   std::cout << "to break" << std::endl;
                   break;
               }
           }