Recherche avancée

Médias (0)

Mot : - Tags -/alertes

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (95)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Que fait exactement ce script ?

    18 janvier 2011, par

    Ce script est écrit en bash. Il est donc facilement utilisable sur n’importe quel serveur.
    Il n’est compatible qu’avec une liste de distributions précises (voir Liste des distributions compatibles).
    Installation de dépendances de MediaSPIP
    Son rôle principal est d’installer l’ensemble des dépendances logicielles nécessaires coté serveur à savoir :
    Les outils de base pour pouvoir installer le reste des dépendances Les outils de développements : build-essential (via APT depuis les dépôts officiels) ; (...)

  • Sélection de projets utilisant MediaSPIP

    29 avril 2011, par

    Les exemples cités ci-dessous sont des éléments représentatifs d’usages spécifiques de MediaSPIP pour certains projets.
    Vous pensez avoir un site "remarquable" réalisé avec MediaSPIP ? Faites le nous savoir ici.
    Ferme MediaSPIP @ Infini
    L’Association Infini développe des activités d’accueil, de point d’accès internet, de formation, de conduite de projets innovants dans le domaine des Technologies de l’Information et de la Communication, et l’hébergement de sites. Elle joue en la matière un rôle unique (...)

Sur d’autres sites (3556)

  • 5 perfect feature combinations to use with Heatmaps and Session Recordings

    28 janvier 2020, par Jake Thornton — Uncategorized

    Gaining valuable insights by simply creating a heatmap or setting up recordings on your most important web pages is a good start, but using the Heatmaps and Session Recordings features in combination with other Matomo features is where the real magic happens.

    If you’re serious about significantly increasing conversions on your website to impact your bottom line, you need to accurately answer these questions :

    With Matomo Analytics, you have the ability to integrate heatmaps and session recordings with all the features of a powerful web analytics platform, which means you get the complete picture of your visitor’s experience of your website.

    Here are five features that work with Heatmaps and Session Recordings to maximise conversions :

    1. Behaviour feature with Heatmaps

    Before creating heatmaps on pages you think are most important to your website, first check out Behaviour – Pages. Here you get valuable information around unique pageviews, bounce rate, average time on page and exit rates for every page on your website.

    Use this data as your starting point for heatmaps. Here you’ll identify current pain points for your visitors before using heatmaps to analyse their interactions on these pages.

    Here’s how to use the behaviour feature to determine which pages to setup heatmaps on :

    • Make sure you know what pages are generating the most unique page views, it could be your blog rather than your homepage
    • Which pages have the highest bounce rates – can you make some quick changes above-the-fold and see if this makes a difference
    • When the average time on page is high, why are visitors so engaged with these pages ? What keeps them reading ? Setup a heatmap to learn more
    • Reduce exit rates by moving them along to other pages on your website
    • Determine some milestones you want to achieve e.g. use heatmaps as your visual guide to improve average time on page, bounce rates and exit rates. A milestone could be that the exit rate for your previous blog was 34%, work towards getting this down to 30%

    2. Ecommerce feature and Custom Segments

    If you run an ecommerce business, you may want to learn only about visitors who are more likely to be your customers. For example, if you find 65% of product sales come from customers based in New York, but visits to your product pages are from every state in the USA, how can you learn more specifically about visitors only from New York ?

    Using Segments to target a particular audience :

    • First, make sure you have created heatmaps and recordings on the popular product pages you want to learn about your visitor’s interactions
    • Note : Make sure the segment you create generates enough pageviews to apply a heatmap for more accurate results. We recommend a minimum of 1,000 page views per sample size.
    • Then create a custom Segment – search Ecommerce and find the Product Name and select the product. Learn how to do this here.

    Click on ‘Add a new segment’ or on the ‘edit’ link next to an existing segment name to open the segment editor :

    Click on any item on the left to see the list of information you can segment by. In this case search “City”, then select “Is” and in the third column search “New York” (example in the image above) :

    You can also use the search box at the bottom to search through the whole list.

    • This will give you insights across the Matomo platform based only on customers who purchased this product
    • Then go to the Ecommerce feature – and find Sales. Here you will learn what your most popular locations are for your product sales.
    • Once you know the location you want to segment, go back and update the custom Segment you just created. Click on the edit pencil icon and update it by selecting Add AND condition, and add the sub group you would like to track on the product page. In this example, select City – New York. Click Save & Apply.

    Now you should have successfully created a segment for your popular product page with visitors only from New York.

    Check out the heatmap or recordings you created for this page. You may be very surprised to see how this segment engaged with your website compared to all website visitors.

    Note : If you run a lead generation website you can use the Goals feature instead of Ecommerce to track the success metrics you need.

    3. Visitor Profiles within Session Recordings

    Seeing visitor location, device, OS and browser for your recordings is very valuable, but it’s even more valuable to integrate visitor profiles with session recordings as you get to see everything that visitor has done on your website … ever ! 

    What pages they visited before/after the recording, what actions they took, how long they spent on your website etc. All this is captured in the visitor profile of every individual session recording so you can see where exactly engaged viewers are in their journey with your business, for example :

    • How has this visitor behaved on your website in the past ? 
    • Is this visitor already a customer ? 
    • Is this the visitors first time to your website and
    • What other pages on your website are they interested in seeing in this session ?

    Use the visitor profiles feature within session recordings to understand the users better when watching each session.

    You get the full picture of what role the page you recorded played in the overall experience of your website’s visitor. And more importantly, to see if they took the desired action you wanted them to take.

    4. Funnels feature (premium feature)

    The Funnels feature lets you see the customer journey from the first entry page through to the conversion page.

    Once you create a funnel, you can see the % of visitors who drop off between pages on their way to converting.

    In our example, you may then see page one to page two has a drop-off rate of 47%. Page two to page three 95% users drop-off rate and page three to page four 97.3% users drop-off rate.

    Why is the drop-off rate so high from page two to page three and why is the drop-off rate so low from page three to page four ?

    So, you may need to simplify things on page one because you may unknowingly be offering your visitor an easy way out of the funnel. Maybe the visitor is stuck reading your content and not understanding the value of your offering.

    Small tip for session recordings …

    With session recordings especially you can see firsthand through live recordings where exactly visitors click away from the page which exits them from your conversion funnel. Take note to see if this is a recurring issue with other visitors, then take action into fixing this hole.

    Whatever the case, work towards reducing drop-off rates through your conversion funnels by discovering where the problems exist, make changes and learn how these changes affect engagement through heatmaps and recordings.

    5. A/B Testing feature (premium feature)

    Following on from the example with the Funnels feature, once you identify there is a problem in your conversion funnel, how do you know what is preventing visitors from taking an action that pushes them to the next page in the funnel ? You need to test different variations of content to see what works best for your visitors.

    A/B Testing lets you test a variety of things, including :

    • different headlines 
    • less copy vs more copy 
    • different call-to-actions
    • different colour schemes
    • entirely different page layouts

    Once you’ve created two or more variations of specific landing pages in the conversion funnel, see how visitors interacted differently between the variations of landing pages through your heatmaps and recordings.

    You may see that your visitors have scrolled further down the page because more content was provided or an important CTA button was clicked more due to a colour change. Whatever the case, using A/B testing with heatmaps and session recordings is an effective combination for increasing user engagement.

    The conversion rate optimization (CRO) strategy

    CRO is the process of learning what the most valuable content/aspect of your website is and how to best optimize this for your visitors to increase conversion chances. 

    Heatmaps and session recordings play a vital role in this strategy, but it’s how you work these features in tandem with other valuable Matomo features that will give you the most actionable insights you need to grow your business.

    Want to learn how to create an effective CRO strategy ?

  • How to extract elementary video from mp4 using ffmpeg programmatically ?

    24 octobre 2019, par epipav

    I have started learning ffmpeg few weaks ago. At the moment I am able to transcode any video to mp4 using h264/AVC codec. The main scheme is something like that :

    -open input
    -demux
    -decode
    -encode
    -mux

    The actual code is below :

    #include <iostream>

    #include

    extern "C" {

     #
     ifndef __STDC_CONSTANT_MACROS# undef main /* Prevents SDL from overriding main() */ # define __STDC_CONSTANT_MACROS# endif

     # pragma comment(lib, "avcodec.lib")# pragma comment(lib, "avformat.lib")# pragma comment(lib, "swscale.lib")# pragma comment(lib, "avutil.lib")

     #include
     #include
     #include
     #include
     #include <libavutil></libavutil>opt.h>
     #include
     #include
     #include
     #include
     #include
    }

    using namespace std;

    void open_video(AVFormatContext * oc, AVCodec * codec, AVStream * st) {
     int ret;
     AVCodecContext * c;
     c = st - > codec;

     /*open codec */

     cout &lt;&lt; "probably starts here" &lt;&lt; endl;
     ret = avcodec_open2(c, codec, NULL);
     cout &lt;&lt; "and ends here" &lt;&lt; endl;

     if (ret &lt; 0) {
       cout &lt;&lt; ("Could not open video codec") &lt;&lt; endl;
     }

    }

    /*This function will add a new stream to our file.
    @param
    oc -> Format context that the new stream will be added.
    codec -> codec of the stream, this will be passed.
    codec_id ->
    chWidth->
    chHeight->
    */

    AVStream * addStream(AVFormatContext * oc, AVCodec ** codec, enum AVCodecID codec_id, int chWidth, int chHeight, int fps) {
     AVCodecContext * c;
     AVStream * st;

     //find encoder of the stream, it passes this information to @codec, later on
     //it will be used in encoding the video @ avcodec_encode_video2 in loop.
     * codec = avcodec_find_encoder(AV_CODEC_ID_H264);

     if (( * codec) == NULL)
       cout &lt;&lt; "ERROR CAN NOT FIND ENCODER! ERROR! ERROR! AVCODEC_FIND_ENCODER FAILED !!!1 "
     "" &lt;&lt; endl;

     if (!( * codec))
       printf("Could not find encoder for ' %s ' ", avcodec_get_name(codec_id));

     //create a new stream with the found codec inside oc(AVFormatContext).
     st = avformat_new_stream(oc, * codec);

     if (!st)
       cout &lt;&lt; " Cannot allocate stream " &lt;&lt; endl;

     //Setting the stream id.
     //Since, there can be other streams in this AVFormatContext,
     //we should find the first non used index. And this is oc->nb_streams(number of streams) - 1
     st - > id = oc - > nb_streams - 1;

     c = st - > codec;

     //setting the stream's codec's properties.
     c - > codec_id = codec_id;
     c - > bit_rate = 4000000;
     c - > width = chWidth;
     c - > height = chHeight;
     c - > time_base.den = fps;
     //fps;
     c - > time_base.num = 1;
     c - > gop_size = 12;
     c - > pix_fmt = AV_PIX_FMT_YUV420P;

     if (c - > codec_id == AV_CODEC_ID_MPEG2VIDEO) {
       /* just for testing, we also add B frames */
       c - > max_b_frames = 2;
     }

     if (c - > codec_id == AV_CODEC_ID_MPEG1VIDEO) {
       /* Needed to avoid using macroblocks in which some coeffs overflow.
        * This does not happen with normal video, it just happens here as
        * the motion of the chroma plane does not match the luma plane. */
       c - > mb_decision = 2;
     }

     /* Some formats want stream headers to be separate. */
     if (oc - > oformat - > flags &amp; AVFMT_GLOBALHEADER)
       c - > flags |= CODEC_FLAG_GLOBAL_HEADER;

     //returning our lovely new brand stream.
     return st;

    }

    int changeResolution(string source, int format) {
     //Data members
     struct SwsContext * sws_ctx = NULL;
     AVFrame * pFrame = NULL;
     AVFrame * outFrame = NULL;
     AVPacket packet;
     uint8_t * buffer = NULL;
     uint8_t endcode[] = {
       0,
       0,
       1,
       0xb7
     };
     AVDictionary * optionsDict = NULL;
     AVFormatContext * pFormatCtx = NULL;
     AVFormatContext * outputContext = NULL;
     AVCodecContext * pCodecCtx;
     AVCodec * pCodec;
     AVCodec * codec;
     AVCodec * videoCodec;
     AVOutputFormat * fmt;
     AVStream * video_stream;
     int changeWidth;
     int changeHeight;
     int frameFinished;
     int numBytes;
     int fps;

     int lock = 0;

     //Register all codecs &amp; other important stuff. Vital!..
     av_register_all();

     //Selects the desired resolution.
     if (format == 0) {
       changeWidth = 320;
       changeHeight = 180;
     } else if (format == 1) {
       changeWidth = 640;
       changeHeight = 480;

     } else if (format == 2) {
       changeWidth = 960;
       changeHeight = 540;

     } else if (format == 3) {
       changeWidth = 1024;
       changeHeight = 768;

     } else {
       changeWidth = 1280;
       changeHeight = 720;
     }

     // Open video file
     int aaa;
     aaa = avformat_open_input( &amp; pFormatCtx, source.c_str(), NULL, NULL);
     if (aaa != 0) {
       cout &lt;&lt; " cannot open input file \n" &lt;&lt; endl;
       cout &lt;&lt; "aaa = " &lt;&lt; aaa &lt;&lt; endl;
       return -1; // Couldn't open file    
     }

     // Retrieve stream information
     if (av_find_stream_info(pFormatCtx) &lt; 0)
       return -1; // Couldn't find stream information

     //just checking duration casually for no reason
     /*int64_t duration = pFormatCtx->duration;

     cout &lt;&lt; "the duration is " &lt;&lt; duration &lt;&lt; " " &lt;&lt; endl;*/

     //this writes the info about the file
     av_dump_format(pFormatCtx, 0, 0, 0);
     cin >> lock;

     // Find the first video stream
     int videoStream = -1;
     int i;

     for (i = 0; i &lt; 3; i++)
       if (pFormatCtx - > streams[i] - > codec - > codec_type == AVMEDIA_TYPE_VIDEO) {
         videoStream = i;
         cout &lt;&lt; " lel \n ";
         break;

       }

     if (videoStream == -1)
       return -1; // Didn't find a video stream

     // Get a pointer to the codec context for the video stream
     pCodecCtx = pFormatCtx - > streams[videoStream] - > codec;
     fps = pCodecCtx - > time_base.den;

     //Find the decoder of the input file, for the video stream
     pCodec = avcodec_find_decoder(pCodecCtx - > codec_id);

     if (pCodec == NULL) {
       fprintf(stderr, "Unsupported codec!\n");
       return -1; // Codec not found
     }

     // Open codec, you must open it first, in order to use it.
     if (avcodec_open2(pCodecCtx, pCodec, &amp; optionsDict) &lt; 0)
       return -1; // Could not open codec

     // Allocate video frame ( pFrame for taking the packets into, outFrame for processed frames to packet.)
     pFrame = avcodec_alloc_frame();
     outFrame = avcodec_alloc_frame();

     i = 0;

     int ret;
     int video_frame_count = 0;

     //Initiate the outFrame set the buffer &amp; fill the properties
     numBytes = avpicture_get_size(PIX_FMT_YUV420P, changeWidth, changeHeight);
     buffer = (uint8_t * ) av_malloc(numBytes * sizeof(uint8_t));
     avpicture_fill((AVPicture * ) outFrame, buffer, PIX_FMT_YUV420P, changeWidth, changeHeight);

     int pp;
     int frameNo = 0;

     //allocate the outputContext, it will be the AVFormatContext of our output file.
     //It will try to find the format by giving the file name.
     avformat_alloc_output_context2( &amp; outputContext, NULL, NULL, "myoutput.mp4");

     //Cant find the file extension, using MPEG as default.
     if (!outputContext) {
       printf("Could not deduce output format from file extension: using MPEG.\n");
       avformat_alloc_output_context2( &amp; outputContext, NULL, "mpeg", "myoutput.mp4");
     }

     //Still cant set file extension, exit.
     if (!outputContext) {
       return 1;
     }

     //set AVOutputFormat fmt to our outputContext's format.
     fmt = outputContext - > oformat;
     video_stream = NULL;

     //If fmt has a valid codec_id, create a new video stream.
     //This function will set the streams codec &amp; codecs desired properties.
     //Stream's codec will be passed to videoCodec for later usage.
     if (fmt - > video_codec != AV_CODEC_ID_NONE)
       video_stream = addStream(outputContext, &amp; videoCodec, fmt - > video_codec, changeWidth, changeHeight, fps);

     //open the video using videoCodec. by avcodec_open2() i.e open the codec.
     if (video_stream)
       open_video(outputContext, videoCodec, video_stream);

     //Creating our new output file.
     if (!(fmt - > flags &amp; AVFMT_NOFILE)) {
       ret = avio_open( &amp; outputContext - > pb, "toBeStreamed.264", AVIO_FLAG_WRITE);
       if (ret &lt; 0) {
         cout &lt;&lt; " cant open file " &lt;&lt; endl;
         return 1;
       }
     }

     //Writing the header of format context.
     //ret = avformat_write_header(outputContext, NULL);

     if (ret >= 0) {
       cout &lt;&lt; "writing header success !!!" &lt;&lt; endl;
     }

     //Start reading packages from input file.
     while (av_read_frame(pFormatCtx, &amp; packet) >= 0) {

       // Is this a packet from the video stream?  
       if (packet.stream_index == videoStream) {

         // Decode video package into frames
         ret = avcodec_decode_video2(pCodecCtx, pFrame, &amp; frameFinished, &amp; packet);

         if (ret &lt; 0) {
           printf(" Error decoding frame !!..");
           return ret;
         }

         if (frameFinished) {
           printf("video_frame n:%d    coded_n:%d\n", video_frame_count++, pFrame - > coded_picture_number);
         }

         av_free_packet( &amp; packet);

         //do stuff with frame, in this case we are changing the resolution.
         static struct SwsContext * img_convert_ctx_in = NULL;
         if (img_convert_ctx_in == NULL) {
           img_convert_ctx_in = sws_getContext(pCodecCtx - > width,
             pCodecCtx - > height,
             pCodecCtx - > pix_fmt,
             changeWidth,
             changeHeight,
             PIX_FMT_YUV420P,
             SWS_BICUBIC,
             NULL,
             NULL,
             NULL);

         }
         //scale the frames
         sws_scale(img_convert_ctx_in,
           pFrame - > data,
           pFrame - > linesize,
           0,
           pCodecCtx - > height,
           outFrame - > data,
           outFrame - > linesize);

         //initiate the pts value
         if (frameNo == 0)
           outFrame - > pts = 0;

         //calculate the pts value &amp; set it.
         outFrame - > pts += av_rescale_q(1, video_stream - > codec - > time_base, video_stream - > time_base);

         //encode frames into packages. Package passed in @packet.
         if (avcodec_encode_video2(outputContext - > streams[0] - > codec, &amp; packet, outFrame, &amp; pp) &lt; 0)
           cout &lt;&lt; "Encoding frames into packages, failed. " &lt;&lt; endl;

         frameNo++;

         //write the packages into file, resulting in creating a video file.
         av_interleaved_write_frame(outputContext, &amp; packet);

       }

     }

     av_free_packet( &amp; packet);
     //av_write_trailer(outputContext);

     avio_close(outputContext - > pb);

     // Free the RGB image
     av_free(buffer);
     av_free(outFrame);

     // Free the YUV frame
     av_free(pFrame);

     // Close the codec
     avcodec_close(video_stream - > codec);
     avcodec_close(pCodecCtx);

     // Close the video file
     avformat_close_input( &amp; pFormatCtx);

     return 0;
    }
    </iostream>

    at the end of the process I get my desired file with desired codec & container & resolution.

    My problem is, in a part of our project I need to get elementary video streams IN file. Such as example.264. However I can not add a stream without creating an AVFormatContext. I can not create an AVFormatContext because 264 files does not have a container,they are just raw video ?, as far as I know.

    I have tried the way in decoding_encoding.c which uses fwrite. However that example was for mpeg-2 codec and when I try to adapt that code to H264/AVC codec, I got "floating point division by zero" error from mediainfo and moreover, some of the properties of the video was not showing (such as FPS & playtime & quality factor). I think it has to do with the "endcode" the example adds at the end of the code. It is for mpeg-2. ( uint8_t endcode[] = 0, 0, 1, 0xb7  ; )

    Anyway, I would love to get a startpoint for this task. I have managed to come this far by using internet resources ( quite few & outdated for ffmpeg) but now I’m stuck a little.

  • Today we celebrate Data Privacy Day 2019

    28 janvier 2019, par Jake Thornton — Privacy

    Today we celebrate Data Privacy Day 2019 !!!

    What is Data Privacy Day ?

    Wikipedia tells us that : The purpose of Data Privacy Day is to raise awareness and promote privacy and data protection best practices.

    Our personal data is our online identity. When you think what personal data means – our phone records, credit card transactions, GPS position, IP addresses, browsing history and so much more. All so valuable and personal to us as human beings.

    That’s why we cannot take our personal data online for granted. We have a right to know which websites collect our data and how it’s then used, something that’s often not visible or easily recognisable when browsing.

    What Data Privacy Day means to Matomo

    Every year the team at Matomo uses this day as a chance to reflect on how far the Matomo (formerly Piwik) project has come. But then also reflect how far we still have to go in spreading the message that our data and personal information online matters.

    2018 saw the introduction of the EU General Data Protection Regulation (GDPR) to protect people’s data online. As a team, Matomo was at the forefront of this development in the analytics space and have since built a GDPR Manager to ensure our users can be fully compliant with the GDPR.

    With every new release of Matomo, we are ensuring that security continues to be at the highest standard and we will continue to be committed to our bug bounty program. Our most recent release of Matomo 3.8.0 alone added a Two Factor Authentication (2FA) feature and a password brute force prevention.

    What next for Matomo and data privacy ?

    As always, security is a top priority for every new release of Matomo and continues to only get better and better. We have a duty to spread our message further that the protection of personal data matters and today is a vital reminder of that. We are, and forever will be, the #1 open-source (and free to use) web analytics platform in the world that fully respects user privacy and gives our users 100% data ownership.

    In 2018 we changed our name, we updated our logo and website, and advanced our platform to compete with the most powerful web analytics tools in the world, all so we can spread our message further and continue our mission.

    Come with us on this exciting journey. Now is the time to take back control of your data and let’s continue creating a safer web for everyone.

    Please help us spread this message.