Recherche avancée

Médias (91)

Autres articles (111)

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

  • Multilang : améliorer l’interface pour les blocs multilingues

    18 février 2011, par

    Multilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
    Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela.

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

Sur d’autres sites (11165)

  • FFmpeg video overlay function not working

    5 novembre 2022, par Dennis Ashford

    I am simply trying to get a watermarked video from the Flutter FFmpeg package and cannot seem to get it to work. Right now, I am downloading the video from Firebase, storing it in cache, overlaying a watermark image using the Flutter FFmpeg Kit package. The original video file, image file, and output file are being created properly.

    


    However, the overlay function is not working properly. How can I use the FFmpegKit.execute function string ? I am not seeing any obvious errors in the function, but it isn't working properly. I tried writing as a new File and asBytes but neither worked.

    


    Edit : I want to take the originalVideo and overlay it with the watermark image with the expected outcome being a new file that contains the new overlayed video. Not concerned with where the overlay is yet.

    


    Pubspec.yaml

    


    ffmpeg_kit_flutter: ^4.5.1


    


    The function is :

    


    import &#x27;package:ffmpeg_kit_flutter/ffmpeg_kit.dart&#x27;;&#xA;&#xA;Future<file> waterMarkVideo(String videoPath, String watermarkPath) async {&#xA;    //these calls are to load the video into temporary directory&#xA;    final response = await http.get(Uri.parse(videoPath));&#xA;    final originalVideo = File (&#x27;${(await getTemporaryDirectory()).path}/video.mp4&#x27;);&#xA;    await originalVideo.create(recursive: true);&#xA;    await originalVideo.writeAsBytes(response.bodyBytes);&#xA;    print(&#x27;video path&#x27; &#x2B; originalVideo.path);&#xA;&#xA;    //this grabs the watermark image from assets and decodes it&#xA;    final byteData = await rootBundle.load(watermarkPath);&#xA;    final watermark = File(&#x27;${(await getTemporaryDirectory()).path}/image.png&#x27;);&#xA;    await watermark.create(recursive: true);&#xA;    await watermark.writeAsBytes(byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));&#xA;    print(&#x27;watermark path&#x27; &#x2B; watermark.path);&#xA;&#xA;    //this creates temporary directory for new watermarked video&#xA;    var tempDir = await getTemporaryDirectory();&#xA;    final newVideoPath = &#x27;${tempDir.path}/${DateTime.now().microsecondsSinceEpoch}result.mp4&#x27;;&#xA;    final videoFile = await File(newVideoPath).create();&#xA;&#xA;//overlaying video using FFmpegkit where I need some help&#xA;    await FFmpegKit.executeAsync("-i $originalVideo -i $watermark -filter_complex &#x27;overlay=(W-w)/2:(H-h)/2&#x27; $videoFile")&#xA;    .then((session) async {&#xA;      final state = FFmpegKitConfig.sessionStateToString(await session.getState());&#xA;      final returnCode = await session.getReturnCode();&#xA;      final failStackTrace = await session.getFailStackTrace();&#xA;      final output = await session.getOutput();&#xA;      print(&#x27;FFmpeg process exited with state ${state} and rs ${returnCode}.If failed ${failStackTrace}&#x27;);&#xA;      print(&#x27;Last output $output&#x27;);&#xA;    } );&#xA;    print(&#x27;new video path&#x27; &#x2B; newVideoPath);&#xA;    Uint8List videoByteData = await videoFile.readAsBytes();&#xA;    return videoFile.writeAsBytes(videoByteData);&#xA;}&#xA;</file>

    &#xA;

    The output for the function above is

    &#xA;

    flutter: video path/Users/dennisashford/Library/Developer/CoreSimulator/Devices/FBFB4D51-EC31-47DF-8FE0-66B114806EA4/data/Containers/Data/Application/0EA3BB35-D364-4B98-A104-15CDB17AAD54/Library/Caches/video.mp4&#xA;flutter: watermark path/Users/dennisashford/Library/Developer/CoreSimulator/Devices/FBFB4D51-EC31-47DF-8FE0-66B114806EA4/data/Containers/Data/Application/0EA3BB35-D364-4B98-A104-15CDB17AAD54/Library/Caches/image.png&#xA;ffmpeg version v4.5-dev-3393-g30322ebe3c Copyright (c) 2000-2021 the FFmpeg developers&#xA;  built with Apple clang version 13.0.0 (clang-1300.0.29.30)&#xA;  configuration: --cross-prefix=x86_64-ios-darwin- --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk --prefix=/Users/taner/Projects/ffmpeg-kit/prebuilt/apple-ios-x86_64/ffmpeg --pkg-config=/opt/homebrew/bin/pkg-config --enable-version3 --arch=x86_64 --cpu=x86_64 --target-os=darwin --disable-neon --disable-asm --ar=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar --cc=clang --cxx=clang&#x2B;&#x2B; --as=&#x27;clang -arch x86_64 -target x86_64-apple-ios12.1-simulator -march=x86-64 -msse4.2 -mpopcnt -m64 -DFFMPEG_KIT_X86_64 -Wno-unused-function -Wno-deprecated-declarations -fstrict-aliasing -DIOS -DFFMPEG_KIT_BUILD_DATE=20220114 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk -O2 -mios-simulator-version-min=12.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk/usr/include&#x27; --ranlib=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib --strip=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip --nm=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm --extra-ldflags=&#x27;-mios-simulator-version-min=12.1&#x27; --disable-autodetect --enable-cross-compile --enable-pic --enable-inline-asm --enable-optimizations --enable-swscale --enable-shared --disable-static --install-name-dir=&#x27;@rpath&#x27; --enable-pthreads --disable-v4l2-m2m --disable-outdev=v4l2 --disable-outdev=fbdev --disable-indev=v4l2 --disable-indev=fbdev --enable-small --disable-xmm-clobber-test --disable-debug --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-gmp --enable-gnutls --disable-sdl2 --disable-openssl --enable-zlib --enable-audiotoolbox --disable-outdev=audiotoolbox --enable-bzlib --enable-videotoolbox --enable-avfoundation --enable-iconv --disable-coreimage --disable-appkit --disable-opencl --disable-opengl&#xA;  libavutil      57. 13.100 / 57. 13.100&#xA;  libavcodec     59. 15.102 / 59. 15.102&#xA;  libavformat    59. 10.100 / 59. 10.100&#xA;  libavdevice    59.  1.100 / 59.  1.100&#xA;  libavfilter     8. 21.100 /  8. 21.100&#xA;  libswscale      6.  1.102 /  6.  1.102&#xA;  libswresample   4.  0.100 /  4.  0.100&#xA;File:: Protocol not found&#xA;Did you mean file:File:?&#xA;flutter: FFmpeg process exited with state RUNNING and rs 1.If failed null&#xA;flutter: Last output ffmpeg version v4.5-dev-3393-g30322ebe3c Copyright (c) 2000-2021 the FFmpeg developers&#xA;flutter:   built with Apple clang version 13.0.0 (clang-1300.0.29.30)&#xA;flutter:   configuration: --cross-prefix=x86_64-ios-darwin- --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk --prefix=/Users/taner/Projects/ffmpeg-kit/prebuilt/apple-ios-x86_64/ffmpeg --pkg-config=/opt/homebrew/bin/pkg-config --enable-version3 --arch=x86_64 --cpu=x86_64 --target-os=darwin --disable-neon --disable-asm --ar=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar --cc=clang --cxx=clang&#x2B;&#x2B; --as=&#x27;clang -arch x86_64 -target x86_64-apple-ios12.1-simulator -march=x86-64 -msse4.2 -mpopcnt -m64 -DFFMPEG_KIT_X86_64 -Wno-unused-function -Wno-deprecated-declarations -fstrict-aliasing -DIOS -DFFMPEG_KIT_BUILD_DATE=20220114 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk -O2 -mios-simulator-version-min=12.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk/usr/include&#x27; --ranlib=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib --strip=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip --nm=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm --extra-ldflags=&#x27;-mios-simulator-version-min=12.1&#x27; --disable-autodetect --enable-cross-compile --enable-pic --enable-inline-asm --enable-optimizations --enable-swscale --enable-shared --disable-static --install-name-dir=&#x27;@rpath&#x27; --enable-pthreads --disable-v4l2-m2m --disable-outdev=v4l2 --disable-outdev=fbdev --disable-indev=v4l2 --disable-indev=fbdev --enable-small --disable-xmm-clobber-test --disable-debug --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-gmp --enable-gnutls --disable-sdl2 --disable-openssl --enable-zlib --enable-audiotoolbox --disable-outdev=audiotoolbox --enable-bzlib --enable-videotoolbox --enable-avfoundation --enable-iconv --disable-coreimage --disable-appkit --disable-opencl --disable-opengl&#xA;flutter:   libavutil      57. 13.100 / 57. 13.100&#xA;flutter:   libavcodec     59. 15.102 / 59. 15.102&#xA;flutter:   libavformat    59. 10.100 / 59. 10.100&#xA;flutter:   libavdevice    59.  1.100 / 59.  1.100&#xA;flutter:   libavfilter     8. 21.100 /  8. 21.100&#xA;flutter:   libswscale      6.  1.102 /  6.  1.102&#xA;flutter:   libswresample   4.  0.100 /  4.  0.100&#xA;flutter: File:: Protocol not found&#xA;flutter: Did you mean file:File:?&#xA;flutter: &#xA;flutter: new video path/Users/dennisashford/Library/Developer/CoreSimulator/Devices/FBFB4D51-EC31-47DF-8FE0-66B114806EA4/data/Containers/Data/Application/0EA3BB35-D364-4B98-A104-15CDB17AAD54/Library/Caches/1661892011213545result.mp4&#xA;

    &#xA;

    Update : So I built the code on a physical device and was able to get a little more information for what may be the problem. The error may be coming from

    &#xA;

    File:: Protocol not found&#xA;Did you mean file:File:?&#xA;

    &#xA;

    Complete logs from the physical device are given below

    &#xA;

    flutter: video path/var/mobile/Containers/Data/Application/70EA92CD-DF5D-440E-BBE1-C130BC7F0CC7/Library/Caches/video.mp4&#xA;flutter: watermark path/var/mobile/Containers/Data/Application/70EA92CD-DF5D-440E-BBE1-C130BC7F0CC7/Library/Caches/image.png&#xA;ffmpeg version v4.5-dev-3393-g30322ebe3c Copyright (c) 2000-2021 the FFmpeg developers&#xA;  built with Apple clang version 13.0.0 (clang-1300.0.29.30)&#xA;  configuration: --cross-prefix=arm64-ios-darwin- --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk --prefix=/Users/taner/Projects/ffmpeg-kit/prebuilt/apple-ios-arm64/ffmpeg --pkg-config=/opt/homebrew/bin/pkg-config --enable-version3 --arch=aarch64 --cpu=armv8 --target-os=darwin --enable-neon --enable-asm --ar=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar --cc=clang --cxx=clang&#x2B;&#x2B; --as=&#x27;/Users/taner/Projects/ffmpeg-kit/.tmp/gas-preprocessor.pl -arch aarch64 -- clang -arch arm64 -target arm64-apple-ios12.1 -march=armv8-a&#x2B;crc&#x2B;crypto -mcpu=generic -DFFMPEG_KIT_ARM64 -Wno-unused-function -Wno-deprecated-declarations -fstrict-aliasing -fembed-bitcode -DIOS -DFFMPEG_KIT_BUILD_DATE=20220114 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk -Oz -miphoneos-version-min=12.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include&#x27; --ranlib=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib --strip=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip --nm=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm --extra-ldflags=&#x27;-miphoneos-version-min=12.1&#x27; --disable-autodetect --enable-cross-compile --enable-pic --enable-inline-asm --enable-optimizations --enable-swscale --enable-shared --disable-static --install-name-dir=&#x27;@rpath&#x27; --enable-pthreads --disable-v4l2-m2m --disable-outdev=v4l2 --disable-outdev=fbdev --disable-indev=v4l2 --disable-indev=fbdev --enable-small --disable-xmm-clobber-test --disable-debug --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-gmp --enable-gnutls --disable-sdl2 --disable-openssl --enable-zlib --enable-audiotoolbox --disable-outdev=audiotoolbox --enable-bzlib --enable-videotoolbox --enable-avfoundation --enable-iconv --disable-coreimage --disable-appkit --disable-opencl --disable-opengl&#xA;  libavutil      57. 13.100 / 57. 13.100&#xA;  libavcodec     59. 15.102 / 59. 15.102&#xA;  libavformat    59. 10.100 / 59. 10.100&#xA;  libavdevice    59.  1.100 / 59.  1.100&#xA;  libavfilter     8. 21.100 /  8. 21.100&#xA;  libswscale      6.  1.102 /  6.  1.102&#xA;  libswresample   4.  0.100 /  4.  0.100&#xA;File:: Protocol not found&#xA;Did you mean file:File:?&#xA;flutter: FFmpeg process exited with state RUNNING and rs 1.If failed null&#xA;flutter: Last output ffmpeg version v4.5-dev-3393-g30322ebe3c Copyright (c) 2000-2021 the FFmpeg developers&#xA;  built with Apple clang version 13.0.0 (clang-1300.0.29.30)&#xA;  configuration: --cross-prefix=arm64-ios-darwin- --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk --prefix=/Users/taner/Projects/ffmpeg-kit/prebuilt/apple-ios-arm64/ffmpeg --pkg-config=/opt/homebrew/bin/pkg-config --enable-version3 --arch=aarch64 --cpu=armv8 --target-os=darwin --enable-neon --enable-asm --ar=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar --cc=clang --cxx=clang&#x2B;&#x2B; --as=&#x27;/Users/taner/Projects/ffmpeg-kit/.tmp/gas-preprocessor.pl -arch aarch64 -- clang -arch arm64 -target arm64-apple-ios12.1 -march=armv8-a&#x2B;crc&#x2B;crypto -mcpu=generic -DFFMPEG_KIT_ARM64 -Wno-unused-function -Wno-deprecated-declarations -fstrict-aliasing -fembed-bitcode -DIOS -DFFMPEG_KIT_BUILD_DATE=20220114 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk -Oz -miphoneos-version-min=12.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include&#x27; --ranlib=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib --strip=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip --nm=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm --extra-ldflags=&#x27;-miphoneos-version-min=12.1&#x27; --disable-autodetect --enable-cross-compile --enable-pic --enable-inline-asm --enable-optimizations --enable-swscale --enable-shared --disable-static --install-name-dir=&#x27;@rpath&#x27; --enable-pthreads --disable-v4l2-m2m --disable-outdev=v4l2 --disable-outdev=fbdev --disable-indev=v4l2 --disable-indev=fbdev --enable-small --disable-xmm-clobber-test --disable-debug --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-gmp --enable-gnutls --disable-sdl2 --disable-openssl --enable-zlib --enable-audiotoolbox --disable-outdev=audiotoolbox --enable-bzlib --enable-videotoolbox --enable-avfoundation --enable-iconv --disable-coreimage --disable-appkit --disable-opencl --disable-opengl&#xA;  libavutil      57. 13.100 / 57. 13.100&#xA;  libavcodec     59. 15.102 / 59. 15.102&#xA;  libavformat    59. 10.100 / 59. 10.100&#xA;  libavdevice    59.  1.100 / 59.  1.100&#xA;  libavfilter     8. 21.100 /  8. 21.100&#xA;  libswscale      6.  1.102 /  6.  1.102&#xA;  libswresample   4.  0.100 /  4.  0.100&#xA;File:: Protocol not found&#xA;Did you mean file:File:?&#xA;flutter: new video path/var/mobile/Containers/Data/Application/70EA92CD-DF5D-440E-BBE1-C130BC7F0CC7/Library/Caches/1661891272856433result.mp4&#xA;

    &#xA;

    Update #2 after a lot of help from @kesh below, this function was actually able to overlay the image on the video.

    &#xA;

    await FFmpegKit.executeAsync(&#x27;-i $videoPath -i ${watermark.path} -filter_complex "overlay=10:10" -y ${videoFile.path}&#x27;)&#xA;

    &#xA;

  • Is Google Analytics Accurate ? 6 Important Caveats

    8 novembre 2022, par Erin

    It’s no secret that accurate website analytics is crucial for growing your online business — and Google Analytics is often the go-to source for insights. 

    But is Google Analytics data accurate ? Can you fully trust the provided numbers ? Here’s a detailed explainer.

    How Accurate is Google Analytics ? A Data-Backed Answer 

    When properly configured, Google Analytics (Universal Analytics and Google Analytics 4) is moderately accurate for global traffic collection. That said : Google Analytics doesn’t accurately report European traffic. 

    According to GDPR provisions, sites using GA products must display a cookie consent banner. This consent is required to collect third-party cookies — a tracking mechanism for identifying users across web properties.

    Google Analytics (GA) cannot process data about the user’s visit if they rejected cookies. In such cases, your analytics reports will be incomplete.

    Cookie rejection refers to visitors declining or blocking cookies from ever being collected by a specific website (or within their browser). It immediately affects the accuracy of all metrics in Google Analytics.

    Google Analytics is not accurate in locations where cookie consent to tracking is legally required. Most consumers don’t like disruptive cookie banners or harbour concerns about their privacy — and chose to reject tracking. 

    This leaves businesses with incomplete data, which, in turn, results in : 

    • Lower traffic counts as you’re not collecting 100% of the visitor data. 
    • Loss of website optimisation capabilities. You can’t make data-backed decisions due to inconsistent reporting

    For the above reasons, many companies now consider cookieless website tracking apps that don’t require consent screen displays. 

    Why is Google Analytics Not Accurate ? 6 Causes and Solutions 

    A high rejection rate of cookie banners is the main reason for inaccurate Google Analytics reporting. In addition, your account settings can also hinder Google Analytics’ accuracy.

    If your analytics data looks wonky, check for these six Google Analytics accuracy problems. 

    You Need to Secure Consent to Cookies Collection 

    To be GDPR-compliant, you must display a cookie consent screen to all European users. Likewise, other jurisdictions and industries require similar measures for user data collection. 

    This is a nuisance for many businesses since cookie rejection undermines their remarketing capabilities. Hence, some try to maximise cookie acceptance rates with dark patterns. For example : hide the option to decline tracking or make the texts too small. 

    Cookie consent banner examples
    Banner on the left doesn’t provide an evident option to reject all cookies and nudges the user to accept tracking. Banner on the right does a better job explaining the purpose of data collection and offers a straightforward yes/no selection

    Sadly, not everyone’s treating users with respect. A joint study by German and American researchers found that only 11% of US websites (from a sample of 5,000+) use GDPR-compliant cookie banners.

    As a result, many users aren’t aware of the background data collection to which they have (or have not) given consent. Another analysis of 200,000 cookies discovered that 70% of third-party marketing cookies transfer user data outside of the EU — a practice in breach of GDPR.

    Naturally, data regulators and activities are after this issue. In April 2022, Google was pressured to introduce a ‘reject all’ cookies button to all of its products (a €150 million compliance fine likely helped with that). Whereas, noyb has lodged over 220 complaints against individual websites with deceptive cookie consent banners.

    The takeaway ? Messing up with the cookie consent mechanism can get you in legal trouble. Don’t use sneaky banners as there are better ways to collect website traffic statistics. 

    Solution : Try Matomo GDPR-Friendly Analytics 

    Fill in the gaps in your traffic analytics with Matomo – a fully GDPR-compliant product that doesn’t rely on third-party cookies for tracking web visitors. Because of how it is designed, the French data protection authority (CNIL) confirmed that Matomo can be used to collect data without tracking consent.

    With Matomo, you can track website users without asking for cookie consent. And when you do, we supply you with a compact, compliant, non-disruptive cookie banner design. 

    Your Google Tag Isn’t Embedded Correctly 

    Google Tag (gtag.js) is a web tracking script that sends data to your Google Analytics, Google Ads and Google Marketing Platform.

    A corrupted gtag.js installation can create two accuracy issues : 

    • Duplicate page tracking 
    • Missing script installation 

    Is there a way to tell if you’re affected ?

    Yes. You may have duplicate scripts installed if you have a very low bounce rate on most website pages (below 15% – 20%). The above can happen if you’re using a WordPress GA plugin and additionally embed gtag.js straight in your website code. 

    A tell-tale sign of a missing script on some pages is low/no traffic stats. Google alerts you about this with a banner : 

    Google Analytics alerts

    Solution : Use Available Troubleshooting Tools 

    Use Google Analytics Debugger extension to analyse pages with low bounce rates. Use the search bar to locate duplicate code-tracking elements. 

    Alternatively, you can use Google Tag Assistant for diagnosing snippet install and troubleshooting issues on individual pages. 

    If the above didn’t work, re-install your analytics script

    Machine Learning and Blended Data Are Applied

    Google Analytics 4 (GA4) relies a lot on machine learning and algorithmic predictions.

    By applying Google’s advanced machine learning models, the new Analytics can automatically alert you to significant trends in your data. [...] For example, it calculates churn probability so you can more efficiently invest in retaining customers.

    On the surface, the above sounds exciting. In practice, Google’s application of predictive algorithms means you’re not seeing actual data. 

    To offer a variation of cookieless tracking, Google algorithms close the gaps in reporting by creating models (i.e., data-backed predictions) instead of reporting on actual user behaviours. Therefore, your GA4 numbers may not be accurate.

    For bigger web properties (think websites with 1+ million users), Google also relies on data sampling — a practice of extrapolating data analytics, based on a data subset, rather than the entire dataset. Once again, this can lead to inconsistencies in reporting with some numbers (e.g., average conversion rates) being inflated or downplayed. 

    Solution : Try an Alternative Website Analytics App 

    Unlike GA4, Matomo reports consist of 100% unsampled data. All the aggregated reporting you see is based on real user data (not guesstimation). 

    Moreover, you can migrate from Universal Analytics (UA) to Matomo without losing access to your historical records. GA4 doesn’t yet have any backward compatibility.

    Spam and Bot Traffic Isn’t Filtered Out 

    Surprise ! 42% of all Internet traffic is generated by bots, of which 27.7% are bad ones.

    Good bots (aka crawlers) do essential web “housekeeping” tasks like indexing web pages. Bad bots distribute malware, spam contact forms, hack user accounts and do other nasty stuff. 

    A lot of such spam bots are designed specifically for web analytics apps. The goal ? Flood your dashboard with bogus data in hopes of getting some return action from your side. 

    Types of Google Analytics Spam :

    • Referral spam. Spambots hijack the referrer, displayed in your GA referral traffic report to indicate a page visit from some random website (which didn’t actually occur). 
    • Event spam. Bots generate fake events with free language entries enticing you to visit their website. 
    • Ghost traffic spam. Malicious parties can also inject fake pageviews, containing URLs that they want you to click. 

    Obviously, such spammy entities distort the real website analytics numbers. 

    Solution : Set Up Bot/Spam Filters 

    Google Analytics 4 has automatic filtering of bot traffic enabled for all tracked Web and App properties. 

    But if you’re using Universal Analytics, you’ll have to manually configure spam filtering. First, create a new view and then set up a custom filter. Program it to exclude :

    • Filter Field : Request URI
    • Filter Pattern : Bot traffic URL

    Once you’ve configured everything, validate the results using Verify this filter feature. Then repeat the process for other fishy URLs, hostnames and IP addresses. 

    You Don’t Filter Internal Traffic 

    Your team(s) spend a lot of time on your website — and their sporadic behaviours can impair your traffic counts and other website metrics.

    To keep your data “employee-free”, exclude traffic from : 

    • Your corporate IPs addresses 
    • Known personal IPs of employees (for remote workers) 

    If you also have a separate stage version of your website, you should also filter out all traffic coming from it. Your developers, contractors and marketing people spend a lot of time fiddling with your website. This can cause a big discrepancy in average time on page and engagement rates. 

    Solution : Set Internal Traffic Filters 

    Google provides instructions for excluding internal traffic from your reports using IPv4/IPv6 address filters. 

    Google Analytics IP filters

    Session Timeouts After 30 Minutes 

    After 30 minutes of inactivity, Google Analytics tracking sessions start over. Inactivity means no recorded interaction hits during this time. 

    Session timeouts can be a problem for some websites as users often pin a tab to check it back later. Because of this, you can count the same user twice or more — and this leads to skewed reporting. 

    Solution : Programme Custom Timeout Sessions

    You can codify custom cookie timeout sessions with the following code snippets : 

    Final Thoughts 

    Thanks to its scale and longevity, Google Analytics has some strong sides, but its data accuracy isn’t 100% perfect.

    The inability to capture analytics data from users who don’t consent to cookie tracking and data sampling applied to bigger web properties may be a deal-breaker for your business. 

    If that’s the case, try Matomo — a GDPR-compliant, accurate web analytics solution. Start your 21-day free trial now. No credit card required.

  • Xubuntu ffmpeg screen capturing very slow when no display connected

    8 décembre 2022, par fre_der

    I use ffmpeg on an Intel Nuc with Xubuntu 22.04 (XFCE4, lightdm), with x11grab for screen capturing the desktop, and sending output to a multicast UDP stream (which is shown on different IPTV sets in the network).&#xA;The system uses autologin, and autostarts Firefox in kiosk mode, rendering a html5 video.

    &#xA;

    Everything works fine when a display is attached, but from the moment the hdmi cable is detached, the output video is extremely slow (very shaky, looks like 1 fps, audio is OK although it has occasional hickups).

    &#xA;

    CPU and memory usage doesn't seem to be affected whether a display is attached or not.

    &#xA;

    This runs fine on Xubuntu 18.04, although there might be small config changes that I'm not aware of.

    &#xA;

    To be able to display output when no display is attached, I created a VIRTUAL1 display :

    &#xA;

    xrandr -d :0 --verbose --newmode "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync &#x2B;vsync&#xA;xrandr -d :0 --verbose --addmode VIRTUAL1 "1920x1080_60.00"&#xA;

    &#xA;

    my /usr/share/X11/xorg.conf.d/20-intel.conf looks like :

    &#xA;

    Section "Device"&#xA;  Identifier "Intel Graphics"&#xA;  Driver "intel"&#xA;  Option "VirtualHeads" "1"&#xA;  Option "TearFree" "true"&#xA;  Option "TripleBuffer" "true"&#xA;  Option "DRI" "false"&#xA;EndSection&#xA;

    &#xA;

    The ffmpeg command :

    &#xA;

    ffmpeg -r 25 -thread_queue_size 512 -f x11grab -s 1920x1080 -i :0 -thread_queue_size 512 -f alsa -i default -c:a mp2 -f mpegts udp://239.255.255.8:50000?pkt_size=1316&#xA;

    &#xA;

    (during trial/error I tested various ffmpeg command line options to no avail)

    &#xA;

    Output with hdmi cable attached :

    &#xA;

    ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers&#xA;  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)&#xA;  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared&#xA;  WARNING: library configuration mismatch&#xA;  avcodec     configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libaribb24 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc --enable-libsmbclient&#xA;  libavutil      56. 70.100 / 56. 70.100&#xA;  libavcodec     58.134.100 / 58.134.100&#xA;  libavformat    58. 76.100 / 58. 76.100&#xA;  libavdevice    58. 13.100 / 58. 13.100&#xA;  libavfilter     7.110.100 /  7.110.100&#xA;  libswscale      5.  9.100 /  5.  9.100&#xA;  libswresample   3.  9.100 /  3.  9.100&#xA;  libpostproc    55.  9.100 / 55.  9.100&#xA;[x11grab @ 0x55f1fdfa18c0] Stream #0: not enough frames to estimate rate; consider increasing probesize&#xA;Input #0, x11grab, from &#x27;:0&#x27;:&#xA;  Duration: N/A, start: 1670501458.257764, bitrate: 1658880 kb/s&#xA;  Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 1658880 kb/s, 25 fps, 1000k tbr, 1000k tbn, 1000k tbc&#xA;Guessed Channel Layout for Input Stream #1.0 : stereo&#xA;Input #1, alsa, from &#x27;default&#x27;:&#xA;  Duration: N/A, start: 1670501459.560180, bitrate: 1536 kb/s&#xA;  Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg2video (native))&#xA;  Stream #1:0 -> #0:1 (pcm_s16le (native) -> mp2 (native))&#xA;Press [q] to stop, [?] for help&#xA;Output #0, mpegts, to &#x27;udp://239.255.255.8:50000?pkt_size=1316&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf58.76.100&#xA;  Stream #0:0: Video: mpeg2video (Main), yuv420p(tv, progressive), 1920x1080, q=2-31, 200 kb/s, 25 fps, 90k tbn&#xA;    Metadata:&#xA;      encoder         : Lavc58.134.100 mpeg2video&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A&#xA;  Stream #0:1: Audio: mp2, 48000 Hz, stereo, s16, 384 kb/s&#xA;    Metadata:&#xA;      encoder         : Lavc58.134.100 mp2&#xA;frame= 1041 fps= 25 q=31.0 Lsize=   12451kB time=00:00:41.56 bitrate=2454.3kbits/s speed=1.01x&#xA;video:9955kB audio:1920kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.847125%&#xA;Exiting normally, received signal 2.&#xA;

    &#xA;

    Output without hdmi cable attached :

    &#xA;

    ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers&#xA;  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)&#xA;  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared&#xA;  WARNING: library configuration mismatch&#xA;  avcodec     configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libaribb24 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc --enable-libsmbclient&#xA;  libavutil      56. 70.100 / 56. 70.100&#xA;  libavcodec     58.134.100 / 58.134.100&#xA;  libavformat    58. 76.100 / 58. 76.100&#xA;  libavdevice    58. 13.100 / 58. 13.100&#xA;  libavfilter     7.110.100 /  7.110.100&#xA;  libswscale      5.  9.100 /  5.  9.100&#xA;  libswresample   3.  9.100 /  3.  9.100&#xA;  libpostproc    55.  9.100 / 55.  9.100&#xA;[x11grab @ 0x56325816a8c0] Stream #0: not enough frames to estimate rate; consider increasing probesize&#xA;Input #0, x11grab, from &#x27;:0&#x27;:&#xA;  Duration: N/A, start: 1670501334.907900, bitrate: 1658880 kb/s&#xA;  Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 1658880 kb/s, 25 fps, 1000k tbr, 1000k tbn, 1000k tbc&#xA;Guessed Channel Layout for Input Stream #1.0 : stereo&#xA;Input #1, alsa, from &#x27;default&#x27;:&#xA;  Duration: N/A, start: 1670501336.193971, bitrate: 1536 kb/s&#xA;  Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg2video (native))&#xA;  Stream #1:0 -> #0:1 (pcm_s16le (native) -> mp2 (native))&#xA;Press [q] to stop, [?] for help&#xA;Output #0, mpegts, to &#x27;udp://239.255.255.8:50000?pkt_size=1316&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf58.76.100&#xA;  Stream #0:0: Video: mpeg2video (Main), yuv420p(tv, progressive), 1920x1080, q=2-31, 200 kb/s, 25 fps, 90k tbn&#xA;    Metadata:&#xA;      encoder         : Lavc58.134.100 mpeg2video&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A&#xA;  Stream #0:1: Audio: mp2, 48000 Hz, stereo, s16, 384 kb/s&#xA;    Metadata:&#xA;      encoder         : Lavc58.134.100 mp2&#xA;frame= 1020 fps= 26 q=31.0 Lsize=   11802kB time=00:00:40.72 bitrate=2374.3kbits/s speed=1.02x&#xA;video:9378kB audio:1873kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.892235%&#xA;Exiting normally, received signal 2.&#xA;

    &#xA;

    xrandr output with display connected (if no display connected then DP1 just says disconnected as the other outputs)

    &#xA;

    Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767&#xA;DP1 connected 1920x1080&#x2B;0&#x2B;0 (normal left inverted right x axis y axis) 530mm x 300mm&#xA;   1920x1080     60.00*&#x2B;  74.97    50.00    59.94&#xA;   1920x1080i    60.00    50.00    59.94&#xA;   1680x1050     59.88&#xA;   1280x1024     75.02    60.02&#xA;   1440x900      59.90&#xA;   1280x960      60.00&#xA;   1280x720      60.00    50.00    59.94&#xA;   1024x768      75.03    70.07    60.00&#xA;   832x624       74.55&#xA;   800x600       72.19    75.00    60.32    56.25&#xA;   720x576       50.00&#xA;   720x480       60.00    59.94&#xA;   640x480       75.00    72.81    66.67    60.00    59.94&#xA;   720x400       70.08&#xA;DP2 disconnected (normal left inverted right x axis y axis)&#xA;DP3 disconnected (normal left inverted right x axis y axis)&#xA;DP4 disconnected (normal left inverted right x axis y axis)&#xA;HDMI1 disconnected (normal left inverted right x axis y axis)&#xA;VIRTUAL1 connected 1920x1080&#x2B;0&#x2B;0 (normal left inverted right x axis y axis) 0mm x 0mm&#xA;   1920x1080_60.00  59.96*&#xA;VIRTUAL2 disconnected (normal left inverted right x axis y axis)&#xA;

    &#xA;