Recherche avancée

Médias (91)

Autres articles (72)

  • Organiser par catégorie

    17 mai 2013, par

    Dans MédiaSPIP, une rubrique a 2 noms : catégorie et rubrique.
    Les différents documents stockés dans MédiaSPIP peuvent être rangés dans différentes catégories. On peut créer une catégorie en cliquant sur "publier une catégorie" dans le menu publier en haut à droite ( après authentification ). Une catégorie peut être rangée dans une autre catégorie aussi ce qui fait qu’on peut construire une arborescence de catégories.
    Lors de la publication prochaine d’un document, la nouvelle catégorie créée sera proposée (...)

  • Récupération d’informations sur le site maître à l’installation d’une instance

    26 novembre 2010, par

    Utilité
    Sur le site principal, une instance de mutualisation est définie par plusieurs choses : Les données dans la table spip_mutus ; Son logo ; Son auteur principal (id_admin dans la table spip_mutus correspondant à un id_auteur de la table spip_auteurs)qui sera le seul à pouvoir créer définitivement l’instance de mutualisation ;
    Il peut donc être tout à fait judicieux de vouloir récupérer certaines de ces informations afin de compléter l’installation d’une instance pour, par exemple : récupérer le (...)

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

  • Windows 8 Store Apps (IE 10/"MSAppHost" in UA) don’t support Flash or ActiveX, except for (at time of writing), three special ActiveX controls. Thus, new window.ActiveXObject(’ShockwaveFlash.ShockwaveFlash’) seems to work without error. However, an error is thrown if an with a Flash ActiveX CLSID is appended to the DOM. http://msdn.microsoft.com/en-us/library/windows/apps/hh465143.aspx

    30 septembre 2012, par Scott Schiller

    m script/soundmanager2-jsmin.js m script/soundmanager2-nodebug-jsmin.js m script/soundmanager2-nodebug.js m script/soundmanager2.js Windows 8 Store Apps (IE 10/"MSAppHost" in UA) don’t support Flash or ActiveX, except for (at time of writing), three special ActiveX controls. Thus, new (...)

  • mp4 video plays from beginning while seeking to another time [on hold]

    13 août 2013, par user2649860

    i am using lighttpd and h264 with jwplayer. I am trying to stream the MP4 video.

    My problem is that the MP4 video downloads whole file before playing and i have another problem i.e. when i seek to another time/point the video plays from beginning and it plays after the end time also.

    i have already tried the ffmpeg tools to create the h264 video and qt-faststart.exe tool to fix the video index problem of the video. But it does not work.

    Any solution ?? THanks in advanced

  • How to reduce time while writing to output stream

    9 février 2021, par Summit

    I am streaming the render ouput of a opengl application using mpegts.The issue that i am facing is that the time taken to encode the frame is quite long.

    


    The application renders at 60 fps with frame size of 1920 X 1080 , the frame data of the application is pushed to a std::queue.

    


    This is the process for ffmpeg.

    


    I  initialize the stream like this.&#xA;&#xA;   streamerUpd.InitUPD("udp://127.0.0.1:1234", 1920, 1080, rings_);&#xA;&#xA;int StreamUPD::InitUPD(const char* url, int width, int height, std::shared_ptr<ringbuffer2> rings)&#xA;{&#xA;&#xA;    rings_ = rings;&#xA;    width_ = width;&#xA;    height_ = height;&#xA;    filename = url;&#xA;    int ret;&#xA;    av_dict_set(&amp;opt, "pkt_size", "1316", 0);&#xA;    &#xA;        &#xA;    avformat_alloc_output_context2(&amp;oc, nullptr, "mpegts", filename);&#xA;    if (!oc) {&#xA;        return 1;&#xA;    }&#xA;&#xA;    fmt = oc->oformat;&#xA;    /* Add the audio and video streams using the default format codecs&#xA;     * and initialize the codecs. */&#xA;    if (fmt->video_codec != AV_CODEC_ID_NONE) {&#xA;        add_stream(&amp;video_st, oc, &amp;video_codec, fmt->video_codec);&#xA;        have_video = 1;&#xA;        encode_video = 1;&#xA;    }&#xA;&#xA;    /* Write the stream header, if any. */&#xA;    ret = avformat_write_header(oc, &amp;opt);&#xA;    if (ret &lt; 0) {&#xA;        fprintf(stderr, "Error occurred when opening output file: %s\n",&#xA;            av_err2str(ret));&#xA;        return 1;&#xA;    }&#xA;    thr = std::thread(&amp;StreamUPD::output_result, this);&#xA;    return 0;&#xA;}&#xA;</ringbuffer2>

    &#xA;

    ////////////////////////////////////////////////////////////////////////////////////////

    &#xA;

    // Add the output stream

    &#xA;

    void StreamUPD::add_stream(OutputStream* ost, AVFormatContext* oc, AVCodec** codec, enum AVCodecID codec_id)&#xA;{&#xA;    AVCodecContext* c;&#xA;    int i;&#xA;    /* find the encoder */&#xA;    *codec = avcodec_find_encoder(codec_id);&#xA;    if (!(*codec)) {&#xA;        fprintf(stderr, "Could not find encoder for &#x27;%s&#x27;\n",&#xA;            avcodec_get_name(codec_id));&#xA;        exit(1);&#xA;    }&#xA;    ost->st = avformat_new_stream(oc, NULL);&#xA;    if (!ost->st) {&#xA;        fprintf(stderr, "Could not allocate stream\n");&#xA;        exit(1);&#xA;    }&#xA;    ost->st->id = oc->nb_streams - 1;&#xA;    c = avcodec_alloc_context3(*codec);&#xA;    if (!c) {&#xA;        fprintf(stderr, "Could not alloc an encoding context\n");&#xA;        exit(1);&#xA;    }&#xA;    ost->enc = c;&#xA;    switch ((*codec)->type) {&#xA;    case AVMEDIA_TYPE_VIDEO:&#xA;        c->codec_id = codec_id;&#xA;        c->bit_rate = 400000;&#xA;&#xA;        /* Resolution must be a multiple of two. */&#xA;        c->width = width_;&#xA;        c->height = height_;&#xA;        /* timebase: This is the fundamental unit of time (in seconds) in terms&#xA;         * of which frame timestamps are represented. For fixed-fps content,&#xA;         * timebase should be 1/framerate and timestamp increments should be&#xA;         * identical to 1. */&#xA;        ost->st->time_base = { 1, STREAM_FRAME_RATE };&#xA;        c->time_base = ost->st->time_base;&#xA;        c->gop_size = 12; /* emit one intra frame every twelve frames at most */&#xA;        c->pix_fmt = STREAM_PIX_FMT;&#xA;        &#xA;        if (c->codec_id == AV_CODEC_ID_MPEG2VIDEO) {&#xA;            /* just for testing, we also add B-frames */&#xA;            qDebug() &lt;&lt; "This is MPEG2VIDEO Frame";&#xA;            c->max_b_frames = 2;&#xA;            &#xA;        }&#xA;        if (c->codec_id == AV_CODEC_ID_MPEG1VIDEO) {&#xA;            /* Needed to avoid using macroblocks in which some coeffs overflow.&#xA;             * This does not happen with normal video, it just happens here as&#xA;             * the motion of the chroma plane does not match the luma plane. */&#xA;            c->mb_decision = 2;&#xA;        }&#xA;        break;&#xA;    default:&#xA;        break;&#xA;    }&#xA;    /* Some formats want stream headers to be separate. */&#xA;    if (oc->oformat->flags &amp; AVFMT_GLOBALHEADER)&#xA;        c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;}&#xA;

    &#xA;

    //////////////////////////////////////////////////////////////////////////////////

    &#xA;

    // Open the video

    &#xA;

    void StreamUPD::open_video(AVFormatContext* oc, AVCodec* codec, OutputStream* ost, AVDictionary* opt_arg)&#xA;    {&#xA;        int ret;&#xA;        AVCodecContext* c = ost->enc;&#xA;        AVDictionary* opt = NULL;&#xA;        av_dict_copy(&amp;opt, opt_arg, 0);&#xA;        /* open the codec */&#xA;        ret = avcodec_open2(c, codec, &amp;opt);&#xA;        av_dict_free(&amp;opt);&#xA;        if (ret &lt; 0) {&#xA;            fprintf(stderr, "Could not open video codec: %s\n", av_err2str(ret));&#xA;            exit(1);&#xA;        }&#xA;        /* allocate and init a re-usable frame */&#xA;        ost->frame = alloc_picture(c->pix_fmt, c->width, c->height);&#xA;        if (!ost->frame) {&#xA;            fprintf(stderr, "Could not allocate video frame\n");&#xA;            exit(1);&#xA;        }&#xA;        /* If the output format is not YUV420P, then a temporary YUV420P&#xA;         * picture is needed too. It is then converted to the required&#xA;         * output format. */&#xA;        ost->tmp_frame = NULL;&#xA;        if (c->pix_fmt != AV_PIX_FMT_YUV420P) {&#xA;            ost->tmp_frame = alloc_picture(AV_PIX_FMT_YUV420P, c->width, c->height);&#xA;            if (!ost->tmp_frame) {&#xA;                fprintf(stderr, "Could not allocate temporary picture\n");&#xA;                exit(1);&#xA;            }&#xA;        }&#xA;        /* copy the stream parameters to the muxer */&#xA;        ret = avcodec_parameters_from_context(ost->st->codecpar, c);&#xA;        if (ret &lt; 0) {&#xA;            fprintf(stderr, "Could not copy the stream parameters\n");&#xA;            exit(1);&#xA;        }&#xA;    }&#xA;

    &#xA;

    Once i have setup the ffmpeg output stream this is how i am streaming the data.

    &#xA;

    This function gets the frame data from the std::queue(pixelsQueue) and sends it for encoding.

    &#xA;

    int StreamUPD::stream_video_frame()&#xA;{   &#xA;    ost = &amp;video_st;&#xA;    c = ost->enc;   &#xA;&#xA;    /* when we pass a frame to the encoder, it may keep a reference to it&#xA;     * internally; make sure we do not overwrite it here */&#xA;    if (av_frame_make_writable(ost->frame) &lt; 0)&#xA;        exit(1);&#xA;    if (!ost->sws_ctx) {&#xA;        ost->sws_ctx = sws_getContext(c->width, c->height,&#xA;            AV_PIX_FMT_RGB24,&#xA;            c->width, c->height,&#xA;            c->pix_fmt,&#xA;            SWS_FAST_BILINEAR, NULL, NULL, NULL);&#xA;        if (!ost->sws_ctx) {&#xA;            fprintf(stderr,&#xA;                "Could not initialize the conversion context\n");&#xA;            exit(1);&#xA;        }&#xA;    }&#xA;    finished_ = true;&#xA;&#xA;    if (pixelsQueue.size() > 0) {       &#xA;        if (pixelsQueue.pop(pixels)) {&#xA;            fill_yuv_image(ost->sws_ctx, frame_data->pixels_.get(), ost->frame, c->width, c->height);&#xA;            ost->frame->pts = ost->next_pts&#x2B;&#x2B;;&#xA;            return write_frame(oc, ost->enc, ost->st, ost->frame);&#xA;        }&#xA;    }&#xA;    return 1;&#xA;}&#xA;

    &#xA;

    Writing the data to the output stream.

    &#xA;

    The function avcodec_receive_packet is the one that takes lot of time.

    &#xA;

    int StreamUPD::write_frame(AVFormatContext* fmt_ctx, AVCodecContext* c,&#xA;    AVStream* st, AVFrame* frame)&#xA;{&#xA;    int ret;&#xA;    // send the frame to the encoder&#xA;    AVPacket pkt = { 0 };&#xA;    ret = avcodec_send_frame(c, frame);&#xA;    ret = avcodec_receive_packet(c, &amp;pkt);&#xA;    if (ret &lt; 0) {&#xA;        fprintf(stderr, "Error sending a frame to the encoder: %s\n",&#xA;            av_err2str(ret));&#xA;        exit(1);&#xA;    }&#xA;    &#xA;    while (ret >= 0) {&#xA;        AVPacket pkt = { 0 };&#xA;        ret = avcodec_receive_packet(c, &amp;pkt);  // This is the function that takes lot of time&#xA;        if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)&#xA;            break;&#xA;        else if (ret &lt; 0) {&#xA;            fprintf(stderr, "Error encoding a frame: %s\n", av_err2str(ret));&#xA;            exit(1);&#xA;        }&#xA;        // rescale output packet timestamp values from codec to stream timebase &#xA;        av_packet_rescale_ts(&amp;pkt, c->time_base, st->time_base);&#xA;        pkt.stream_index = st->index;&#xA;        // Write the compressed frame to the media file. &#xA;        ret = av_interleaved_write_frame(fmt_ctx, &amp;pkt);&#xA;        av_packet_unref(&amp;pkt);&#xA;        if (ret &lt; 0) {&#xA;            fprintf(stderr, "Error while writing output packet: %s\n", av_err2str(ret));&#xA;            exit(1);&#xA;        }&#xA;    }&#xA;    return ret == AVERROR_EOF ? 1 : 0;&#xA;}&#xA;

    &#xA;

    How can i reduce the outputting time while writing the frames to the stream ?

    &#xA;

    Currently i push more frames in the buffer and the outputting speed is less so the buffer starts to run out of memory in some time.

    &#xA;