Recherche avancée

Médias (91)

Autres articles (102)

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

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

  • swscale : Deprecate vector functions which are unused outside swscale

    31 mars 2016, par Michael Niedermayer
    swscale : Deprecate vector functions which are unused outside swscale
    

    There are no known users of these functions within debian
    It should be thus possible to remove these functions without recommandition of a
    replacement

    Signed-off-by : Michael Niedermayer <michael@niedermayer.cc>

    • [DH] libswscale/swscale.h
    • [DH] libswscale/utils.c
    • [DH] libswscale/version.h
  • svq3 : eliminate write_back_intra_pred_mode() usage

    22 mars 2016, par Anton Khirnov
    svq3 : eliminate write_back_intra_pred_mode() usage
    

    This function depends on the h264 internals and is so tiny that just
    copying the code out is the simplest replacement.

    • [DBH] libavcodec/svq3.c
  • Calling FFMPEG with Boost.Process

    10 février 2016, par CadentOrange

    I’m trying to call FFMPEG from my C++ process to stream video from an IP camera. The FFMPEG command I use is ffmpeg.exe -rtsp_transport tcp -i rtsp://10.0.1.21/ONVIF/MediaInput?profile=1_def_profile4 -f image2pipe -pix_fmt rgb24 -vcodec rawvideo -r 15 -. I’ve verified this command in the command prompt and it does start a video stream and dumps the frames to stdout. I’ve also written similar code in Python and it works.

    This is the code I’m using to call FFMPEG with the arguments from the previous paragraph in C++ and read the individual frames from stdout.

    bool build_ffmpeg_arguments(const std::string &amp;uri, std::vector &amp;args)
    {
       args.push_back("-rtsp_transport");
       args.push_back("tcp");
       args.push_back("-i");
       args.push_back(uri);
       args.push_back("-f");
       args.push_back("image2pipe");
       args.push_back("-pix_fmt");
       args.push_back("rgb24");
       args.push_back("-vcodec");
       args.push_back("rawvideo");
       args.push_back("-r");
       args.push_back("15");
       args.push_back("-");

       return true;
    }


    boost::process::child start_ffmpeg(const std::string &amp;uri,
                                      const std::string &amp;ffmpeg_path = "c:\\Tools\\ffmpeg.exe")
    {
       std::vector args;
       build_ffmpeg_arguments(uri, args);

       boost::process::context ctx;
       ctx.stdout_behavior = boost::process::capture_stream();
       ctx.stderr_behavior = boost::process::capture_stream();

       return boost::process::launch(ffmpeg_path, args, ctx);
    }

    bool read_frame(boost::process::pistream &amp;is, int frame_size, std::vector<char> &amp;frame_bytes)
    {
       char *buffer = new char[frame_size];

       frame_bytes.clear();
       is.read(buffer, frame_size);
       int bytes_read = is.gcount();
       frame_bytes.assign(buffer, buffer + bytes_read);

    //    std::cout &lt;&lt; "Is Bad: " &lt;&lt; is.bad() &lt;&lt; std::endl;
    //    std::cout &lt;&lt; "Is EOF: " &lt;&lt; is.eof() &lt;&lt; std::endl;
    //    std::cout &lt;&lt; "gcount: " &lt;&lt; bytes_read &lt;&lt; std::endl;

       delete[] buffer;
       if(is.bad() || is.eof() || bytes_read &lt; frame_size)
       {
           //We read in gunk, skip this time.
           is.clear();
           return false;
       }
       else
       {
           return true;
       }
    }


    //This is where the code is invoked.
    BOOST_AUTO_TEST_CASE(test_ffmpeg_stream)
    {
       std::string uri = "rtsp://10.0.1.21/ONVIF/MediaInput?profile=1_def_profile4";
       int width = 320;
       int height = 240;
       int bpp = 3;
       int bytes_expected = width * height * 3;
       boost::process::child c = start_ffmpeg(uri);
       boost::process::pistream &amp;is = c.get_stdout();
       boost::process::pistream &amp;err = c.get_stderr();

       std::vector<char> buffer;
       bool result = read_frame(is, bytes_expected, buffer);
       //BOOST_CHECK_EQUAL(true, result);
       std::cout &lt;&lt; "Buffer size: " &lt;&lt; buffer.size() &lt;&lt; std::endl;

       std::string line;
       while (std::getline(err, line))
           std::cout &lt;&lt; line &lt;&lt; std::endl;
    }
    </char></char>

    The output from stderr suggests that the parameters could be passed in wrong.

    ffmpeg version 2.8.3 Copyright (c) 2000-2015 the FFmpeg developers
     built with gcc 5.2.0 (GCC)
     configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
    isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
    le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
    enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-l
    ibilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enab
    le-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --en
    able-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --ena
    ble-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc
    --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enabl
    e-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --ena
    ble-decklink --enable-zlib
     libavutil      54. 31.100 / 54. 31.100
     libavcodec     56. 60.100 / 56. 60.100
     libavformat    56. 40.101 / 56. 40.101
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 40.101 /  5. 40.101
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  2.101 /  1.  2.101
     libpostproc    53.  3.100 / 53.  3.100
    rtsp://10.0.1.21/ONVIF/MediaInput?profile=1_def_profile4: Unknown error

    Is there a way of showing the full command line with arguments that boost::process::launch is calling ? Is there anything obvious that I’m doing wrong with boost::process ?

    Update :

    Suspecting that it could be the command line arguments being passed in wrong, I’ve created a dummy executable that prints out the command line arguments it receives. It’s a drop-in replacement for ffmpeg.exe purely so that I can see what command lines are being passed. The command line I’m getting is -rtsp_transport tcp -i rtsp://10.0.1.21/ONVIF/MediaInput?profile=1_def_profile4 -f image2pipe -pix_fmt rgb24 -vcodec rawvideo -r 15 -. Manually calling ffmpeg with that command line works as expected. Yet somehow it doesn’t work when launched via boost::process.

    ** Solution **

    It looks like I need to set the the environment field of the context. No idea why that fixes the problem, but it does.

    boost::process::context ctx;
    ctx.environment = boost::process::self::get_environment();
    ctx.stdout_behavior = boost::process::capture_stream();
    ctx.stderr_behavior = boost::process::capture_stream();