Recherche avancée

Médias (91)

Autres articles (61)

  • 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 ;

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

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

Sur d’autres sites (14276)

  • php stream any mp4

    3 avril 2012, par GRaecuS

    I'm developing a web app that converts videos and allows to play them through Flowplayer.

    On the current status, I use ffmpeg to convert the videos to mp4 and qtfaststart to fix their metadata for streaming. Everything is working smoothly as I can download any converted mp4 and view it correctly.

    For serving the videos to Flowplayer, I use a php file which contains the following (summarized) code :

    header("Content-Type: {$mediatype}");

    if ( empty($_SERVER['HTTP_RANGE']) )
    {
       if ( $filetype == 'flv' && $seekPos != 0 )
       {
           header("Content-Length: " . ($filesize + 13));
           print('FLV');
           print(pack('C', 1));
           print(pack('C', 1));
           print(pack('N', 9));
           print(pack('N', 9));
       }
       else
       {          
           header("Content-Length: {$filesize}");
       }

       $fh = fopen($filepath, "rb") or die("Could not open file: {$filepath}");

       # seek to requested file position
       fseek($fh, $seekPos);

       # output file
       while(!feof($fh))
       {
           # output file without bandwidth limiting
           echo fread($fh, $filesize);
       }
       fclose($fh);
    }
    else //violes rfc2616, which requires ignoring  the header if it's invalid
    {  
       $fp = @fopen($file, 'rb');

       $size   = filesize($file); // File size
       $length = $size;           // Content length
       $start  = 0;               // Start byte
       $end    = $size - 1;       // End byte
       // Now that we've gotten so far without errors we send the accept range header
       /* At the moment we only support single ranges.
        * Multiple ranges requires some more work to ensure it works correctly
        * and comply with the spesifications: http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.2
        *
        * Multirange support annouces itself with:
        * header('Accept-Ranges: bytes');
        *
        * Multirange content must be sent with multipart/byteranges mediatype,
        * (mediatype = mimetype)
        * as well as a boundry header to indicate the various chunks of data.
        */
       header("Accept-Ranges: 0-$length");
       // header('Accept-Ranges: bytes');
       // multipart/byteranges
       // http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.2
       if (isset($_SERVER['HTTP_RANGE']))
       {
           $c_start = $start;
           $c_end   = $end;
           // Extract the range string
           list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
           // Make sure the client hasn't sent us a multibyte range
           if (strpos($range, ',') !== false)
           {
               // (?) Shoud this be issued here, or should the first
               // range be used? Or should the header be ignored and
               // we output the whole content?
               header('HTTP/1.1 416 Requested Range Not Satisfiable');
               header("Content-Range: bytes $start-$end/$size");
               // (?) Echo some info to the client?
               exit;
           }
           // If the range starts with an '-' we start from the beginning
           // If not, we forward the file pointer
           // And make sure to get the end byte if spesified
           if ($range0 == '-')
           {

               // The n-number of the last bytes is requested
               $c_start = $size - substr($range, 1);
           }
           else
           {
               $range  = explode('-', $range);
               $c_start = $range[0];
               $c_end   = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
           }
           /* Check the range and make sure it's treated according to the specs.
            * http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
            */
           // End bytes can not be larger than $end.
           $c_end = ($c_end > $end) ? $end : $c_end;
           // Validate the requested range and return an error if it's not correct.
           if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size)
           {
               header('HTTP/1.1 416 Requested Range Not Satisfiable');
               header("Content-Range: bytes $start-$end/$size");
               // (?) Echo some info to the client?
               exit;
           }
           $start  = $c_start;
           $end    = $c_end;
           $length = $end - $start + 1; // Calculate new content length
           fseek($fp, $start);
           header('HTTP/1.1 206 Partial Content');
       }

       // Notify the client the byte range we'll be outputting
       header("Content-Range: bytes $start-$end/$size");
       header("Content-Length: $length");

       // Start buffered download
       $buffer = 1024 * 8;
       while(!feof($fp) && ($p = ftell($fp)) <= $end)
       {
           if ($p + $buffer > $end)
           {
               // In case we're only outputtin a chunk, make sure we don't
               // read past the length
               $buffer = $end - $p + 1;
           }
           set_time_limit(0); // Reset time limit for big files
           echo fread($fp, $buffer);
           flush(); // Free up memory. Otherwise large files will trigger PHP's memory limit.
       }

       fclose($fp);
    }

    Unfortunately, it is working only for the majority of the videos. For some of them, Flowplayer keeps returning Error 200, even though they were encoded correctly.

    How can I fix this ? Is it a coding problem or those videos are faulty ?

  • avcodec_decode_audio3 of FFmpeg return -1

    10 janvier 2015, par user1325717

    I use FFmpeg on android to decode mp3. I set all decoder enable on configure and make the .so file correctly. Here’s the .sh which add parameter for configure file :

    NDK=~/android-ndk-r5b
    PLATFORM=$NDK/platforms/android-8/arch-arm/
    PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86


    function build_one
    {
    ./configure --target-os=linux \
       --prefix=$PREFIX \
       --enable-cross-compile \
       --extra-libs="-lgcc" \
       --arch=arm \
       --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
       --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
       --nm=$PREBUILT/bin/arm-linux-androideabi-nm \
       --sysroot=$PLATFORM \
       --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums  -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
       --disable-shared \
       --enable-static \
       --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib  -nostdlib -lc -lm -ldl -llog" \
       --enable-demuxer=mov \
       --enable-demuxer=h264 \
       --disable-ffplay \
       --enable-protocol=file \
       --enable-avformat \
       --enable-avcodec \
       --enable-decoder=rawvideo \
       --enable-decoder=mjpeg \
       --enable-decoder=h263 \
       --enable-decoder=mpeg4 \
       --enable-decoder=h264 \
       --enable-decoder=mp3 \
       --enable-decoder=mp3adu \
       --enable-decoder=mp3adufloat \
       --enable-decoder=mp3float \
       --enable-decoder=mp3on4 \
       --enable-decoder=mp3on4float \
       --enable-parser=h264 \
       --disable-network \
       --enable-zlib \
       --disable-avfilter \
       --disable-avdevice \
       $ADDITIONAL_CONFIGURE_FLAG


    make clean
    make  -j4 install

    $PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o

    $PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib  -soname libffmpeg.so -shared -nostdlib  -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog  --warn-once  --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
    }

    #arm v7vfpv3
    CPU=armv7-a
    OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
    PREFIX=./android/$CPU
    ADDITIONAL_CONFIGURE_FLAG=
    build_one

    I can read file and get info (decode type\ format type), then I follow the FFmpeg’s sample to call avcodec_decode_audio3 to decode audio file, it return -1, decoding failed. Is some body can tell me what is happened, thanks !

    #include
    #include
    #include
    #include <android></android>log.h>
    #include "libavcodec/avcodec.h"
    #include "libavformat/avformat.h"

    #define AUDIO_INBUF_SIZE 20480
    #define AUDIO_REFILL_THRESH 4096
    #define LOG_TAG "FFmpegTest"
    #define LOG_LEVEL 10
    #define LOGI(level, ...) if (level &lt;= LOG_LEVEL) {__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__);}
    #define LOGE(level, ...) if (level &lt;= LOG_LEVEL) {__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__);}

    char *sourceFileName;
    char *resultFileName;
    AVFormatContext *gFormatCtx;
    int audioStreamIndex;
    AVCodec *gCodec;
    AVCodecContext *gCodecCtx;
    FILE *sourceFile, *resultFile;
    int out_size, len;
    uint8_t *outbuf;
    uint8_t inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
    AVPacket avpkt;

    JNIEXPORT void JNICALL Java_roman10_ffmpegTest_VideoBrowser_naDecode(JNIEnv *pEnv, jobject pObj, jstring source_file_name, jstring result_file_name)
    {
       LOGI(10, "start decode.");
       /* get source file's name */
       sourceFileName = (char *)(*pEnv)->GetStringUTFChars(pEnv, source_file_name, NULL);
       if (sourceFileName == NULL) {
           LOGE(1, "cannot get the source file name!");
           exit(1);
       }
       LOGI(10, "source file name is %s", sourceFileName);

       avcodec_init();

       av_register_all();

       /* get format somthing of source file to AVFormatContext */
       int lError;
       if ((lError = av_open_input_file(&amp;gFormatCtx, sourceFileName, NULL, 0, NULL)) !=0 ) {
           LOGE(1, "Error open source file: %d", lError);
           exit(1);
       }
       if ((lError = av_find_stream_info(gFormatCtx)) &lt; 0) {
           LOGE(1, "Error find stream information: %d", lError);
           exit(1);
       }
       LOGI(10, "audio format: %s", gFormatCtx->iformat->name);
       LOGI(10, "audio bitrate: %d", gFormatCtx->bit_rate);

       /* ???get audio stream's id and codec of source file??? */
       audioStreamIndex = av_find_best_stream(gFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, &amp;gCodec, 0);
       LOGI(10, "audioStreamIndex %d", audioStreamIndex);
       if (audioStreamIndex == AVERROR_STREAM_NOT_FOUND) {
           LOGE(1, "cannot find a audio stream");
           exit(1);
       } else if (audioStreamIndex == AVERROR_DECODER_NOT_FOUND) {
           LOGE(1, "audio stream found, but no decoder is found!");
           exit(1);
       }
       LOGI(10, "audio codec: %s", gCodec->name);

       /* get codec somthing of audio stream to AVCodecContext */
       gCodecCtx = gFormatCtx->streams[audioStreamIndex]->codec;
       if (avcodec_open(gCodecCtx, gCodec) &lt; 0) {
       LOGE(1, "cannot open the audio codec!");
           exit(1);
       }

       /* ???gCodec = avcodec_find_decoder(gCodecCtx->codec_id);
       if (!gCodec) {
       LOGE(1, "codec not found");
           return;
       }

       gCodecCtx= avcodec_alloc_context();

       if (avcodec_open(gCodecCtx, gCodec) &lt; 0) {
       LOGE(1, "could not open codec");
           exit(1);
       }??? */

       outbuf = malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE);

       sourceFile = fopen(sourceFileName, "rb");
       if (!sourceFile) {
       LOGE(1, "could not open %s", sourceFileName);
           exit(1);
       }
       /* get result file's name */
       resultFileName = (char *)(*pEnv)->GetStringUTFChars(pEnv, result_file_name, NULL);
       LOGI(10, "result file name is %s", resultFileName);
       resultFile = fopen(resultFileName, "wb");
       if (!resultFile) {
       LOGE(1, "could not create result file");
           av_free(gCodecCtx);
           exit(1);
       }

       av_init_packet(&amp;avpkt);

       avpkt.data = inbuf;
       avpkt.size = fread(inbuf, 1, AUDIO_INBUF_SIZE, sourceFile);
       LOGI(10, "avpkt.size: %d", avpkt.size);
       /* decode file */
       while (avpkt.size > 0) {
           out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
           len = avcodec_decode_audio3(gCodecCtx, (short *)outbuf, &amp;out_size, &amp;avpkt);
           if (len &lt; 0) {
               LOGE(1, "Error while decoding: %d", len);
               exit(1);
           }
           if (out_size > 0) {
               fwrite(outbuf, 1, out_size, resultFile);
           }
           avpkt.size -= len;
           avpkt.data += len;
           if (avpkt.size &lt; AUDIO_REFILL_THRESH) {
               memmove(inbuf, avpkt.data, avpkt.size);
               avpkt.data = inbuf;
               len = fread(avpkt.data + avpkt.size, 1,
                           AUDIO_INBUF_SIZE - avpkt.size, sourceFile);
               if (len > 0)
                   avpkt.size += len;
           }
       }

       fclose(resultFile);
       fclose(sourceFile);
       free(outbuf);

       avcodec_close(gCodecCtx);
       av_free(gCodecCtx);

       LOGI(10, "end decode.");
    }
  • ffmpeg formats which allow freq above 18khz [on hold]

    26 juin 2013, par RaviTejas3

    Can anyone suggest me what audio and video codecs allows me to retain frequencies above 18khz till 22050hz in the resultant mp4 or avi video with out any filters.

    No limit for size and HD is preferred.