Recherche avancée

Médias (91)

Autres articles (53)

  • Participer à sa traduction

    10 avril 2011

    Vous pouvez nous aider à améliorer les locutions utilisées dans le logiciel ou à traduire celui-ci dans n’importe qu’elle nouvelle langue permettant sa diffusion à de nouvelles communautés linguistiques.
    Pour ce faire, on utilise l’interface de traduction de SPIP où l’ensemble des modules de langue de MediaSPIP sont à disposition. ll vous suffit de vous inscrire sur la liste de discussion des traducteurs pour demander plus d’informations.
    Actuellement MediaSPIP n’est disponible qu’en français et (...)

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

  • D’autres logiciels intéressants

    12 avril 2011, par

    On ne revendique pas d’être les seuls à faire ce que l’on fait ... et on ne revendique surtout pas d’être les meilleurs non plus ... Ce que l’on fait, on essaie juste de le faire bien, et de mieux en mieux...
    La liste suivante correspond à des logiciels qui tendent peu ou prou à faire comme MediaSPIP ou que MediaSPIP tente peu ou prou à faire pareil, peu importe ...
    On ne les connais pas, on ne les a pas essayé, mais vous pouvez peut être y jeter un coup d’oeil.
    Videopress
    Site Internet : (...)

Sur d’autres sites (6470)

  • Merge commit ’ce589940c2cac936891e8bba275580d6efc41e8b’

    21 juin 2016, par Clément Bœsch
    Merge commit ’ce589940c2cac936891e8bba275580d6efc41e8b’
    

    * commit ’ce589940c2cac936891e8bba275580d6efc41e8b’ :
    mmaldec : send only a single EOS packet on flushing

    This commit is a noop, see dafe4cd29cada351a2785433b24401fc602911c4

    Merged-by : Clément Bœsch <clement@stupeflix.com>

  • Merge commit ’d2e56cf753a6c462041dee897d9d0c90f349988c’

    13 novembre 2016, par Hendrik Leppkes
    Merge commit ’d2e56cf753a6c462041dee897d9d0c90f349988c’
    

    * commit ’d2e56cf753a6c462041dee897d9d0c90f349988c’ :
    avconv : move flushing the queued frames to configure_filtergraph()

    Noop, as its a fixup to a previously skipped commit

    Merged-by : Hendrik Leppkes <h.leppkes@gmail.com>

  • How to encode the input images from camera into H.264 stream ?

    22 avril 2015, par kuu

    I’m trying to encode the input images from MacBook Pro’s built-in FaceTime HD Camera into an H.264 video stream in real time using the libx264 on Mac OS X 10.9.5.

    Below are the steps I took :

    1. Get 1280x720 32BGRA images from camera at 15fps using AVFoundation API (AVCaptureDevice class, etc.)
    2. Convert the images into 320x180 YUV420P format using libswscale.
    3. Encode the images into an H.264 video stream (baseline profile) using libx264.

    I apply the above steps each time the image is obtained from the camera, believing that the encoder keeps track of the encoding state and generates a NAL unit when it’s available.

    As I wanted to get the encoded frames while providing the input images to the encoder, I decided to flush the encoder (calling x264_encoder_delayed_frames()) every 30 frames (2 seconds).

    However, when I restart the encoding, the encoder stops after a while (x264_encoder_encode() never returns.) I tried changing the number of frames before flushing, but the situation didn’t change.

    Below are the related code (I omitted the image capture code because it looks no problem.)

    Can you point out anything I might be doing wrong ?

    x264_t *encoder;
    x264_param_t param;

    // Will be called only first time.
    int initEncoder() {
     int ret;

     if ((ret = x264_param_default_preset(&amp;param, "medium", NULL)) &lt; 0) {
       return ret;
     }

     param.i_csp = X264_CSP_I420;
     param.i_width  = 320;
     param.i_height = 180;
     param.b_vfr_input = 0;
     param.b_repeat_headers = 1;
     param.b_annexb = 1;

     if ((ret = x264_param_apply_profile(&amp;param, "baseline")) &lt; 0) {
       return ret;
     }

     encoder = x264_encoder_open(&amp;param);
     if (!encoder) {
       return AVERROR_UNKNOWN;
     }

     return 0;
    }

    // Will be called from encodeFrame() defined below.
    int convertImage(const enum AVPixelFormat srcFmt, const int srcW, const int srcH, const uint8_t *srcData, const enum AVPixelFormat dstFmt, const int dstW, const int dstH, x264_image_t *dstData) {
     struct SwsContext *sws_ctx;
     int ret;
     int src_linesize[4];
     uint8_t *src_data[4];

     sws_ctx = sws_getContext(srcW, srcH, srcFmt,
                          dstW, dstH, dstFmt,
                          SWS_BILINEAR, NULL, NULL, NULL);

     if (!sws_ctx) {
       return AVERROR_UNKNOWN;
     }

     if ((ret = av_image_fill_linesizes(src_linesize, srcFmt, srcW)) &lt; 0) {
       sws_freeContext(sws_ctx);
       return ret;
     }

     if ((ret = av_image_fill_pointers(src_data, srcFmt, srcH, (uint8_t *) srcData, src_linesize)) &lt; 0) {
       sws_freeContext(sws_ctx);
       return ret;
     }

     sws_scale(sws_ctx, (const uint8_t * const*)src_data, src_linesize, 0, srcH, dstData->plane, dstData->i_stride);
     sws_freeContext(sws_ctx);
     return 0;
    }

    // Will be called for each frame.
    int encodeFrame(const uint8_t *data, const int width, const int height) {
     int ret;
     x264_picture_t pic;
     x264_picture_t pic_out;
     x264_nal_t *nal;
     int i_nal;

     if ((ret = x264_picture_alloc(&amp;pic, param.i_csp, param.i_width, param.i_height)) &lt; 0) {
       return ret;
     }

     if ((ret = convertImage(AV_PIX_FMT_RGB32, width, height, data, AV_PIX_FMT_YUV420P, 320, 180, &amp;pic.img)) &lt; 0) {
       x264_picture_clean(&amp;pic);
       return ret;
     }

     if ((ret = x264_encoder_encode(encoder, &amp;nal, &amp;i_nal, &amp;pic, &amp;pic_out)) &lt; 0) {
       x264_picture_clean(&amp;pic);
       return ret;
     }

     if(ret) {
       for (int i = 0; i &lt; i_nal; i++) {
         printNAL(nal + i);
       }
     }

     x264_picture_clean(&amp;pic);
     return 0;
    }

    // Will be called every 30 frames.
    int flushEncoder() {
     int ret;
     x264_nal_t *nal;
     int i_nal;
     x264_picture_t pic_out;

     /* Flush delayed frames */
     while (x264_encoder_delayed_frames(encoder)) {
       if ((ret = x264_encoder_encode(encoder, &amp;nal, &amp;i_nal, NULL, &amp;pic_out)) &lt; 0) {
         return ret;
       }

       if (ret) {
         for (int j = 0; j &lt; i_nal; j++) {
           printNAL(nal + j);
         }
       }
     }
    }