Recherche avancée

Médias (1)

Mot : - Tags -/école

Autres articles (57)

  • Support de tous types de médias

    10 avril 2011

    Contrairement à beaucoup de logiciels et autres plate-formes modernes de partage de documents, MediaSPIP a l’ambition de gérer un maximum de formats de documents différents qu’ils soient de type : images (png, gif, jpg, bmp et autres...) ; audio (MP3, Ogg, Wav et autres...) ; vidéo (Avi, MP4, Ogv, mpg, mov, wmv et autres...) ; contenu textuel, code ou autres (open office, microsoft office (tableur, présentation), web (html, css), LaTeX, Google Earth) (...)

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

  • Soumettre améliorations et plugins supplémentaires

    10 avril 2011

    Si vous avez développé une nouvelle extension permettant d’ajouter une ou plusieurs fonctionnalités utiles à MediaSPIP, faites le nous savoir et son intégration dans la distribution officielle sera envisagée.
    Vous pouvez utiliser la liste de discussion de développement afin de le faire savoir ou demander de l’aide quant à la réalisation de ce plugin. MediaSPIP étant basé sur SPIP, il est également possible d’utiliser le liste de discussion SPIP-zone de SPIP pour (...)

Sur d’autres sites (5633)

  • How to not process any personal data with Matomo and what it means for you

    22 avril 2018, par InnoCraft

    Disclaimer : this blog post has been written by digital analysts, not lawyers. The purpose of this article is to explain how to not process any personal data with Matomo in order to avoid going through the GDPR compliance process with Matomo analytics. This work comes from our interpretation of different sources : the official GDPR text and the UK privacy commission : ICO resources. It cannot be considered as a professional legal advice. So as GDPR, this information is subject to change. GDPR may be also known as RGPD in French, Spanish, Portuguese, Datenschutz-Grundverordnung, DS-GVO in German, Algemene verordening gegevensbescherming in Dutch, Regolamento generale sulla protezione dei dati in Italian.

    Are you looking for a way to not process any personal data with Matomo ? If the answer is yes, you are at the right place. From our understanding, if you are not processing personal data, then you shouldn’t be concerned about GDPR. Our inspiration came from this official reference :

    “The principles of data protection should therefore not apply to anonymous information, namely information which does not relate to an identified or identifiable natural person or to personal data rendered anonymous in such a manner that the data subject is not or no longer identifiable. This Regulation does not therefore concern the processing of such anonymous information, including for statistical or research purposes.“

    In this blog post we are going to see how you can configure Matomo in order to not process any personal data and what the consequences are.

    Which data is considered as personal according to GDPR ?

    From : eur-lex.europa.eu

    (1) “‘personal data’ means any information relating to an identified or identifiable natural person (‘data subject’) ; an identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person ;”

    (30) “Natural persons may be associated with online identifiers provided by their devices, applications, tools and protocols, such as internet protocol addresses, cookie identifiers or other identifiers such as radio frequency identification tags. This may leave traces which, in particular when combined with unique identifiers and other information received by the servers, may be used to create profiles of the natural persons and identify them.”

    So according to your Matomo configuration, it may leave some traces within the following data :

    1. IP addresses
    2. Cookies identifiers
    3. Page URL or page titles
    4. User ID and Custom “personal” data
    5. Ecommerce order IDs
    6. Location
    7. Heatmaps & Session Recordings

    Let’s see each of them in more detail.

    1. IP addresses

    IP addresses can indirectly identify an individual. It can also give a good approximation of an individual’s location.

    IP addresses are therefore considered as personal data which means you need to anonymize them. To do so, a feature is available within Matomo, where you can anonymize the IP. We recommend you to anonymize at least the last two bytes :

    See our configuration guide for more information

    What are the consequences of using this feature ?

    When applying IP anonymization on two bytes, you will no longer be able to see the full IP in the UI.

    Moreover, there is a small chance that 2 different visitors with the same device and software configuration will be identified as the same visitor if the anonymised IP address is the same for both.

    2. Cookies

    It is not clear for us yet if all cookies are considered equal under GDPR. At this stage it is too early to make a definite decision.

    Did you know ? Matomo lets you optionally disable the creation of cookies by adding an extra line of code to your tracking code see below.

    See our configuration guide for more information

    What are the consequences of using this feature ?

    Matomo is using a few first party cookies, and the following cookies may hold personal data :

    • _pk_id : contains a visitor id used to identify unique visitors
    • _pk_ref : to identify from where they came from

    If Matomo cannot set cookies, it will use a technique called Fingerprint. It is based on several metadata such as the operating system, browser, browser plugins, IP address, browser language ; just to name a few to identify a unique visitor. As this feature is less accurate than the one using cookies, the number of visitors and visits will be affected.

    3. Page URLs and page titles

    URLs are not mentioned within the official GDPR text. However, we know that according to the different CMS you use, some of them may have URLs including personal identifiers.

    For example :

    As a result, you need to find a way to anonymize this data.

    There are several ways you can perform this action according to your website. If your website is adding the personal data through query parameters, you can define a rule to exclude them from Matomo.

    If the personal data are not included within query parameters, you can use the “setCustomURL” feature and write your code as follow :

    See our developer documentation for more information

    If you are also processing personal data within the title tag, you can use the following function : “setDocumentTitle”.

    What are the consequences of using this feature ?

    By anonymizing the URLs containing personal data, some of your  URLs will be grouped together.

    4. User ID and custom personal data

    User ID is a feature (a tracking code needs to be added) which allows you to identify the same user across different devices.

    A User ID needs a corresponding database in order to link a user across different devices, it can be an email, a username, a name, a random number… All those data are either direct or non direct online identifiers and are therefore under the scope of GDPR.

    It will be the same situation if you are using custom variables and/or custom dimensions in order to push personal data to the system.

    To continue using the User ID feature but not recording personal data, you can consider using a hash function which will anonymize/convert your actual User ID into something like “3jrj3j34434834urj33j3”.

    Alternatively, you can enable the feature “Anonymise User IDs”. This feature will be available starting in Matomo 3.5.0 :

    What are the consequences of using this feature ?

    Under GDPR, User ID is personal data. Anonymizing the User ID using a hash function or our built-in functionality make the User Id pseudo-anonymous, which means it can’t be easily identified to a specific user. As a result, you will still get accurate visits and unique visitors metrics, and the Visitor Profile, but without tracking the original User ID which is personal data.

    5. Ecommerce order IDs

    Order IDs are the reference number assigned to the products/services bought by your customers. As this information can be crossed with your internal database, it is considered as an online identifier and is therefore under the scope of GDPR. As for User ID, you can anonymize order IDs using our built-in functionality to Anonymise Order IDs (see section 4. about User Id).

    What are the consequences of anonymizing order ID ?

    It really depends on your former use of order IDs. If you were not using them in the past then you should not see any difference.

    6. Location

    Based on the IP address of a visitor, Matomo can detect the visitors location. Location data is problematic for privacy as this technology has become quite accurate and can detect not only the city a visitor is from, but sometimes an even more precise position of a visitor.

    In order to not leave any accurate traces, we strongly recommend you to enable the IP anonymization feature. Next, you need to enable the setting “Also use the anonymized IP address when enriching visits”. You find this setting directly below the IP anonymization. This is important as otherwise the full IP address will be used to geolocate a visitor.

    What are the consequences of anonymizing location data ?

    The more bytes you anonymize from the IP, the more anonymized your location will be. When you remove two bytes as suggested, the city and region location reports will not be as accurate. In some cases even the country may not be detected correctly anymore.

    7. Heatmaps & Session Recordings

    Heatmaps & Session Recording is a premium feature in Matomo allowing you to see where users click, hover, type and scroll. With session recordings you can then replay their actions in a video.

    Heatmaps & Session Recordings are under the scope of GDPR as they can disclose in some specific cases (for example : filling a contact form) personal data :

    To avoid this, Matomo will anonymize all keystrokes which a user enters into a form field unless you specifically whitelist a field. Many fields that could contain personal data, such as a credit card, phone number, email address, password, social security number, and more are always anonymized and not recorded.

    See our configuration guide for more information

    Note that a page may still show personal information within the page as part of regular content (not a form element). For example an address, or the profile page of a forum user. We have added a feature which allows you to set an HTML attribute “data-matomo-mask” to anonymize any personal content shown in the UI.

    What are the consequences of using this feature ?

    Mainly, you will not be able to see in plain text what people are entering into your forms.

    What should you do with past data ?

    Once more, we have to say that we are not lawyers. So do not take our answers as legal advice. From : ec.europa.eu/newsroom/article29/document.cfm ?doc_id=50053

    “For example, as the GDPR requires that a controller must be able to demonstrate that valid consent was obtained, all presumed consents of which no references are kept will automatically be below the consent standard of the GDPR and will need to be renewed.”

    Our interpretation is that, if you were previously relying on consent, unless you can demonstrate that valid consent was obtained, you need to get the consent back (which is almost impossible) or you need to anonymize or remove that data.

    To anonymize previously tracked data, we are actively working on a feature to do just that directly within Matomo. Alternatively, you may also set up the deletion of logs after a certain amount of time.

    We really hope you enjoyed reading this article. GDPR is still on the go and we are pretty sure you have a lot of questions about it. You probably would like to share our vision about it. So do not hesitate to ask us through our contact form to see how we are interpreting GDPR at Matomo and InnoCraft.

    The post How to not process any personal data with Matomo and what it means for you appeared first on Analytics Platform - Matomo.

  • How parse and decode H264 file with libav/ffmpeg ?

    12 août 2022, par isrepeat

    According to official documentations I try decode my test.mp4 with AV_CODEC_ID_H264.

    


    Of course I can do this with av_read_frame(), but how do it with av_parser_parse2() ?

    


    The problem occurs at avcodec_send_packet(...) at decode_nal_units(...) at ff_h2645_packet_split(...) [h264dec.c]

    


    extern "C" {&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;}&#xA;&#xA;//#define INBUF_SIZE 4096&#xA;#define INBUF_SIZE 256000&#xA;&#xA;void decode(AVCodecContext* dec_ctx, AVFrame* frame, AVPacket* pkt, const char* filename);&#xA;&#xA;int main(int argc, char** argv)&#xA;{&#xA;    const char* filename;&#xA;    const AVCodec* codec;&#xA;    AVFormatContext* formatCtx = NULL;&#xA;    AVCodecParserContext* parser;&#xA;    AVCodecContext* c = NULL;&#xA;    AVStream* videoStream = NULL;&#xA;    FILE* f;&#xA;    AVFrame* frame;&#xA;    uint8_t inbuf[INBUF_SIZE &#x2B; AV_INPUT_BUFFER_PADDING_SIZE];&#xA;    uint8_t* data;&#xA;    size_t   data_size;&#xA;    int ret;&#xA;    AVPacket* pkt;&#xA;&#xA;    filename = "D:\\test.mp4";&#xA;&#xA;    //if (avformat_open_input(&amp;formatCtx, filename, nullptr, nullptr) &lt; 0) {&#xA;    //    throw std::exception("Could not open source file");&#xA;    //}&#xA;&#xA;    //if (avformat_find_stream_info(formatCtx, nullptr) &lt; 0) {&#xA;    //    throw std::exception("Could not find stream information");&#xA;    //}&#xA;&#xA;    //videoStream = formatCtx->streams[0];&#xA;&#xA;&#xA;&#xA;    pkt = av_packet_alloc();&#xA;    if (!pkt)&#xA;        exit(1);&#xA;&#xA;    /* set end of buffer to 0 (this ensures that no overreading happens for damaged MPEG streams) */&#xA;    memset(inbuf &#x2B; INBUF_SIZE, 0, AV_INPUT_BUFFER_PADDING_SIZE);&#xA;&#xA;    /* find the MPEG-1 video decoder */&#xA;    //codec = avcodec_find_decoder(AV_CODEC_ID_MPEG1VIDEO);&#xA;    codec = avcodec_find_decoder(AV_CODEC_ID_H264);&#xA;    if (!codec) {&#xA;        fprintf(stderr, "Codec not found\n");&#xA;        exit(1);&#xA;    }&#xA;&#xA;    parser = av_parser_init(codec->id);&#xA;    if (!parser) {&#xA;        fprintf(stderr, "parser not found\n");&#xA;        exit(1);&#xA;    }&#xA;&#xA;    parser->flags = PARSER_FLAG_COMPLETE_FRAMES;&#xA;&#xA;    c = avcodec_alloc_context3(codec);&#xA;    if (!c) {&#xA;        fprintf(stderr, "Could not allocate video codec context\n");&#xA;        exit(1);&#xA;    }&#xA;&#xA;    /* For some codecs, such as msmpeg4 and mpeg4, width and height&#xA;       MUST be initialized there because this information is not&#xA;       available in the bitstream. */&#xA;&#xA;    //avcodec_parameters_to_context(c, videoStream->codecpar);&#xA;&#xA;       /* open it */&#xA;    if (avcodec_open2(c, codec, NULL) &lt; 0) {&#xA;        fprintf(stderr, "Could not open codec\n");&#xA;        exit(1);&#xA;    }&#xA;&#xA;    f = fopen(filename, "rb");&#xA;    if (!f) {&#xA;        fprintf(stderr, "Could not open %s\n", filename);&#xA;        exit(1);&#xA;    }&#xA;&#xA;    frame = av_frame_alloc();&#xA;    if (!frame) {&#xA;        fprintf(stderr, "Could not allocate video frame\n");&#xA;        exit(1);&#xA;    }&#xA;&#xA;    // ---- Use parser to get packets ----&#xA;    while (!feof(f)) {&#xA;        /* read raw data from the input file */&#xA;        data_size = fread(inbuf, 1, INBUF_SIZE, f);&#xA;        if (!data_size)&#xA;            break;&#xA;&#xA;        /* use the parser to split the data into frames */&#xA;        data = inbuf;&#xA;        while (data_size > 0) {&#xA;            ret = av_parser_parse2(parser, c, &amp;pkt->data, &amp;pkt->size, data, data_size, AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0);&#xA;            if (ret &lt; 0) {&#xA;                fprintf(stderr, "Error while parsing\n");&#xA;                exit(1);&#xA;            }&#xA;            data &#x2B;= ret;&#xA;            data_size -= ret;&#xA;&#xA;            if (pkt->size)&#xA;                decode(c, frame, pkt, outfilename);&#xA;        }&#xA;    }&#xA;&#xA;    // ---- Use FormatContext to get packets ----&#xA;    //  while (av_read_frame(fmt_ctx, pkt) == 0)&#xA;    //  {&#xA;    //      if (pkt->stream_index == AVMEDIA_TYPE_VIDEO) {&#xA;    //          if (pkt->size > 0)&#xA;    //              decode(cdc_ctx, frame, pkt, fp_out);&#xA;    //      }&#xA;    //  }&#xA;&#xA;    /* flush the decoder */&#xA;    decode(c, frame, NULL, outfilename);&#xA;&#xA;    fclose(f);&#xA;&#xA;    av_parser_close(parser);&#xA;    avcodec_free_context(&amp;c);&#xA;    av_frame_free(&amp;frame);&#xA;    av_packet_free(&amp;pkt);&#xA;&#xA;    return 0;&#xA;}&#xA;&#xA;void decode(AVCodecContext* dec_ctx, AVFrame* frame, AVPacket* pkt, const char* filename)&#xA;{&#xA;    char buf[1024];&#xA;    int ret;&#xA;&#xA;    ret = avcodec_send_packet(dec_ctx, pkt);&#xA;    if (ret &lt; 0) {&#xA;        char buff[255]{ 0 };&#xA;        std::string strError = av_make_error_string(buff, 255, ret);&#xA;        fprintf(stderr, "Error sending a packet for decoding\n");&#xA;        exit(1);&#xA;    }&#xA;&#xA;    while (ret >= 0) {&#xA;        ret = avcodec_receive_frame(dec_ctx, frame);&#xA;        if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)&#xA;            return;&#xA;        else if (ret &lt; 0) {&#xA;            fprintf(stderr, "Error during decoding\n");&#xA;            exit(1);&#xA;        }&#xA;&#xA;        printf("saving frame %3d\n", dec_ctx->frame_number);&#xA;        fflush(stdout);&#xA;        /* the picture is allocated by the decoder. no need to&#xA;           free it */&#xA;        // handle frame ...&#xA;    }&#xA;}&#xA;

    &#xA;

  • ffmpeg hls video recording timing information is inaccurate

    28 juin 2018, par Haris

    I am recording the rtsp stream in HLS format which is working fine with below command.

    ~/bin/ffmpeg -i rtsp://10.0.7.39:554/media/live/1/1 -c:a aac -c:v copy -hls_list_size 65535 -hls_time 2 live.m3u8

    But when I check the duration of each ts file with live.m3u8 file content the value is not accurate.

    Here is the live.m3u8

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:2
    #EXT-X-MEDIA-SEQUENCE:0
    #EXTINF:2.000000,
    live0.ts
    #EXTINF:2.000000,
    live1.ts
    #EXTINF:1.200000,
    live2.ts
    #EXTINF:2.500000,
    live3.ts
    #EXTINF:2.000000,
    live4.ts
    #EXTINF:2.600000,
    live5.ts
    #EXTINF:1.700000,
    live6.ts
    #EXT-X-ENDLIST

    And when I check the timing information of the ts file live2.ts using the command,

     ~/bin/ffprobe -i live2.ts -show_entries format=duration -v quiet -of csv="p=0"

    I am getting the value 2.136000 where as in m3u8 file it is 1.20000.

    I have build the latest FFMPEG based on official guild https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu.

    OS : Ubuntu 12.04

    ffmpeg Version

    $~/bin//ffmpeg -version


    ffmpeg version N-91369-g4ac88ba Copyright (c) 2000-2018 the FFmpeg developers
    built with gcc 4.8 (Ubuntu 4.8.1-2ubuntu1~12.04)
    configuration: --prefix=/home/haris/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/haris/ffmpeg_build/include --extra-ldflags=-L/home/haris/ffmpeg_build/lib --extra-libs='-lpthread -lm' --bindir=/home/haris/bin --enable-gpl --enable-libaom --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree
    libavutil      56. 18.102 / 56. 18.102
    libavcodec     58. 20.104 / 58. 20.104
    libavformat    58. 17.101 / 58. 17.101
    libavdevice    58.  4.101 / 58.  4.101
    libavfilter     7. 25.100 /  7. 25.100
    libswscale      5.  2.100 /  5.  2.100
    libswresample   3.  2.100 /  3.  2.100
    libpostproc    55.  2.100 / 55.  2.100

    Note

    If I tested the same command in Ubuntu 16.04 where ffmpeg installed with apt-get every thing works fine.

    Here is the ffmpeg details

    $ ~/bin/ffmpeg -version
    ffmpeg version 2.8.14-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
    built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609
    configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
    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
    libavresample   2.  1.  0 /  2.  1.  0
    libswscale      3.  1.101 /  3.  1.101
    libswresample   1.  2.101 /  1.  2.101
    libpostproc    53.  3.100 / 53.  3.100

    What could be the cause, any help will be appreciated.