Recherche avancée

Médias (0)

Mot : - Tags -/auteurs

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

Autres articles (112)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

Sur d’autres sites (14984)

  • Java - RTSP save snapshot from Stream Packets

    9 août 2016, par Guerino Rodella

    I’m developing an application which requests snapshots to DVR and IP Cameras. The device I’m working on just offer RTSP requests to do so. Then I implemented the necessary RTSP methods to start receiving the stream packets and I started receiving then via UDP connection established. My doubt is, how can I save the received data to a jpeg file ? Where’s the begging and end of the image bytes received ?

    I searched a lot libraries which implement this type of service in Java, like Xuggler ( which it’s maintained no more ), javacpp-presets - has ffmpeg and opencv libraries included - I had some environment problems with it. If someone know an easy and good one which saves snapshots from the streams, let me know.

    My code :

    final long timeout = System.currentTimeMillis() + 3000;

    byte[] fullImage = new byte[ 1024 * 1024 ];
    DatagramSocket udpSocket = new DatagramSocket( 8000 );
    int lastByte = 0;

    // Skip first 2 packets because I think they are HEADERS
    // Since I don't know what they mean, I just print then in hexa
    for( int i = 0; i < 2; i++ ){

       byte[] buffer = new byte[ 1024 ];
       DatagramPacket dataPacket = new DatagramPacket( buffer, buffer.length );
       udpSocket.receive( dataPacket );

       int dataLenght = dataPacket.getLength();
       buffer = Arrays.copyOf( buffer, dataLenght );

       System.out.println( "RECEIVED[" + DatatypeConverter.printHexBinary( buffer ) + " L: " + dataLenght );

    }

    do{

       byte[] buffer = new byte[ 1024 ];
       DatagramPacket dataPacket = new DatagramPacket( fullImage, fullImage.length );
       udpSocket.receive( dataPacket );

       System.out.println( "RECEIVED: " + new String( fullImage ) );

       for( int i = 0; i < buffer.length; i++ ){
           fullImage[ i + lastByte ] = buffer[ i ];
           lastByte ++;

       }

    } while( System.currentTimeMillis() < timeout );
    // I know this timeout is wrong, I should stop after getting full image bytes

    The output :

    RECEIVED : 80E0000100004650000000006742E01FDA014016C4 L : 21
    RECEIVED : 80E00002000046500000000068CE30A480 L : 17
    RECEIVED : Tons of data from the streaming...
    RECEIVED : Tons of data from the streaming...
    RECEIVED : Tons of data from the streaming...
    [...]

    As you might suppose, the image I’m saving into a file is not readable because I’m doing it wrong. I think the header provide me some info about the next packets the server will sent me telling the start and the end of the image from the streaming. But I don’t understood them. Someone know how to solve it ? Any tips are welcome !

  • What's wrong with how I save a vector of AVFrames as mp4 video using the h264 encoder ?

    8 avril 2023, par nokla

    I am trying to encode a vector of AVFrames to an MP4 file using the h264 codec.

    


    The code runs without errors but both when I try to open the saved video file with the windows media and adobe Media Encoded they it says that it is in an unsupported format.

    


    I went through it with a debugger and everything seemed to work fine.

    



    


    This is the function I used to saved the video :

    


    void SaveVideo(std::string&amp; output_filename, std::vector<avframe> video)&#xA;{&#xA;    // Initialize FFmpeg&#xA;    avformat_network_init();&#xA;&#xA;    // Open the output file context&#xA;    AVFormatContext* format_ctx = nullptr;&#xA;    int ret = avformat_alloc_output_context2(&amp;format_ctx, nullptr, nullptr, output_filename.c_str());&#xA;    if (ret &lt; 0) {&#xA;        wxMessageBox("Error creating output context: ");&#xA;        wxMessageBox(av_err2str(ret));&#xA;        return;&#xA;    }&#xA;&#xA;    // Open the output file&#xA;    ret = avio_open(&amp;format_ctx->pb, output_filename.c_str(), AVIO_FLAG_WRITE);&#xA;    if (ret &lt; 0) {&#xA;        std::cerr &lt;&lt; "Error opening output file: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    // Create the video stream&#xA;    const AVCodec* codec = avcodec_find_encoder(AV_CODEC_ID_H264);&#xA;    if (!codec) {&#xA;        std::cerr &lt;&lt; "Error finding H.264 encoder" &lt;&lt; std::endl;&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    AVStream* stream = avformat_new_stream(format_ctx, codec);&#xA;    if (!stream) {&#xA;        std::cerr &lt;&lt; "Error creating output stream" &lt;&lt; std::endl;&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    // Set the stream parameters&#xA;    stream->codecpar->codec_id = AV_CODEC_ID_H264;&#xA;    stream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;&#xA;    stream->codecpar->width =video.front().width;&#xA;    stream->codecpar->height = video.front().height;&#xA;    stream->codecpar->format = AV_PIX_FMT_YUV420P;&#xA;    stream->codecpar->bit_rate = 400000;&#xA;    AVRational framerate = { 1, 30};&#xA;    stream->time_base = av_inv_q(framerate);&#xA;&#xA;    // Open the codec context&#xA;    AVCodecContext* codec_ctx = avcodec_alloc_context3(codec);&#xA;    codec_ctx->codec_tag = 0;&#xA;    codec_ctx->time_base = stream->time_base;&#xA;    codec_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;    if (!codec_ctx) {&#xA;        std::cout &lt;&lt; "Error allocating codec context" &lt;&lt; std::endl;&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    ret = avcodec_parameters_to_context(codec_ctx, stream->codecpar);&#xA;    if (ret &lt; 0) {&#xA;        std::cout &lt;&lt; "Error setting codec context parameters: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;        avcodec_free_context(&amp;codec_ctx);&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;    AVDictionary* opt = NULL;&#xA;    ret = avcodec_open2(codec_ctx, codec, &amp;opt);&#xA;    if (ret &lt; 0) {&#xA;        wxMessageBox("Error opening codec: ");&#xA;        wxMessageBox(av_err2str(ret));&#xA;        avcodec_free_context(&amp;codec_ctx);&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    // Allocate a buffer for the frame data&#xA;    AVFrame* frame = av_frame_alloc();&#xA;    if (!frame) {&#xA;        std::cerr &lt;&lt; "Error allocating frame" &lt;&lt; std::endl;&#xA;        avcodec_free_context(&amp;codec_ctx);&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    frame->format = codec_ctx->pix_fmt;&#xA;    frame->width = codec_ctx->width;&#xA;    frame->height = codec_ctx->height;&#xA;&#xA;    ret = av_frame_get_buffer(frame, 0);&#xA;    if (ret &lt; 0) {&#xA;        std::cerr &lt;&lt; "Error allocating frame buffer: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;        av_frame_free(&amp;frame);&#xA;        avcodec_free_context(&amp;codec_ctx);&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    // Allocate a buffer for the converted frame data&#xA;    AVFrame* converted_frame = av_frame_alloc();&#xA;    if (!converted_frame) {&#xA;        std::cerr &lt;&lt; "Error allocating converted frame" &lt;&lt; std::endl;&#xA;        av_frame_free(&amp;frame);&#xA;        avcodec_free_context(&amp;codec_ctx);&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    converted_frame->format = AV_PIX_FMT_YUV420P;&#xA;    converted_frame->width = codec_ctx->width;&#xA;    converted_frame->height = codec_ctx->height;&#xA;&#xA;    ret = av_frame_get_buffer(converted_frame, 0);&#xA;    if (ret &lt; 0) {&#xA;        std::cerr &lt;&lt; "Error allocating converted frame buffer: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;        av_frame_free(&amp;frame);&#xA;        av_frame_free(&amp;converted_frame);&#xA;        avcodec_free_context(&amp;codec_ctx);&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    // Initialize the converter&#xA;    SwsContext* converter = sws_getContext(&#xA;        codec_ctx->width, codec_ctx->height, codec_ctx->pix_fmt,&#xA;        codec_ctx->width, codec_ctx->height, AV_PIX_FMT_YUV420P,&#xA;        SWS_BICUBIC, nullptr, nullptr, nullptr&#xA;    );&#xA;    if (!converter) {&#xA;        std::cerr &lt;&lt; "Error initializing converter" &lt;&lt; std::endl;&#xA;        av_frame_free(&amp;frame);&#xA;        av_frame_free(&amp;converted_frame);&#xA;        avcodec_free_context(&amp;codec_ctx);&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    // Write the header to the output file&#xA;    ret = avformat_write_header(format_ctx, nullptr);&#xA;    if (ret &lt; 0) {&#xA;        std::cerr &lt;&lt; "Error writing header to output file: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;        av_frame_free(&amp;frame);&#xA;        av_frame_free(&amp;converted_frame);&#xA;        sws_freeContext(converter);&#xA;        avcodec_free_context(&amp;codec_ctx);&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    // Iterate over the frames and write them to the output file&#xA;    int frame_count = 0;&#xA;    for (auto&amp; frame: video) {&#xA;         {&#xA;            // Convert the frame to the output format&#xA;            sws_scale(converter,&#xA;                srcFrame.data, srcFrame.linesize, 0, srcFrame.height,&#xA;                converted_frame->data, converted_frame->linesize&#xA;            );&#xA;&#xA;            // Set the frame properties&#xA;            converted_frame->pts = av_rescale_q(frame_count, stream->time_base, codec_ctx->time_base);&#xA;            frame_count&#x2B;&#x2B;;&#xA;            //converted_frame->time_base.den = codec_ctx->time_base.den;&#xA;            //converted_frame->time_base.num = codec_ctx->time_base.num;&#xA;            // Encode the frame and write it to the output&#xA;            ret = avcodec_send_frame(codec_ctx, converted_frame);&#xA;            if (ret &lt; 0) {&#xA;                std::cerr &lt;&lt; "Error sending frame for encoding: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;                av_frame_free(&amp;frame);&#xA;                av_frame_free(&amp;converted_frame);&#xA;                sws_freeContext(converter);&#xA;                avcodec_free_context(&amp;codec_ctx);&#xA;                avformat_free_context(format_ctx);&#xA;                return;&#xA;            }&#xA;            AVPacket* pkt = av_packet_alloc();&#xA;            if (!pkt) {&#xA;                std::cerr &lt;&lt; "Error allocating packet" &lt;&lt; std::endl;&#xA;                return;&#xA;            }&#xA;            while (ret >= 0) {&#xA;                ret = avcodec_receive_packet(codec_ctx, pkt);&#xA;                if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {&#xA;                    std::string a = av_err2str(ret);&#xA;                    break;&#xA;                }&#xA;                else if (ret &lt; 0) {&#xA;                    wxMessageBox("Error during encoding");&#xA;                    wxMessageBox(av_err2str(ret));&#xA;                    av_packet_unref(pkt);&#xA;                    av_frame_free(&amp;frame);&#xA;                    av_frame_free(&amp;converted_frame);&#xA;                    sws_freeContext(converter);&#xA;                    avcodec_free_context(&amp;codec_ctx);&#xA;                    avformat_free_context(format_ctx);&#xA;                    return;&#xA;                }&#xA;&#xA;                // Write the packet to the output file&#xA;                av_packet_rescale_ts(pkt, codec_ctx->time_base, stream->time_base);&#xA;                pkt->stream_index = stream->index;&#xA;                ret = av_interleaved_write_frame(format_ctx, pkt);&#xA;                av_packet_unref(pkt);&#xA;                if (ret &lt; 0) {&#xA;                    std::cerr &lt;&lt; "Error writing packet to output file: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;                    av_frame_free(&amp;frame);&#xA;                    av_frame_free(&amp;converted_frame);&#xA;                    sws_freeContext(converter);&#xA;                    avcodec_free_context(&amp;codec_ctx);&#xA;                    avformat_free_context(format_ctx);&#xA;                    return;&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;    // Flush the encoder&#xA;    ret = avcodec_send_frame(codec_ctx, nullptr);&#xA;    if (ret &lt; 0) {&#xA;        std::cerr &lt;&lt; "Error flushing encoder: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;        av_frame_free(&amp;frame);&#xA;        av_frame_free(&amp;converted_frame);&#xA;        sws_freeContext(converter);&#xA;        avcodec_free_context(&amp;codec_ctx);&#xA;        avformat_free_context(format_ctx);&#xA;        return;&#xA;    }&#xA;&#xA;    while (ret >= 0) {&#xA;        AVPacket* pkt = av_packet_alloc();&#xA;        if (!pkt) {&#xA;            std::cerr &lt;&lt; "Error allocating packet" &lt;&lt; std::endl;&#xA;            return;&#xA;        }&#xA;        ret = avcodec_receive_packet(codec_ctx, pkt);&#xA;        if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {&#xA;            wxMessageBox("Error recieving packet");&#xA;            wxMessageBox(av_err2str(ret));&#xA;            break;&#xA;        }&#xA;        else if (ret &lt; 0) {&#xA;            std::cerr &lt;&lt; "Error during encoding: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;            av_packet_unref(pkt);&#xA;            av_frame_free(&amp;frame);&#xA;            av_frame_free(&amp;converted_frame);&#xA;            sws_freeContext(converter);&#xA;            avcodec_free_context(&amp;codec_ctx);&#xA;            avformat_free_context(format_ctx);&#xA;            return;&#xA;        }&#xA;&#xA;        // Write the packet to the output file&#xA;        av_packet_rescale_ts(pkt, codec_ctx->time_base, stream->time_base);&#xA;        pkt->stream_index = stream->index;&#xA;        ret = av_interleaved_write_frame(format_ctx, pkt);&#xA;        av_packet_unref(pkt);&#xA;        if (ret &lt; 0) {&#xA;            std::cerr &lt;&lt; "Error writing packet to output file: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;            av_frame_free(&amp;frame);&#xA;            av_frame_free(&amp;converted_frame);&#xA;            sws_freeContext(converter);&#xA;            avcodec_free_context(&amp;codec_ctx);&#xA;            avformat_free_context(format_ctx);&#xA;            return;&#xA;        }&#xA;    }&#xA;&#xA;    // Write the trailer to the output file&#xA;    ret = av_write_trailer(format_ctx);&#xA;    if (ret &lt; 0) {&#xA;        std::cerr &lt;&lt; "Error writing trailer to output file: " &lt;&lt; av_err2str(ret) &lt;&lt; std::endl;&#xA;    }&#xA;&#xA;    // Free all resources&#xA;    av_frame_free(&amp;frame);&#xA;    av_frame_free(&amp;converted_frame);&#xA;    sws_freeContext(converter);&#xA;    avcodec_free_context(&amp;codec_ctx);&#xA;    avformat_free_context(format_ctx);&#xA;}&#xA;&#xA;</avframe>

    &#xA;

    ** I know it is not the prettiest way to write this code, I just wanted to try and do something like that.

    &#xA;

    ** This is an altered version of the function as the original one was inside class. I changed it so you could compile it, but it might has some errors if I forgot to change something

    &#xA;

    Any help would be appreciated.

    &#xA;

  • Is there a way to save the thumbnail extracted by ffmpeg in the cache ? [closed]

    28 septembre 2022, par L K

    Is there a way to save the thumbnail extracted by ffmpeg in the cache ?

    &#xA;

    We are building a simple web video editing site.&#xA;I'm going to use a thumbnail while making a timeline

    &#xA;