Recherche avancée

Médias (1)

Mot : - Tags -/Rennes

Autres articles (69)

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

  • (Dés)Activation de fonctionnalités (plugins)

    18 février 2011, par

    Pour gérer l’ajout et la suppression de fonctionnalités supplémentaires (ou plugins), MediaSPIP utilise à partir de la version 0.2 SVP.
    SVP permet l’activation facile de plugins depuis l’espace de configuration de MediaSPIP.
    Pour y accéder, il suffit de se rendre dans l’espace de configuration puis de se rendre sur la page "Gestion des plugins".
    MediaSPIP est fourni par défaut avec l’ensemble des plugins dits "compatibles", ils ont été testés et intégrés afin de fonctionner parfaitement avec chaque (...)

Sur d’autres sites (7461)

  • Join us for the Piwik Community Meetup 2015 !

    25 juin 2015, par Piwik Core Team — Community, Meta

    We’re excited to announce that our third Piwik Community Meetup will be held in Berlin on Tuesday, the 4th of August, 2015. Don’t miss this great opportunity to connect with other users and meet the core team behind Piwik. It’s free, so REGISTER TODAY ! And maybe you would like to share your Piwik use case ? We’re also waiting for your presentation ideas.

    We will cover some of the upcoming features, discuss the future of Piwik, share tricks and hacks to help you get the most out of your Piwik platform, and socialise. If you use Piwik to improve your websites and apps, or are just generally curious about digital analytics and marketing – this event is not to be missed. As our core team is scattered all over the world, this will be a rare opportunity for you to meet and talk to us all at once – especially for those of you interested in the platform, integrating your app with Piwik, and building plugins.

    After the official part, we would like to enjoy drinks with all the participants in the nearby bars. We hope you will be able to join us !

    All Piwik community members are warmly invited to take part in the meetup !

    Piwik Community Meetup 2015

    When ?

    Tuesday, the 4th of August, from 5-9pm

    Where ?

    Kulturbrauerei
    Schönhauser Allee
    Prenzlauer Berg area
    Berlin, Germany
    exact directions tbc.

    Languages :

    English and German

    Book tickets :

    BOOK YOUR FREE INVITATION HERE

    Open call for YOUR presentation ideas

    We would also like to hear how you use Piwik – we’ll be delighted if you’d share your interesting use case during the Meetup. Please send your presentation ideas (speaking time : 5 to 7 minutes) to : meetup@piwik.pro ! Deadline : 20th of July 2015.

    Contact the organisers :

    meetup@piwik.pro

  • Piwik 3 Development Update #1 – New UI design, API changes & release date

    1er septembre 2016, par Thomas Steur — Community, Development

    Over the last months, we have been actively working on the Piwik 3 release and we want to introduce you to the changes that we have done so far. They include a new and modern UI redesign, new widgets for your dashboard, and technical improvements under the hood.

    New Piwik 3 UI

    Based on Material Design we have revamped the user interface which is now more responsive, more usable and faster. While the UI is not yet finished, we invite you to check it out already and to let us know what you think.

    This new Piwik material design is a visual language that synthesizes classic principles of good design with the innovation and possibility of technology and science.

    More responsive

    Piwik 3 will look and feel much better on your mobile phone and tablet. Many elements have been improved : the menus, the segment editor and dashboard selector, the widgets, the settings pages and most other pages so you can fully experience and enjoy Piwik on any device !

    Improved usability

    We have updated the menu structure, the dashboard selector as well as the footer in reports to make your life easier when using Piwik. We love to keep these complicated things simple. There are also many other tiny improvements that you will appreciate.

    The Zen Mode lets you view in full screen your analytics reports and dashboards. Users love this feature and it can now be accessed by pressing “z” key.

    Faster

    To make the Piwik interface faster, we have refactored most of our CSS, HTML and JavaScript and moved more and more of our code into the client. As a result, Piwik now needs to reload the page much less often ! For example when you change the date or change the segment, Piwik will now load the reports instantly. To improve performance even further, Piwik will now load multiple reports on a single page in parallel.

    Native fonts

    Over the last months more and more web services have started using system fonts, and so will Piwik 3. System fonts look better, improve language support and give you a more native, familiar feeling.

    For more details and screenshots have a look at the pull request for the Piwik 3 UI update.

    New widgets

    With the “Latest Piwik Plugin Updates” widget you won’t miss any newly added or updated plugin anymore. This will help you learn about and discover the useful plugins and themes available on the Marketplace.

    Super users can now see at a glance the current state of the Piwik system, thanks to the new “System Check” and “System Summary” widgets.

    API Changes

    Piwik is the leading open analytics platform, highly customisable and extensible thanks to a flexible plugins architecture and a design based on APIs. In this new major Piwik 3 release, we significantly improve the foundation of our open platform and several of its core APIs.

    The new Widgets and Reporting API makes it possible to add reports and widgets to any existing reporting page. In the past, reporting pages had to be created manually which was time consuming and it was hard to maintain a consistent look across different reporting pages. Now reporting pages are generated automatically by the Piwik platform.

    The Plugin Settings API was changed to improve performance and to let plugin developers customize the Websites Manager. This is one step towards our goal to let users not only manage websites but also mobile apps, cars, coffee machines or any other thing.

    To see a full list of changes in the Piwik 3 analytics platform, have a look at the developer changelog.

    Developer docs

    The Piwik Developer Zone is full of guides and API references to help developers understand, integrate and extend Piwik. As some APIs have changed in the Piwik 3 release it is now possible to select the Piwik version in the top right corner of the developer zone.

    We are updating guides for Piwik 3 and added a Piwik 2 -> Piwik 3 Migration Guide for plugin developers. Many other guides were updated such as Menus, Custom Report and Widgets.

    Release date

    The first Piwik 3 beta release will be available in the next four weeks. Beta testers automatically receive the update if they are subscribed to the “Latest Beta” release channel. The final Piwik 3 release will be ready before the end of the year. If you want to give it a try, you can either use Piwik from Git and check out the “3.x-dev” branch, or download Piwik 3 from GitHub.

    Closing thoughts

    With faster & more beautiful reports, better APIs and more stability, Piwik 3 is a big step forward for all Piwik users. As our mission is to create, as a community, the leading international open source web analytics platform that gives every user full control of their data, we are very excited to introduce you to this upcoming release.

    We now offer Custom Development services if you like to sponsor a new feature or bug fix, or if you have any custom requirements. And if you use Piwik Analytics to grow your business and need quality help, contact the Piwik analytics experts to get started.

    Until our next Piwik 3 dev update, Happy analysis !

  • Writing opencv frames to avi container using libavformat Custom IO

    16 juillet 2017, par Aryan

    I have to write OpenCV cv::Mat frames to an AVI container. I cannot use OpenCV’s VideoWriter because I do not intend to write the AVI file to disk directly, instead I want to send it to a custom stream, so I have to use ffmpeg/libav. As I have never used ffmpeg before I have taken help from solutions provided here and here, alongwith the ffmpeg documentation.

    I am able to send AVI container packets to my custom output stream as required but the performance is very bad. Specifically, the call to avcodec_encode_video2 is taking too long.

    First, I suspect that due to my inexperience I have misconfigured or wrongly coded something. I am currently working wit 640*480 grayscale frames. On my i.MX6 platform the call to avcodec_encode_video2 is taking about 130ms on average per frame, which is unacceptably slow. Any pointers to an obvious performance killer ??? (i know sws_scale looks useless but it takes negligible time, and might be useful for me later).

    Second, I am using PNG encoder, but that is not required, I would be happy to write uncompressed data if I know how to : If the slowdown is not due to my bad programming, can we just get rid of the encoder and generate uncompressed packets for the avi container ? Or use some encoder that accepts grayscale images and is not that slow ?

    For Initialization and writing of header I am using :

    void MyWriter::WriteHeader()  
    {
       av_register_all();

       // allocate output format context
       if (avformat_alloc_output_context2(&avFmtCtx, NULL, "avi", NULL) < 0) { printf("DATAREC: avformat_alloc_output_context2 failed"); exit(1); }

       // buffer for avio context    
       bufSize = 640 * 480 * 4; // Don't know how to derive, but this should be big enough for now
       buffer = (unsigned char*)av_malloc(bufSize);
       if (!buffer) { printf("DATAREC: Buffer alloc failed"); exit(1); }

       // allocate avio context
       avIoCtx = avio_alloc_context(buffer, bufSize, 1, this, NULL, WriteCallbackWrapper, NULL);
       if (!avIoCtx) { printf("DATAREC: avio_alloc_context failed"); exit(1); }

       // connect avio context to format context
       avFmtCtx->pb = avIoCtx;

       // set custom IO flag
       avFmtCtx->flags |= AVFMT_FLAG_CUSTOM_IO;

       // get encoder
       encoder = avcodec_find_encoder(AV_CODEC_ID_PNG);
       if (!encoder) { printf("DATAREC: avcodec_find_encoder failed"); exit(1); }

       // create new stream
       avStream = avformat_new_stream(avFmtCtx, encoder);
       if (!avStream) { printf("DATAREC: avformat_new_stream failed"); exit(1); }

       // set stream codec defaults
       if (avcodec_get_context_defaults3(avStream->codec, encoder) < 0)  { printf("DATAREC: avcodec_get_context_defaults3 failed"); exit(1); }

      // hardcode settings for now
       avStream->codec->pix_fmt = AV_PIX_FMT_GRAY8;
       avStream->codec->width = 640;
       avStream->codec->height = 480;
       avStream->codec->time_base.den = 15;
       avStream->codec->time_base.num = 1;
       avStream->time_base.den = avStream->codec->time_base.den;
       avStream->time_base.num = avStream->codec->time_base.num;
       avStream->r_frame_rate.num = avStream->codec->time_base.den;
       avStream->r_frame_rate.den = avStream->codec->time_base.num;

       // open encoder    
       if (avcodec_open2(avStream->codec, encoder, NULL) < 0) {
           printf("DATAREC: Cannot open codec\n");
           exit(1);
       }

       // write header
       if(avformat_write_header(avFmtCtx, NULL) < 0) { printf("DATAREC: avformat_write_header failed\n"); exit(1);}

       // prepare for first frame
       framePts = 0;
       firstFrame = true;
    }

    After writing the header, the following function is called in a loop for each cv::Mat frame :

    void MyWriter::WriteFrame(cv::Mat& item)
    {
       if (firstFrame) // do only once, before writing the first frame
       {
           // allocate frame
           frame = av_frame_alloc();
           if (!frame) { printf("DATAREC: av_frame_alloc failed"); exit(1); }

           // get size for framebuffer
           int picsz = av_image_get_buffer_size(avStream->codec->pix_fmt, avStream->codec->width, avStream->codec->height, 1);

           // allocate frame buffer
           framebuf = (unsigned char*)av_malloc(picsz);
           if (!framebuf) { printf("DATAREC: fail to alloc framebuf"); exit(1); }

           // set frame width, height, format
           frame->width = avStream->codec->width;
           frame->height = avStream->codec->height;
           frame->format = static_cast<int>(avStream->codec->pix_fmt);

           // set up data pointers and linesizes
           if (av_image_fill_arrays(frame->data, frame->linesize, framebuf, avStream->codec->pix_fmt, avStream->codec->width, avStream->codec->height, 1) &lt; 0) { printf("DATAREC: av_image_fill_arrays failed\n"); exit(1);}

           // get sws context
           swsctx = sws_getCachedContext(nullptr, avStream->codec->width, avStream->codec->height, avStream->codec->pix_fmt, avStream->codec->width, avStream->codec->height, avStream->codec->pix_fmt, SWS_BICUBIC, nullptr, nullptr, nullptr);
           if (!swsctx) { printf("DATAREC: fail to sws_getCachedContext"); exit(1); }

           // done initializing
           firstFrame = false; // don't repeat this for the following frames
       }

       // call sws scale
       const int stride[] = { static_cast<int>(item.step[0]) };
       sws_scale(swsctx, &amp;item.data, stride, 0, item.rows, frame->data, frame->linesize);

       // set presentation timestamp
       frame->pts = framePts++;

       // initialize packet
       av_init_packet(&amp;pkt);
       pkt.data = NULL;
       pkt.size = 0;

       // THIS TAKES VERY LONG TO EXECUTE
       // call encoder, convert frame to packet
       if (avcodec_encode_video2(avStream->codec, &amp;pkt, frame, &amp;got_pkt) &lt; 0) { printf("DATAREC: fail to avcodec_encode_video2");  exit(1); }

       write packet if available
       if (got_pkt)
       {
           pkt.duration = 1;
           av_write_frame(avFmtCtx, &amp;pkt);
       }

       // wipe packet
       av_packet_unref(&amp;pkt);
    }
    </int></int>

    After writing required frames, trailer is written :

    void MyWriter::WriteTrailer()
    {
       // prepare packet for trailer
       av_init_packet(&amp;pkt);
       pkt.data = NULL;
       pkt.size = 0;

       // encode trailer packet
       if (avcodec_encode_video2(avStream->codec, &amp;pkt, nullptr, &amp;got_pkt) &lt; 0) { printf("DATAREC: fail to avcodec_encode_video2");    exit(1); }

       // write trailer packet
       if (got_pkt)
       {
           pkt.duration = 1;
           av_write_frame(avFmtCtx, &amp;pkt);
       }

       // free everything
       av_packet_unref(&amp;pkt);
       av_write_trailer(avFmtCtx);
       av_frame_free(&amp;frame);
       avcodec_close(avStream->codec);
       av_free(avIoCtx);
       sws_freeContext(swsctx);
       avformat_free_context(avFmtCtx);
       av_free(framebuf);
       av_free(buffer);
       firstFrame = true; // for the next file
    }

    Many many thanks to everyone who made it down to this line !