Recherche avancée

Médias (91)

Autres articles (46)

  • MediaSPIP version 0.1 Beta

    16 avril 2011, par

    MediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • MediaSPIP 0.1 Beta version

    25 avril 2011, par

    MediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
    The zip file provided here only contains the sources of MediaSPIP in its standalone version.
    To get a working installation, you must manually install all-software dependencies on the server.
    If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)

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

Sur d’autres sites (3726)

  • Why Matomo is the top Google Analytics alternative

    17 juin, par Joe

    You probably made the switch to Google Analytics 4 (GA4) when Google stopped collecting Universal Analytics (UA) data in July 2023. Up to that point, UA had long been the default analytics platform, despite its many limitations. 

    This was mostly because everyone loved its free nature and simple setup. A Google account was all you needed — even a free legacy G-Suite account worked perfectly. Looking at the analytics for just about any website was easy.

    That all changed with GA4, which addressed many of UA’s shortcomings by introducing a completely new way to model website data. Unfortunately, this also meant you couldn’t transfer historical data from UA into GA4, leading to more criticism. 

    Then there’s the added cost. GA4 is still free, but its limited functionality encourages you to upgrade to the enterprise version, Google Analytics 360 (GA360). Sure, you get lots of great functionality, less data sampling, and longer data retention periods, but it comes at a hefty price — $50,000 per year, to be exact.

    There are other options, though, and Matomo Analytics is one of the best. It’s an open-source, privacy-centric platform that offers advanced features of GA360 and more. 

    In this article, we’ll compare GA4, GA360, and Matomo and give you what you need to make an informed decision.

    Google Analytics 4 in a nutshell

    Google Analytics 4 is a great tool to use to start learning about web analytics. But soon enough, you’ll likely find that GA4 doesn’t quite cover all of your needs. 

    For example, it can’t provide a detailed view of user experiences, and Google doesn’t offer dedicated support or onboarding. There are other shortcomings, too.

    Data sampling

    Google only processes a selected sample of website activity rather than every individual data point. Rather than looking at the whole picture, it sets a threshold and selects a [hopefully] representative sample for analysis. 

    This inevitably creates gaps in data. Google attempts to fill them in using AI and machine learning, inferring the rest from data patterns. Since the results rely on assumptions and estimates, they aren’t always precise.

    In practical terms, this means that the accuracy of GA4 analysis will likely decline as website traffic increases.

    A graphic illustration of how data sampling works

    (Image source)

    Data collection limits

    GA4’s 25 million monthly events limit seems like a lot, but they add up quickly. 

    All user interactions are recorded as events, including :

    • Session start : User visits the site.
    • Page view : User loads a page (tracked automatically).
    • First visit : User accesses the site for the first time.
    • User engagement : User stays on a page for a set time period.
    • Scroll : User scrolls past 90% of the page (enhanced measurement).
    • Click : User clicks on any element (links, buttons, etc.).
    • Video start/complete : User starts or completes a video (enhanced measurement).
    • File download : User downloads a file (enhanced measurement).

    For context, consider a website averaging 50 events per session per user. If every user logs on every third day, on average, you’ll need 10,000 individual visitors a month to reach that 25 million. But that’s not the problem. 

    The problem is that collection limits in GA4 affect your ability to capture, secure, and analyse customer data effectively.

    Customisation

    GA4 users also face configuration limits that restrict their customisation options. For example : 

    • Audience limits : Since only 100 audiences are allowed, it’s necessary to combine or optimise segments rather than track too many small groups. 
    • Retention limits : Data retention is limited to only 14 months, so external storage solutions may be necessary in situations where historical data needs to be preserved.
    • Conversion events : GA4 will only track up to 30 conversion events, so it’s best to focus on high-value interactions (e.g., purchases and lead form submissions). 
    • Event-scoped dimensions : Since e-commerce operations are limited to 50 event-scoped dimensions, they need to carefully consider custom dimensions and key metrics. This makes it important to be selective about which product details to track (color, size, discount code, etc.).

    Data privacy

    GA4 isn’t GDPR-compliant out of the box. In fact, Google Analytics 4 is banned in seven EU countries because they believe the way it collects and transfers data violates GDPR.

    Data privacy regulations may or may not be a big concern, depending on where your customers are. However, if some are in the UK or any of the 30 countries that make up the European Economic Area (EEA), you must comply with the General Data Protection Regulation (GDPR). 

    It tells your customers that you don’t respect their data if you don’t. It can also get very expensive.

    Limited attribution models

    Attribution models track how different marketing touchpoints lead to a conversion (such as a purchase, sign-up, or lead generation). They help businesses understand which marketing channels and strategies are most effective in driving results.

    GA4 supports only two of the six standard attribution models previously supported in Universal Analytics. Organisations wanting data-driven or last-click attribution models will find them in Google Analytics. But they’ll need to look elsewhere if they’re going to use any of these models :

    • First click attribution
    • Linear attribution
    • Time decay attribution
    • Position-based attribution (u-shaped)

    GA360 isn’t a solution either

    Fundamentally, GA360 is the same product as GA4, without the above limits and restrictions. For companies that pay $50,000 (or more) each year, the only changes involve how much data is collected, how long it stays and data sampling thresholds.

    Above all, the GDPR-compliance issue remains. That can be a real problem for organisations with operations that collect personal data in the EEA or the UK.

    And the problem could soon be much bigger than just those 31 countries. Many countries currently implementing data privacy laws are modelling their efforts on GDPR, which may rule out both GA4 and GA360.

    Image of user customising an Matomo report and view

    What makes Matomo the top alternative ?

    No data limits

    One way to overcome all these challenges is to switch to Matomo Analytics. 

    There’s no data sampling and no data collection limits whatsoever with on-premise implementation. Matomo also supports all six attribution models, is open source and fully customisable and complies with GDPR out of the box. 

    Imagine trying to change your business strategy or marketing campaigns if you’re not confident that your data is reliable and accurate.

    It’s no secret that data sampling can negatively affect the accuracy of the data, and inaccurate data can lead to poor decision-making.

    With Matomo, there are no limits. We don’t restrict the size of containers within the Tag Manager nor the number of containers or tags within each container. You have more control over your customers’ data. 

    And you get to make your decisions based on all that data. That’s important because data quality is critical for high-impact decisions. 

    Open source

    Open-source software allows anyone to inspect, audit, and improve the source code for security and efficiency. That means no hidden data collection, faster bug fixes, and no vendor lock-in. As a bonus, these things make complying with data privacy laws and regulations easier.

    Matomo can also be modified in any way, which provides unlimited customisation possibilities. There’s also a very active developer community around Matomo, so you don’t have to make changes yourself — you can hire someone who has the technical knowledge and expertise. They can : 

    • Modify tracking scripts for advanced analytics
    • Create custom attribution models, tracking methods and dashboards
    • Integrate Matomo with any system (CRM, eCommerce, CMS, etc.)

    Data ownership

    Matomo’s open-source nature also means full data ownership. No third parties can access the data, and there’s no risk of Google using that data for ads or AI training. Furthermore, Matomo follows privacy-first tracking principles, meaning that there’s :

    • No third-party data sharing
    • Full user consent control
    • Support for cookie-less tracking
    • IP Anonymisation, by default
    • Do Not Track (DNT) support

    All of that underlines the fact that Matomo collects, stores, and tracks data 100% ethically.

    On-premise and cloud-based options

    You can use the Matomo On-Premise web analytics solution if local data privacy laws require that you store data locally. Here’s a helpful tip : many of them do. However, this might not be necessary. 

    Due to GDPR, several countries recognise the EEA as an acceptable storage location for their citizens’ data. That means servers hosted in any of those 30 countries are already compliant in terms of data location. 

    Alternatively, you could embrace modernity and choose Matomo Cloud — our servers are also in Europe. While GA4 and GA360 are cloud-based, Google’s servers are in the US, and that’s a big problem for GDPR.

    Image of a map of Europe overlaid with the universal symbol for data storage.

    Comprehensive analytics

    If you need a sophisticated web analytics platform that offers full control of your data and you have privacy concerns, Matomo is a solid choice. 

    It has built-in behavioural analytics features like HeatmapsScroll Depth and Session Recording. These tools allow you to collect and analyse data without relying on cookies or resorting to data sampling.

    Those standout features can’t be found in GA4 or GA360. Google also doesn’t offer an on-premise solution.

    The one area where Matomo can’t compete with Google Analytics is in its tight integration with the Google ecosystem : Google Ads, Gemini and Firebase. 

    Key things to consider before switching to Matomo

    There are pros and cons to switching from GA4 (or even GA360) to Matomo. That’s because no software is perfect. There are always tradeoffs somewhere. With Matomo, there are a few things to consider before switching :

    • Learning curve. Matomo is a full-featured analytics platform with many advanced features (session replay, custom event tracking, etc.). That can overwhelm new users and take time to understand well enough to maximise the benefits.
    • Technical resources. Choosing a Matomo On-Premise solution requires technical resources, such as a server and skills.
    • Third-party integration. Matomo provides pre-built integration tools for about a hundred platforms. However, it’s open source, so technical resources are required. On the plus side, it does make it possible to add to the list of APIs and connectors.

    Head-to-head : GA4 vs GA360 vs Matomo

    It’s always helpful to look at how different products stack up in terms of features and capabilities :

    GA4GA360Matomo
    Data ownership  
    Event-based data
    Session-based data  
    Unsampled data  
    Real-time data
    Heatmaps  
    Session recordings  
    A/B testing  
    Open source  
    On-premise hosting  
    Data privacySubject to Google’s data policiesSubject to Google’s data policiesGDPR, CCPA compliant ; full control over data storage
    Custom dimensionsYes (limited in free version)Yes (higher limits)Yes (unlimited in self-hosted)
    Attribution modelsLast click, data-drivenLast click, data-driven, advanced Google Ads integrationLast click, first click, linear, time decay, position-based, custom
    Data retentionUp to 14 months (free)Up to 50 monthsUnlimited (self-hosted)
    IntegrationsGoogle Ads, Search Console, BigQuery (limited in free version)Advanced integrations (Google Ads, BigQuery, Salesforce, etc.)100+ integrations (Google Ads, WordPress, Shopify, etc.)
    BigQuery exportFree (limited to 1M events/day)Free (unlimited)Paid add-on (via plugin)
    Custom reportsLimited customisationAdvanced customisationFully customisable
    ScalabilitySuitable for small to medium businessesDesigned for large enterprisesScalable without limits (self-hosted or cloud)
    Ease of useSimple, requires onboardingSteeper learning curveFlexible, setup-intensive.
    PricingFreePremium (starts at $50,000/year)Free open-source (self-hosted) ; Cloud starts at $29/month

    So, is Matomo the right solution for you ?

    That’d be a ‘yes’ if you want a Google Analytics alternative that ticks all these boxes :

    • Complies natively with privacy laws and regulations
    • Offers real-time data and custom event tracking
    • Enables a deeper understanding of user behaviour
    • Allows you to fine-tune user experiences
    • Provides full control over your customers’ data
    • Offers conversion funnels, session recordings and heatmaps
    • Has session replay to trace user interactions
    • Includes plenty of readily actionable insights

    Find out why millions of websites trust Matomo

    Matomo is an easy-to-use, all-in-one web analytics tool with advanced behavioural analytics functionality.

    It’ll also help you future-proof your business because it supports compliance with global privacy laws in 162 countries. With an ethical alternative like Matomo, you don’t need to risk your business or customers’ private data.

    It’s not just about avoiding fines. It’s also about building trust with your customers. That’s why you need a privacy-focused, ethical solution like Matomo. 

    See for yourself : download Matomo On-Premise today, or start your 21-day free trial of Matomo Cloud (no credit card required).

  • ffmpeg produces duplicate pts with "wallclock_as_timestamps 1" option on MKV

    15 avril 2024, par Jax2171

    I need to get real time reference of every keyframe captured by an IP camera. The -wallclock_as_timestamps 1 option seems to do the trick for us, however we are forced to replace the TS output container with MKV to get a correct PTS epoch value 1712996356.833000.

    


    Here is the ffmpeg command used :

    


    ffmpeg -report -use_wallclock_as_timestamps 1 -rtsp_transport tcp -i rtsp://user:password1@192.168.5.21/cam/realmonitor?channel=1channel1[1]=1subtype=0 -c:v copy -c:a aac -copyts -f matroska -y rec.mkv


    


    The capture process runs without any relevant worning or error messages.

    


    However, playing the captured video with any player shows very short and evident but very annoying lags. Upon investigation I discovered that many frame PTSs have the same value. The command I used to show duplicate PTSs is as follows :

    


    ffprobe -v error -show_entries frame=pkt_pts_time -select_streams v -of csv=p=0 rec.mkv | sort | uniq -d


    


    On a recording of about 10 minutes the result of the duplicate PTS is the following :

    


    1713086493.367000
1713086493.368000
1713086493.370000
1713086493.372000
1713086543.714000
1713086558.793000
1713086558.817000
1713086558.872000
1713086561.780000
1713086564.642000
1713086564.657000
1713086564.778000
1713086565.794000
...


    


    I'm not sure if the lag problem is caused by this, however the problem does not occur with the TS container, which however I cannot use due to the PTS values being roundly 33 bit.

    


    The -vsync 0 or -vsync 2 options on input or output didn't help.

    


    This is the log using the -report option :

    


        ffmpeg started on 2024-04-15 at 09:04:38
Report written to "ffmpeg-20240415-090438.log"
Log level: 48
Command line:
ffmpeg -report -stats -hide_banner -use_wallclock_as_timestamps 1 -rtsp_transport tcp -i "rtsp://user:password1@192.168.5.21/cam/realmonitor?channel=1channel1[1]=1subtype=0" -c:v copy -c:a aac -copyts -f matroska -y rec.mkv
Splitting the commandline.
Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
Reading option '-stats' ... matched as option 'stats' (print progress report during encoding) with argument '1'.
Reading option '-hide_banner' ... matched as option 'hide_banner' (do not show program banner) with argument '1'.
Reading option '-use_wallclock_as_timestamps' ... matched as AVOption 'use_wallclock_as_timestamps' with argument '1'.
Reading option '-rtsp_transport' ... matched as AVOption 'rtsp_transport' with argument 'tcp'.
Reading option '-i' ... matched as input url with argument 'rtsp://user:password1@192.168.5.21/cam/realmonitor?channel=1channel1[1]=1subtype=0'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'copy'.
Reading option '-c:a' ... matched as option 'c' (codec name) with argument 'aac'.
Reading option '-copyts' ... matched as option 'copyts' (copy timestamps) with argument '1'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'matroska'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option 'rec.mkv' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option report (generate a report) with argument 1.
Applying option stats (print progress report during encoding) with argument 1.
Applying option hide_banner (do not show program banner) with argument 1.
Applying option copyts (copy timestamps) with argument 1.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url rtsp://user:password1@192.168.5.21/cam/realmonitor?channel=1channel1[1]=1subtype=0.
Successfully parsed a group of options.
Opening an input file: rtsp://user:password1@192.168.5.21/cam/realmonitor?channel=1channel1[1]=1subtype=0.
[tcp @ 0x1646660] No default whitelist set
[tcp @ 0x1646660] Original list of addresses:
[tcp @ 0x1646660] Address 192.168.5.21 port 554
[tcp @ 0x1646660] Interleaved list of addresses:
[tcp @ 0x1646660] Address 192.168.5.21 port 554
[tcp @ 0x1646660] Starting connection attempt to 192.168.5.21 port 554
[tcp @ 0x1646660] Successfully connected to 192.168.5.21 port 554
[rtsp @ 0x1645e70] SDP:
v=0
o=- 2251950012 2251950012 IN IP4 0.0.0.0
s=Media Server
c=IN IP4 0.0.0.0
t=0 0
a=control:*
a=packetization-supported:DH
a=rtppayload-supported:DH
a=range:npt=now-
a=x-packetization-supported:IV
a=x-rtppayload-supported:IV
m=video 0 RTP/AVP 96
a=control:trackID=0
a=framerate:25.000000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=4D4028;sprop-parameter-sets=Z01AKKaAeAIn5ZuAgICgAAADACAAAAZQgAA=,aO48gAA=
a=recvonly
m=audio 0 RTP/AVP 97
a=control:trackID=1
a=rtpmap:97 MPEG4-GENERIC/16000
a=fmtp:97 streamtype=5;profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1408
a=recvonly

[rtsp @ 0x1645e70] video codec set to: h264
[rtsp @ 0x1645e70] RTP Packetization Mode: 1
[rtsp @ 0x1645e70] RTP Profile IDC: 4d Profile IOP: 40 Level: 28
[rtsp @ 0x1645e70] Extradata set to 0x164af98 (size: 39)
[rtsp @ 0x1645e70] audio codec set to: aac
[rtsp @ 0x1645e70] audio samplerate set to: 16000
[rtsp @ 0x1645e70] audio channels set to: 1
[rtsp @ 0x1645e70] setting jitter buffer size to 0
[rtsp @ 0x1645e70] setting jitter buffer size to 0
[rtsp @ 0x1645e70] hello state=0
Failed to parse interval end specification ''
[h264 @ 0x164ab30] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 8(PPS), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 8(PPS), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 8(PPS), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 5(IDR), nal_ref_idc: 3
[h264 @ 0x164ab30] Format yuvj420p chosen by get_format().
[h264 @ 0x164ab30] Reinit context to 1920x1088, pix_fmt: yuvj420p
[h264 @ 0x164ab30] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3
[h264 @ 0x164ab30] nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 3
[rtsp @ 0x1645e70] All info found
Input #0, rtsp, from 'rtsp://user:password1@192.168.5.21/cam/realmonitor?channel=1channel1[1]=1subtype=0':
  Metadata:
    title           : Media Server
  Duration: N/A, start: 1713164678.794625, bitrate: N/A
    Stream #0:0, 22, 1/90000: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1920x1080, 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:1, 15, 1/16000: Audio: aac (LC), 16000 Hz, mono, fltp
Successfully opened the file.
Parsing a group of options: output url rec.mkv.
Applying option c:v (codec name) with argument copy.
Applying option c:a (codec name) with argument aac.
Applying option f (force format) with argument matroska.
Successfully parsed a group of options.
Opening an output file: rec.mkv.
[file @ 0x1699f30] Setting default whitelist 'file,crypto,data'
Successfully opened the file.
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:1 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
detected 4 logical cores
[graph_0_in_0_1 @ 0x1682bb0] Setting 'time_base' to value '1/16000'
[graph_0_in_0_1 @ 0x1682bb0] Setting 'sample_rate' to value '16000'
[graph_0_in_0_1 @ 0x1682bb0] Setting 'sample_fmt' to value 'fltp'
[graph_0_in_0_1 @ 0x1682bb0] Setting 'channel_layout' to value '0x4'
[graph_0_in_0_1 @ 0x1682bb0] tb:1/16000 samplefmt:fltp samplerate:16000 chlayout:0x4
[format_out_0_1 @ 0x187f2e0] Setting 'sample_fmts' to value 'fltp'
[format_out_0_1 @ 0x187f2e0] Setting 'sample_rates' to value '96000|88200|64000|48000|44100|32000|24000|22050|16000|12000|11025|8000|7350'
[AVFilterGraph @ 0x164fd70] query_formats: 4 queried, 9 merged, 0 already done, 0 delayed
[matroska @ 0x169c330] get_metadata_duration returned: 0
Output #0, matroska, to 'rec.mkv':
  Metadata:
    title           : Media Server
    encoder         : Lavf58.45.100
    Stream #0:0, 0, 1/1000: Video: h264 (Main) (H264 / 0x34363248), yuvj420p(pc, bt709, progressive), 1920x1080, q=2-31, 25 fps, 25 tbr, 1k tbn, 90k tbc
    Stream #0:1, 0, 1/1000: Audio: aac (LC) ([255][0][0][0] / 0x00FF), 16000 Hz, mono, fltp, 69 kb/s
    Metadata:
      encoder         : Lavc58.91.100 aac
cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:1 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
[matroska @ 0x169c330] Starting new cluster with timestamp 1713164678731 at offset 770 bytes
[matroska @ 0x169c330] Writing block of size 581 with pts 1713164678731, dts 1713164678731, duration 64 at relative offset 14 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 517 with pts 1713164678795, dts 1713164678795, duration 64 at relative offset 602 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 376900 with pts 1713164678872, dts 1713164678872, duration 40 at relative offset 1126 in cluster at offset 770. TrackNumber 1, keyframe 1
[matroska @ 0x169c330] Writing block of size 8172 with pts 1713164678912, dts 1713164678912, duration 40 at relative offset 378034 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 672 with pts 1713164678912, dts 1713164678912, duration 64 at relative offset 386213 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 550 with pts 1713164679177, dts 1713164679177, duration 64 at relative offset 386892 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7654 with pts 1713164679178, dts 1713164679178, duration 40 at relative offset 387449 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 7483 with pts 1713164679213, dts 1713164679213, duration 40 at relative offset 395110 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 7703 with pts 1713164679242, dts 1713164679242, duration 40 at relative offset 402600 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 565 with pts 1713164679242, dts 1713164679242, duration 64 at relative offset 410310 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7650 with pts 1713164679271, dts 1713164679271, duration 40 at relative offset 410882 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 585 with pts 1713164679271, dts 1713164679271, duration 64 at relative offset 418539 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 8682 with pts 1713164679301, dts 1713164679301, duration 40 at relative offset 419131 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 8888 with pts 1713164679330, dts 1713164679330, duration 40 at relative offset 427820 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 506 with pts 1713164679330, dts 1713164679330, duration 64 at relative offset 436715 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 8019 with pts 1713164679360, dts 1713164679360, duration 40 at relative offset 437228 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 7919 with pts 1713164679361, dts 1713164679361, duration 40 at relative offset 445254 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 7822 with pts 1713164679361, dts 1713164679361, duration 40 at relative offset 453180 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 699 with pts 1713164679361, dts 1713164679361, duration 64 at relative offset 461009 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 619 with pts 1713164679361, dts 1713164679361, duration 64 at relative offset 461715 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7768 with pts 1713164679362, dts 1713164679362, duration 40 at relative offset 462341 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 8469 with pts 1713164679362, dts 1713164679362, duration 40 at relative offset 470116 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 601 with pts 1713164679362, dts 1713164679362, duration 64 at relative offset 478592 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 559 with pts 1713164679363, dts 1713164679363, duration 64 at relative offset 479200 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 8265 with pts 1713164679366, dts 1713164679366, duration 40 at relative offset 479766 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 7766 with pts 1713164679406, dts 1713164679406, duration 40 at relative offset 488038 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 531 with pts 1713164679415, dts 1713164679415, duration 64 at relative offset 495811 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7753 with pts 1713164679446, dts 1713164679446, duration 40 at relative offset 496349 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 8274 with pts 1713164679486, dts 1713164679486, duration 40 at relative offset 504109 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 569 with pts 1713164679496, dts 1713164679496, duration 64 at relative offset 512390 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 8445 with pts 1713164679526, dts 1713164679526, duration 40 at relative offset 512966 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 522 with pts 1713164679535, dts 1713164679535, duration 64 at relative offset 521418 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7922 with pts 1713164679566, dts 1713164679566, duration 40 at relative offset 521947 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 7954 with pts 1713164679606, dts 1713164679606, duration 40 at relative offset 529876 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 503 with pts 1713164679615, dts 1713164679615, duration 64 at relative offset 537837 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 11167 with pts 1713164679646, dts 1713164679646, duration 40 at relative offset 538347 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 503 with pts 1713164679655, dts 1713164679655, duration 64 at relative offset 549521 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 10534 with pts 1713164679686, dts 1713164679686, duration 40 at relative offset 550031 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 7607 with pts 1713164679726, dts 1713164679726, duration 40 at relative offset 560572 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 478 with pts 1713164679772, dts 1713164679772, duration 64 at relative offset 568186 in cluster at offset 770. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7842 with pts 1713164679774, dts 1713164679774, duration 40 at relative offset 568671 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 9862 with pts 1713164679806, dts 1713164679806, duration 40 at relative offset 576520 in cluster at offset 770. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Starting new cluster with timestamp 1713164679815 at offset 587166 bytes
[matroska @ 0x169c330] Writing block of size 449 with pts 1713164679815, dts 1713164679815, duration 64 at relative offset 14 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 379456 with pts 1713164679870, dts 1713164679870, duration 40 at relative offset 470 in cluster at offset 587166. TrackNumber 1, keyframe 1
[matroska @ 0x169c330] Writing block of size 415 with pts 1713164679903, dts 1713164679903, duration 64 at relative offset 379934 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7008 with pts 1713164679905, dts 1713164679905, duration 40 at relative offset 380356 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 6917 with pts 1713164679925, dts 1713164679925, duration 40 at relative offset 387371 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 513 with pts 1713164679935, dts 1713164679935, duration 64 at relative offset 394295 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7111 with pts 1713164679966, dts 1713164679966, duration 40 at relative offset 394815 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 753 with pts 1713164679975, dts 1713164679975, duration 64 at relative offset 401933 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7091 with pts 1713164680006, dts 1713164680006, duration 40 at relative offset 402693 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 7045 with pts 1713164680045, dts 1713164680045, duration 40 at relative offset 409791 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 659 with pts 1713164680055, dts 1713164680055, duration 64 at relative offset 416843 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6983 with pts 1713164680086, dts 1713164680086, duration 40 at relative offset 417509 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 6932 with pts 1713164680127, dts 1713164680127, duration 40 at relative offset 424499 in cluster at offset 587166. TrackNumber 1, keyframe 0
frame=   35 fps=0.0 q=-1.0 size=     512kB time=475879:04:40.20 bitrate=   0.0kbits/s speed=3.35e+09x    
[matroska @ 0x169c330] Writing block of size 691 with pts 1713164680135, dts 1713164680135, duration 64 at relative offset 431438 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6990 with pts 1713164680166, dts 1713164680166, duration 40 at relative offset 432136 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 651 with pts 1713164680176, dts 1713164680176, duration 64 at relative offset 439133 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7046 with pts 1713164680206, dts 1713164680206, duration 40 at relative offset 439791 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 7130 with pts 1713164680246, dts 1713164680246, duration 40 at relative offset 446844 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 601 with pts 1713164680255, dts 1713164680255, duration 64 at relative offset 453981 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 7205 with pts 1713164680286, dts 1713164680286, duration 40 at relative offset 454589 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 561 with pts 1713164680295, dts 1713164680295, duration 64 at relative offset 461801 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6936 with pts 1713164680326, dts 1713164680326, duration 40 at relative offset 462369 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 6822 with pts 1713164680366, dts 1713164680366, duration 40 at relative offset 469312 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 621 with pts 1713164680375, dts 1713164680375, duration 64 at relative offset 476141 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6845 with pts 1713164680405, dts 1713164680405, duration 40 at relative offset 476769 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 6848 with pts 1713164680445, dts 1713164680445, duration 40 at relative offset 483621 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 588 with pts 1713164680455, dts 1713164680455, duration 64 at relative offset 490476 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6828 with pts 1713164680486, dts 1713164680486, duration 40 at relative offset 491071 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 546 with pts 1713164680495, dts 1713164680495, duration 64 at relative offset 497906 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6845 with pts 1713164680526, dts 1713164680526, duration 40 at relative offset 498459 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 6924 with pts 1713164680566, dts 1713164680566, duration 40 at relative offset 505311 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 508 with pts 1713164680576, dts 1713164680576, duration 64 at relative offset 512242 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6844 with pts 1713164680606, dts 1713164680606, duration 40 at relative offset 512757 in cluster at offset 587166. TrackNumber 1, keyframe 0
frame=   48 fps= 47 q=-1.0 size=     512kB time=475879:04:40.72 bitrate=   0.0kbits/s speed=1.66e+09x    
[matroska @ 0x169c330] Writing block of size 587 with pts 1713164680615, dts 1713164680615, duration 64 at relative offset 519608 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6859 with pts 1713164680645, dts 1713164680645, duration 40 at relative offset 520202 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 6855 with pts 1713164680686, dts 1713164680686, duration 40 at relative offset 527068 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 573 with pts 1713164680695, dts 1713164680695, duration 64 at relative offset 533930 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6881 with pts 1713164680726, dts 1713164680726, duration 40 at relative offset 534510 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 10773 with pts 1713164680766, dts 1713164680766, duration 40 at relative offset 541398 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 520 with pts 1713164680775, dts 1713164680775, duration 64 at relative offset 552178 in cluster at offset 587166. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6923 with pts 1713164680805, dts 1713164680805, duration 40 at relative offset 552705 in cluster at offset 587166. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Starting new cluster with timestamp 1713164680815 at offset 1146808 bytes
[matroska @ 0x169c330] Writing block of size 580 with pts 1713164680815, dts 1713164680815, duration 64 at relative offset 14 in cluster at offset 1146808. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 380085 with pts 1713164680864, dts 1713164680864, duration 40 at relative offset 601 in cluster at offset 1146808. TrackNumber 1, keyframe 1
[matroska @ 0x169c330] Writing block of size 9916 with pts 1713164680896, dts 1713164680896, duration 40 at relative offset 380694 in cluster at offset 1146808. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 541 with pts 1713164680901, dts 1713164680901, duration 64 at relative offset 390617 in cluster at offset 1146808. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 5877 with pts 1713164680925, dts 1713164680925, duration 40 at relative offset 391165 in cluster at offset 1146808. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] Writing block of size 529 with pts 1713164680935, dts 1713164680935, duration 64 at relative offset 397049 in cluster at offset 1146808. TrackNumber 2, keyframe 1
[matroska @ 0x169c330] Writing block of size 6661 with pts 1713164680966, dts 1713164680966, duration 40 at relative offset 397585 in cluster at offset 1146808. TrackNumber 1, keyframe 0
[matroska @ 0x169c330] end duration = 1713164681006
[matroska @ 0x169c330] stream 0 end duration = 1713164681006
[matroska @ 0x169c330] stream 1 end duration = 1713164680999
frame=   54 fps= 42 q=-1.0 Lsize=    1515kB time=475879:04:40.99 bitrate=   0.0kbits/s speed=1.33e+09x    
video:1493kB audio:20kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.099897%
Input file #0 (rtsp://user:password1@192.168.5.21/cam/realmonitor?channel=1channel1[1]=1subtype=0):
  Input stream #0:0 (video): 54 packets read (1529156 bytes); 
  Input stream #0:1 (audio): 35 packets read (9268 bytes); 35 frames decoded (35840 samples); 
  Total: 89 packets (1538424 bytes) demuxed
Output file #0 (rec.mkv):
  Output stream #0:0 (video): 54 packets muxed (1529156 bytes); 
  Output stream #0:1 (audio): 35 frames encoded (35840 samples); 36 packets muxed (20446 bytes); 
  Total: 90 packets (1549602 bytes) muxed
35 frames successfully decoded, 0 decoding errors
[AVIOContext @ 0x1667620] Statistics: 2 seeks, 7 writeouts
[aac @ 0x1673880] Qavg: 142.738
Exiting normally, received signal 15.


    


    In this short 3 second capture the duplicate timestamps are 1713164679.361000 and 1713164679.362000.

    


    How can I solve this problem ? What different approach could I use to achieve this goal ?

    


    Thanks in advance.

    


  • CCPA vs GDPR : Understanding Their Impact on Data Analytics

    19 mars, par Alex Carmona

    With over 400 million internet users in Europe and 331 million in the US (11% of which reside in California alone), understanding the nuances of privacy laws like the General Data Protection Regulation (GDPR) and the California Consumer Privacy Act (CCPA) is crucial for compliant and ethical consumer data collection.

    Navigating this compliance landscape can be challenging for businesses serving European and Californian markets.

    This guide explores the key differences between CCPA and GDPR, their impact on data analytics, and how to ensure your business meets these essential privacy requirements.

    What is the California Consumer Privacy Act (CCPA) ?

    The California Consumer Privacy Act (CCPA) is a data privacy law that gives California consumers control over their personal information. It applies to for-profit businesses operating in California that meet specific criteria related to revenue, data collection and sales.

    Origins and purpose

    The CCPA addresses growing concerns about data privacy and how businesses use personal information in California. The act passed in 2018 and went into effect on 1 January 2020.

    Key features

    • Grants consumers the right to know what personal information is collected
    • Provides the right to delete personal information
    • Allows consumers to opt out of the sale of their personal information
    • Prohibits discrimination against consumers who exercise their CCPA rights

    Key definitions under the CCPA framework

    • Business : A for-profit entity doing business in California and meeting one or more of these conditions :
      • Has annual gross revenues over $25 million ;
      • Buys, receives, sells or shares 50,000 or more consumers’ personal information ; or
      • Derives 50% or more of its annual revenues from selling consumers’ personal information
    • Consumer : A natural person who is a California resident
    • Personal Information : Information that could be linked to, related to or used to identify a consumer or household, such as online identifiers, IP addresses, email addresses, social security numbers, cookie identifiers and more

    What is the General Data Protection Regulation (GDPR) ?

    The General Data Protection Regulation (GDPR) is a data privacy and protection law passed by the European Union (EU). It’s one of the strongest and most influential data privacy laws worldwide and applies to all organisations that process the personal data of individuals in the EU.

    Origins and purpose

    The GDPR was passed in 2016 and went into effect on 25 May 2018. It aims to harmonise data privacy laws in Europe and give people in the European Economic Area (EEA) privacy rights and control over their data.

    Key features

    • Applies to all organisations that process the personal data of individuals in the EEA
    • Grants individuals a wide range of privacy rights over their data
    • Requires organisations to obtain explicit and informed consent for most data processing
    • Mandates appropriate security measures to protect personal data
    • Imposes significant fines and penalties for non-compliance

    Key definitions under the GDPR framework

    • Data Subject : An identified or identifiable person
    • Personal Data : Any information relating to a data subject
    • Data Controller : The entity or organisation that determines how personal data is processed and what for
    • Data Processor : The entity or organisation that processes the data on behalf of the controller

    CCPA vs. GDPR : Key similarities

    The CCPA and GDPR enhance consumer privacy rights and give individuals greater control over their data.

    DimensionCCPAGDPR
    PurposeProtect consumer privacyProtect individual data rights
    Key RightsRight to access, delete and opt out of saleRight to access, rectify, erase and restrict processing
    TransparencyRequires transparency around data collection and useRequires transparency about data collection, processing and use

    CCPA vs. GDPR : Key differences

    While they have similar purposes, the CCPA and GDPR differ significantly in their scope, approach and specific requirements.

    DimensionCCPAGDPR
    ScopeFor-profit businesses onlyAll organisations processing EU consumer data
    Territorial ReachCalifornia-based natural personsAll data subjects within the EEA
    ConsentOpt-out systemOpt-in system
    PenaltiesPer violation based on its intentional or negligent natureCase-by-case based on comprehensive assessment
    Individual RightsNarrower (relative to GDPR)Broader (relative to CCPA)

    CCPA vs. GDPR : A multi-dimensional comparison

    The previous sections gave a broad overview of the similarities and differences between CCPA and GDPR. Let’s now examine nine key dimensions where these regulations converge or diverge and discuss their impact on data analytics.

    Regulatory overlap between GDPR and CCPA.

    #1. Scope and territorial reach

    The GDPR has a much broader scope than the CCPA. It applies to all organisations that process the personal data of individuals in the EEA, regardless of their business model, purpose or physical location.

    The CCPA applies to medium and large for-profit businesses that derive a substantial portion of their earnings from selling Californian consumers’ personal information. It doesn’t apply to non-profits, government agencies or smaller for-profit companies.

    Impact on data analytics

    The difference in scope significantly impacts data analytics practices. Smaller businesses may not need to comply with either regulation, some may only need to follow the CCPA, while most global businesses must comply with both. This often requires different methods for collecting and processing data in California, Europe, and elsewhere.

    #2. Penalties and fines for non-compliance

    Both the CCPA and GDPR impose penalties for non-compliance, but the severity of fines differs significantly :

    CCPAMaximum penalty
    $2,500 per unintentional violation
    $7,500 per intentional violation

    “Per violation” means per violation per impacted consumer. For example, three intentional CCPA violations affecting 1,000 consumers would result in 3,000 total violations and a $22.5 million maximum penalty (3,000 × $7,500).

    The largest CCPA fine to date was Zoom’s $85 million settlement in 2021.

    In contrast, the GDPR has resulted in 2,248 fines totalling almost €6.6 billion since 2018 — €2.4 billion of which were for non-compliance.

    GDPRMaximum penalty
    €20 million or
    4% of all revenue earned the previous year

    So far, the biggest fine imposed under the GDPR was Meta’s €1.2 billion fine in May 2023 — 15 times more than Zoom had to pay California.

    Impact on data analytics

    The significant difference in potential fines demonstrates the importance of regulatory compliance for data analytics professionals. Non-compliance can have severe financial consequences, directly affecting budget allocation and business operations.

    Businesses must ensure their data collection, storage and processing practices comply with regulations in both Europe and California.

    Choosing privacy-first, compliance-ready analytics platforms like Matomo is instrumental for mitigating non-compliance risks.

    #3. Data subject rights and consumer rights

    The CCPA and GDPR give people similar rights over their data, but their limitations and details differ.

    Rights common to the CCPA and GDPR

    • Right to Access/Know : People can access their personal information and learn what data is collected, its source, its purpose and how it’s shared
    • Right to Delete/Erasure : People can request the deletion of their personal information, with some exceptions
    • Right to Non-Discrimination : Businesses can’t discriminate against people who exercise their privacy rights

    Consumer rights unique to the CCPA

    • Right to Opt Out of Sale : Consumers can prohibit the sale of their personal information
    • Right to Notice : Businesses must inform consumers about data collection practices
    • Right to Disclosure : Consumers can request specific information collected about them

    Data subject rights unique to the GDPR

    • Right to be Informed : Broader transparency requirements encompass data retention, automated decision-making and international transfers
    • Right to Rectification : Data subjects may request the correction of inaccurate data
    • Right to Restrict Processing : Consumers may limit data use in certain situations
    • Right to Data Portability : Businesses must provide individual consumer data in a secure, portable format when requested
    • Right to Withdraw Consent : Consumers may withdraw previously granted consent to data processing
    CCPAGDPR
    Right to Access or Know
    Right to Delete or Erase
    Right to Non-Discrimination
    Right to Opt-Out
    Right to Notice
    Right to Disclosure
    Right to be Informed
    Right to Rectification
    Right to Restrict Processing
    Right to Data Portability
    Right to Withdraw Consent

    Impact on data analytics

    Data analysts must understand these rights and ensure compliance with both regulations, which could potentially require separate data handling processes for EU and California consumers.

    #4. Opt-out vs. opt-in

    The CCPA generally follows an opt-out model, while the GDPR requires explicit consent from individuals before processing their data.

    Impact on data analytics

    For CCPA compliance, businesses can collect data by default if they provide opt-out mechanisms. Failing to process opt-out requests can result in severe penalties, like Sephora’s $1.2 million fine.

    Under GDPR, organisations must obtain explicit consent before collecting any data, which can limit the amount of data available for analysis.

    #5. Parental consent

    The CCPA and GDPR have provisions regarding parental consent for processing children’s data. The CCPA requires parental consent for children under 13, while the GDPR sets the age at 16, though member states can lower it to 13.

    Impact on data analytics

    This requirement significantly impacts businesses targeting younger audiences. In Europe and the US, companies must implement different methods to verify users’ ages and obtain parental consent when necessary.

    The California Attorney General’s Office recently fined Tilting Point Media LLC $500,000 for sharing children’s data without parental consent.

    #6. Data security requirements

    Both regulations require businesses to implement adequate security measures to protect personal data. However, the GDPR has more prescriptive requirements, outlining specific security measures and emphasising a risk-based approach.

    Impact on data analytics

    Data analytics professionals must ensure that data is processed and stored securely to avoid breaches and potential fines.

    #7. International data transfers

    Both the CCPA and GDPR address international data transfers. Under the CCPA, businesses must only inform consumers about international transfers. The GDPR has stricter requirements, including ensuring adequate data protection safeguards for transfers outside the EEA.

    A world map illustration.

    Other rules, like the Payment Services Directive 2 (PSD2), also affect international data transfers, especially in the financial industry.

    PSD2 requires strong customer authentication and secure communication channels for payment services. This adds complexity to cross-border data flows.

    Impact on data analytics

    The primary impact is on businesses serving European residents from outside Europe. Processing data within the European Union is typically advisable. Meta’s record-breaking €1.2 billion fine was specifically for transferring data from the EEA to the US without sufficient safeguards.

    Choosing the right analytics platform helps avoid these issues.

    For example, Matomo offers a free, open-source, self-hosted analytics platform you can deploy anywhere. You can also choose a managed, GDPR-compliant cloud analytics solution with all data storage and processing servers within the EU (in Germany), ensuring your data never leaves the EEA.

    #8. Enforcement mechanisms

    The California Attorney General is responsible for enforcing CCPA requirements, while in Europe, the Data Protection Authority (DPA) in each EU member state enforces GDPR requirements.

    Impact on data analytics

    Data analytics professionals should be familiar with their respective enforcement bodies and their powers to support compliance efforts and minimise the risk of fines and penalties.

    #9. Legal basis for personal data processing

    The GDPR outlines six legal grounds for processing personal data :

    • Consent
    • Contract
    • Legal obligation
    • Vital interests
    • Public task
    • Legitimate interests

    The CCPA doesn’t explicitly define lawful bases but focuses on consumer rights and transparency in general.

    Impact on data analytics

    Businesses subject to the GDPR must identify and document a valid lawful basis for each processing activity.

    Compliance rules under CCPA and GDPR

    Complying with the CCPA and GDPR requires a comprehensive approach to data privacy. Here’s a summary of the essential compliance rules for each framework :

    Key compliance points under CCPA and GDPR.

    CCPA compliance rules

    • Create clear and concise privacy policies outlining data collection and use practices
    • Give consumers the right to opt-out
    • Respond to consumer requests to access, delete and correct their personal information
    • Implement reasonable security measures for consumers’ personal data protection
    • Never discriminate against consumers who exercise their CCPA rights

    GDPR compliance rules

    • Obtain explicit and informed consent for data processing activities
    • Implement technical and organisational controls to safeguard personal data
    • Designate a Data Protection Officer (DPO) if necessary
    • Perform data protection impact assessments (DPIAs) for high-risk processing activities
    • Maintain records of processing activities
    • Promptly report data breaches to supervisory authorities

    Navigating the CCPA and GDPR with confidence

    Understanding the nuances of the CCPA and GDPR is crucial for businesses operating in the US and Europe. These regulations significantly impact data collection and analytics practices.

    Implementing robust data security practices and prioritising privacy and compliance are essential to avoid severe penalties and build trust with today’s privacy-conscious consumers.

    Privacy-centric analytics platforms like Matomo enable businesses to collect, analyse and use data responsibly and transparently, extracting valuable insights while maintaining compliance with both CCPA and GDPR requirements.

    no credit card required