Recherche avancée

Médias (0)

Mot : - Tags -/publication

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

Autres articles (104)

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

  • 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 (...)

  • De l’upload à la vidéo finale [version standalone]

    31 janvier 2010, par

    Le chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
    Upload et récupération d’informations de la vidéo source
    Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
    Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...)

Sur d’autres sites (9367)

  • FFmpeg, access violation on av_frame_free when running though Unity

    1er février 2021, par Mockarutan

    I'm working on a video recording plugin for Unity using ffmpeg. I'm new to the video encoding domain and just got my code to work today. But I think a might have a few memory leaks and trying to fix them crashes Unity.

    



    The plugin is written i c++ (as external "C" code) and imported in a c# script in unity with a simple DllImport. Again, this is not my comfort area either, but it works.

    



    When a screen buffer is rendered, I put in a RGB24 buffer and send it to my c++ function, this one :

    



    int encode_frame(uint8_t* rgb24Data)
{
    AVFrame *frame = av_frame_alloc();
    if (!frame)
        return COULD_NOT_ALLOCATE_FRAME;

    frame->format = codec_context->pix_fmt;
    frame->width = codec_context->width;
    frame->height = codec_context->height;

    int ret = av_image_alloc(frame->data, frame->linesize, codec_context->width, codec_context->height, codec_context->pix_fmt, 32);
    if (ret < 0)
        return COULD_NOT_ALLOCATE_PIC_BUF;

    SwsContext * ctx = sws_getContext(codec_context->width, codec_context->height,
        AV_PIX_FMT_RGB24, codec_context->width, codec_context->height,
        AV_PIX_FMT_YUV420P, 0, 0, 0, 0);


    uint8_t * inData[1] = { rgb24Data };
    int inLinesize[1] = { 3 * codec_context->width };

    sws_scale(ctx, inData, inLinesize, 0, codec_context->height, frame->data, frame->linesize); // From RGB to YUV

    frame->pts = frame_counter++;

    ret = avcodec_send_frame(codec_context, frame);
    if (ret < 0)
        return ERROR_ENCODING_FRAME_SEND;

    AVPacket pkt;
    av_init_packet(&pkt);
    pkt.data = NULL;
    pkt.size = 0;

    while (true)
    {
        ret = avcodec_receive_packet(codec_context, &pkt);
        if (!ret)
        {
            if (pkt.pts != AV_NOPTS_VALUE)
                pkt.pts = av_rescale_q(pkt.pts, codec_context->time_base, video_st->time_base);
            if (pkt.dts != AV_NOPTS_VALUE)
                pkt.dts = av_rescale_q(pkt.dts, codec_context->time_base, video_st->time_base);

            av_write_frame(outctx, &pkt);
            av_packet_unref(&pkt);
        }
        else if (ret == AVERROR(EAGAIN))
        {
            frame->pts = frame_counter++;
            ret = avcodec_send_frame(codec_context, frame);
            if (ret < 0)
                return ERROR_ENCODING_FRAME_SEND;
        }
        else if (ret < 0)
            return ERROR_ENCODING_FRAME_RECEIVE;
        else
            break;
    }

    // This one
    av_frame_free(&frame);
}


    



    Now, this code might have a lot of issues that I'm not aware of, and you are free to point them out if you like. But the line that gives me error is av_frame_free(&frame);.

    



    If I run this in a synthetic test app in c++ that I made, it works. I can even run it in a c# synthetic test app (exactly like the c++ one), and it works. But if I run it though Unity, it crashes on the first frame. The log says "Read from location fe7f8097 caused an access violation.".

    



    I have tried with av_freep() and av_free(). Not sure exactly what makes them different (different example codes use different ones), but none work.

    



    So, what I'm I missing ? The frame is leaking if I don't free it right ? But why does it crash in Unity ?

    



    The whole thing works great in Unity if I don't have the av_frame_free(&frame);. Resulting video looks great !

    



    PS. I'm aware (as far as I know) that the frame also leaks if something fails and returns an error code. But one thing at a time.

    


  • FFmpeg, access violation on av_frame_free when running though Unity

    27 octobre 2016, par Mockarutan

    I’m working on a video recording plugin for Unity using ffmpeg. I’m new to the video encoding domain and just got my code to work today. But I think a might have a few memory leaks and trying to fix them crashes Unity.

    The plugin is written i c++ (as external "C" code) and imported in a c# script in unity with a simple DllImport. Again, this is not my comfort area either, but it works.

    When a screen buffer is rendered, I put in a RGB24 buffer and send it to my c++ function, this one :

    int encode_frame(uint8_t* rgb24Data)
    {
       AVFrame *frame = av_frame_alloc();
       if (!frame)
           return COULD_NOT_ALLOCATE_FRAME;

       frame->format = codec_context->pix_fmt;
       frame->width = codec_context->width;
       frame->height = codec_context->height;

       int ret = av_image_alloc(frame->data, frame->linesize, codec_context->width, codec_context->height, codec_context->pix_fmt, 32);
       if (ret < 0)
           return COULD_NOT_ALLOCATE_PIC_BUF;

       SwsContext * ctx = sws_getContext(codec_context->width, codec_context->height,
           AV_PIX_FMT_RGB24, codec_context->width, codec_context->height,
           AV_PIX_FMT_YUV420P, 0, 0, 0, 0);


       uint8_t * inData[1] = { rgb24Data };
       int inLinesize[1] = { 3 * codec_context->width };

       sws_scale(ctx, inData, inLinesize, 0, codec_context->height, frame->data, frame->linesize); // From RGB to YUV

       frame->pts = frame_counter++;

       ret = avcodec_send_frame(codec_context, frame);
       if (ret < 0)
           return ERROR_ENCODING_FRAME_SEND;

       AVPacket pkt;
       av_init_packet(&pkt);
       pkt.data = NULL;
       pkt.size = 0;

       while (true)
       {
           ret = avcodec_receive_packet(codec_context, &pkt);
           if (!ret)
           {
               if (pkt.pts != AV_NOPTS_VALUE)
                   pkt.pts = av_rescale_q(pkt.pts, codec_context->time_base, video_st->time_base);
               if (pkt.dts != AV_NOPTS_VALUE)
                   pkt.dts = av_rescale_q(pkt.dts, codec_context->time_base, video_st->time_base);

               av_write_frame(outctx, &pkt);
               av_packet_unref(&pkt);
           }
           else if (ret == AVERROR(EAGAIN))
           {
               frame->pts = frame_counter++;
               ret = avcodec_send_frame(codec_context, frame);
               if (ret < 0)
                   return ERROR_ENCODING_FRAME_SEND;
           }
           else if (ret < 0)
               return ERROR_ENCODING_FRAME_RECEIVE;
           else
               break;
       }

       // This one
       av_frame_free(&frame);
    }

    Now, this code might have a lot of issues that I’m not aware of, and you are free to point them out if you like. But the line that gives me error is av_frame_free(&frame);.

    If I run this in a synthetic test app in c++ that I made, it works. I can even run it in a c# synthetic test app (exactly like the c++ one), and it works. But if I run it though Unity, it crashes on the first frame. The log says "Read from location fe7f8097 caused an access violation.".

    I have tried with av_freep() and av_free(). Not sure exactly what makes them different (different example codes use different ones), but none work.

    So, what I’m I missing ? The frame is leaking if I don’t free it right ? But why does it crash in Unity ?

    The whole thing works great in Unity if I don’t have the av_frame_free(&frame);. Resulting video looks great !

    PS. I’m aware (as far as I know) that the frame also leaks if something fails and returns an error code. But one thing at a time.

  • How to send loading data before sending a file in Express Get Request

    2 octobre 2023, par TheHangel

    I have an express Node.js server.

    


    The objective of this server is make a process with ffmpeg and to send the file as result.

    


    I manage to know the percentage of the process. But I don't know how to make the client aware of the percentage before it sends the file.

    


    So here is my server-side code :
(I omitted some part of the ffmpeg process because, this is not very important, the important thing is to send the variable 'percent').

    


    const ffmpeg = require('fluent-ffmpeg');

app.get('/download', (req,res) => {
    const video = new ffmpeg('myaudio.mp3');
    let total;
    video
        .format('mp3')
        .on('codecData', (data) => {
            total = parseInt(data.duration.replace(/:/g, ''));
        })
        .on('progress', (progress) => {
            const time = parseInt(progress.timemark.replace(/:/g, ''));
            const percent = (time / total) * 100;
            console.log(percent); // I want to send 'percent' to the client instead of console.log
        })
        .on('end', () => {
            res.status(200).sendFile(output); // then it sends the file to client
        })
        .save(output);
});


    


    if you have a solution, can you show the client-side example, (axios or fetch) please ?