Recherche avancée

Médias (1)

Mot : - Tags -/copyleft

Autres articles (62)

  • Le plugin : Podcasts.

    14 juillet 2010, par

    Le problème du podcasting est à nouveau un problème révélateur de la normalisation des transports de données sur Internet.
    Deux formats intéressants existent : Celui développé par Apple, très axé sur l’utilisation d’iTunes dont la SPEC est ici ; Le format "Media RSS Module" qui est plus "libre" notamment soutenu par Yahoo et le logiciel Miro ;
    Types de fichiers supportés dans les flux
    Le format d’Apple n’autorise que les formats suivants dans ses flux : .mp3 audio/mpeg .m4a audio/x-m4a .mp4 (...)

  • Publier sur MédiaSpip

    13 juin 2013

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

  • Récupération d’informations sur le site maître à l’installation d’une instance

    26 novembre 2010, par

    Utilité
    Sur le site principal, une instance de mutualisation est définie par plusieurs choses : Les données dans la table spip_mutus ; Son logo ; Son auteur principal (id_admin dans la table spip_mutus correspondant à un id_auteur de la table spip_auteurs)qui sera le seul à pouvoir créer définitivement l’instance de mutualisation ;
    Il peut donc être tout à fait judicieux de vouloir récupérer certaines de ces informations afin de compléter l’installation d’une instance pour, par exemple : récupérer le (...)

Sur d’autres sites (6298)

  • Android : FFMpeg (video creation) crashes with no exception when loading binaries in lower APIs (18 in my case) but works in newer ones

    6 mai 2019, par Diego Perez

    I have an app that uses FFMpeg for video creation (these next lines are the relevant build.gradle plugin files) :

    //writingminds
    api 'com.writingminds:FFmpegAndroid:0.3.2'
    //JavaCV video
    api group: 'org.bytedeco', name: 'javacv', version: '1.4.4'
    api group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '4.0.1-1.4.4', classifier: 'android-arm'
    api group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '4.1-1.4.4', classifier: 'android-arm'

    And my app is working (and creating video) just fine in my phone with a newer Android 8 version but I’m having weird problems in my old API 18 tablet (where, as a note, I had to install multidex).

    These next lines are the main part of FFMpeg video creation, where binaries are loaded, and, in fact, binaries load are where app crashes in my tablet in the line "ffmpeg.loadBinary(new LoadBinaryResponseHandler()..."

    As you can see, I have a try/catch where the app crashes, but it crashes with no aparent exception, as catch blocks are never hit.

    public static String recordVideo(JSONObject objJSON) {

       String strReturn = Enum.Result.OK;

       try {
           fileName = objJSON.has("file_name") ? String.valueOf(objJSON.getString("file_name")) : "";
           videoPath = objJSON.has("video_path") ? String.valueOf(objJSON.getString("video_path")) : "";
       } catch (JSONException e) {
           ExceptionHandler.logException(e);
       }

       FFmpeg ffmpeg = FFmpeg.getInstance(ApplicationContext.get());
       try {
           ffmpeg.loadBinary(new LoadBinaryResponseHandler() {

               @Override
               public void onStart() {}

               @Override
               public void onFailure() {}

               @Override
               public void onSuccess() {}

               @Override
               public void onFinish() {}
           });
       } catch (FFmpegNotSupportedException e) {
           // Handle if FFmpeg is not supported by device
       } catch (Exception e) {

       }
    ...

    These next lines are the relevant part of the LogCat, but I cannot figure out where the problem resides, maybe an out of memory problem ?

    Any help will be much appreciated.

    04-28 21:44:45.873 13743-13964/com.artandwords.thoughtoftheday A/libc: Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 13964 (AsyncTask #4)
    04-28 21:44:45.973 144-144/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    04-28 21:44:45.983 144-144/? I/DEBUG: Build fingerprint: 'asus/WW_epad/ME302C:4.3/JSS15Q/WW_epad-V5.0.21-20140701:user/release-keys'
    04-28 21:44:45.983 144-144/? I/DEBUG: Revision: '0'
    04-28 21:44:45.983 144-144/? I/DEBUG: pid: 13743, tid: 13964, name: AsyncTask #4  >>> com.artandwords.thoughtoftheday <<<
    04-28 21:44:45.983 144-144/? I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
    04-28 21:44:46.003 144-144/? I/DEBUG:     eax 00000000  ebx 000000c6  ecx 00000000  edx 00000000
    04-28 21:44:46.003 144-144/? I/DEBUG:     esi 00000e59  edi 00000000
    04-28 21:44:46.003 144-144/? I/DEBUG:     xcs 00000073  xds 0000007b  xes 0000007b  xfs 00000043  xss 0000007b
    04-28 21:44:46.003 144-144/? I/DEBUG:     eip 784ed378  ebp 2200ff0c  esp 2200fec4  flags 00210246
    04-28 21:44:46.003 144-144/? I/DEBUG: backtrace:
    04-28 21:44:46.003 144-144/? I/DEBUG:     #00  pc 00087378  /system/lib/libhoudini.so.3.4.7.44914
    04-28 21:44:46.003 144-144/? I/DEBUG:     #01  pc 00085d0e  /system/lib/libhoudini.so.3.4.7.44914
    04-28 21:44:46.003 144-144/? I/DEBUG:     #02  pc 00073328  /system/lib/libhoudini.so.3.4.7.44914
    04-28 21:44:46.003 144-144/? I/DEBUG:     #03  pc 0006f7ff  /system/lib/libhoudini.so.3.4.7.44914
    04-28 21:44:46.003 144-144/? I/DEBUG:     #04  pc 0006f3bf  /system/lib/libhoudini.so.3.4.7.44914
    04-28 21:44:46.003 144-144/? I/DEBUG:     #05  pc 000b92de  /system/lib/libhoudini.so.3.4.7.44914
    04-28 21:44:46.003 144-144/? I/DEBUG:     #06  pc ffffffff  <unknown>
    04-28 21:44:46.003 144-144/? I/DEBUG:     #07  pc 001445aa  /system/lib/libhoudini.so.3.4.7.44914
    04-28 21:44:46.013 144-144/? I/DEBUG: stack:
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436850  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436854  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436858  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b43685c  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436860  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436864  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436868  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b43686c  3822676c  /system/lib/arm/libc.so
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436870  7b436a98  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436874  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436878  7b4368c8  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b43687c  7b436a98  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436880  383003a0  /system/lib/arm/libdl.so
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436884  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436888  7b4368c8  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b43688c  785aa5ab  /system/lib/libhoudini.so.3.4.7.44914
    04-28 21:44:46.013 144-144/? I/DEBUG:     #07  7b436890  7b4368a0  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436894  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b436898  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b43689c  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368a0  7b4368c8  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368a4  7b436890  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368a8  785aa59d  /system/lib/libhoudini.so.3.4.7.44914
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368ac  7b436a98  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368b0  7b437930  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368b4  220001d0  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368b8  7b436a70  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368bc  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368c0  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368c4  00000000  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368c8  7b436a88  
    04-28 21:44:46.013 144-144/? I/DEBUG:          7b4368cc  785f3141  /system/lib/libhoudini.so.3.4.7.44914


       --------- beginning of /dev/log/system
    04-28 21:44:46.063 450-470/? I/BootReceiver: Copying /data/tombstones/tombstone_03 to DropBox (SYSTEM_TOMBSTONE)
    04-28 21:44:46.063 450-13973/? W/ActivityManager:   Force finishing activity com.artandwords.thoughtoftheday/.activities.DisplayThoughtActivity
    04-28 21:44:46.073 145-862/? E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 75
    04-28 21:44:46.093 450-13973/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
    04-28 21:44:46.093 450-483/? W/InputDispatcher: channel '21edd9e8 com.artandwords.thoughtoftheday/com.artandwords.thoughtoftheday.activities.main.MainActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
    04-28 21:44:46.093 450-483/? E/InputDispatcher: channel '21edd9e8 com.artandwords.thoughtoftheday/com.artandwords.thoughtoftheday.activities.main.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
    04-28 21:44:46.093 155-13945/? W/TimedEventQueue: Event 25 was not found in the queue, already cancelled?
    04-28 21:44:46.093 155-3134/? W/AudioFlinger: session id 324 not found for pid 155
    04-28 21:44:46.103 450-450/? W/InputDispatcher: Attempted to unregister already unregistered input channel '21edd9e8 com.artandwords.thoughtoftheday/com.artandwords.thoughtoftheday.activities.main.MainActivity (server)'
    04-28 21:44:46.103 450-755/? I/WindowState: WIN DEATH: Window{21b33a28 u0 com.artandwords.thoughtoftheday/com.artandwords.thoughtoftheday.activities.DisplayThoughtActivity}
    04-28 21:44:46.103 450-13973/? W/ActivityManager: Exception thrown during pause
       android.os.TransactionTooLargeException
           at android.os.BinderProxy.transact(Native Method)
           at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:642)
           at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:1007)
           at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:3905)
           at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:3837)
           at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:8588)
           at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:8465)
           at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:9170)
           at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:8699)
           at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)
    04-28 21:44:46.103 450-450/? I/WindowState: WIN DEATH: Window{21edd9e8 u0 com.artandwords.thoughtoftheday/com.artandwords.thoughtoftheday.activities.main.MainActivity}
    04-28 21:44:46.103 450-636/? I/WindowState: WIN DEATH: Window{21be0690 u0 com.artandwords.thoughtoftheday/com.artandwords.thoughtoftheday.activities.DisplayThoughtActivity}
    04-28 21:44:46.113 450-13973/? I/WindowManager: computeScreenConfigurationLocked() Enter {1.15 ?mcc?mnc ?locale ?layoutDir ?swdp ?wdp ?hdp ?density ?lsize ?long ?orien ?uimode ?night ?touch ?keyb/?/? ?nav/?}
    04-28 21:44:46.113 450-13973/? I/WindowManager: dw=1200, dh=1920
    04-28 21:44:46.113 450-13973/? I/WindowManager: appWidth=1200, appHeight=1848
    04-28 21:44:46.113 450-13973/? I/WindowManager: tempdm=DisplayMetrics{density=1.5, width=1200, height=1848, scaledDensity=1.5, xdpi=221.201, ydpi=220.591}
    04-28 21:44:46.113 450-13973/? I/WindowManager: dm=DisplayMetrics{density=1.5, width=1200, height=1848, scaledDensity=1.5, xdpi=221.201, ydpi=220.591}, ro.product.device=ME302C
    04-28 21:44:46.113 450-13973/? I/WindowManager: getConfigDisplayWidth=1200, getConfigDisplayHeight=1810
    04-28 21:44:46.113 450-13973/? I/WindowManager: screenWidthDp=800, screenHeightDp=1206
    04-28 21:44:46.113 450-13973/? I/WindowManager: computeScreenConfigurationLocked() Leave {1.15 ?mcc?mnc ?locale ?layoutDir sw800dp w800dp h1206dp 240dpi xlrg port ?uimode ?night finger -keyb/v/h -nav/h}
    04-28 21:44:46.113 450-13973/? I/ActivityManager: Restarting because process died: ActivityRecord{21ab1f80 u0 com.artandwords.thoughtoftheday/.activities.main.MainActivity}
    04-28 21:44:46.113 450-13973/? W/ActivityManager: Exception when starting activity com.artandwords.thoughtoftheday/.activities.main.MainActivity
       android.os.DeadObjectException
           at android.os.BinderProxy.transact(Native Method)
           at android.app.ApplicationThreadProxy.scheduleLaunchActivity(ApplicationThreadNative.java:730)
           at com.android.server.am.ActivityStack.realStartActivityLocked(ActivityStack.java:733)
           at com.android.server.am.ActivityStack.startSpecificActivityLocked(ActivityStack.java:840)
           at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1790)
           at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1449)
           at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:1058)
           at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:3905)
           at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:3837)
           at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:8588)
           at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:8465)
           at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:9170)
           at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:8699)
           at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)
    04-28 21:44:46.123 450-13973/? W/ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1396 com.android.server.am.ActivityStack.sendActivityBroadcastLocked:4923 com.android.server.am.ActivityStack.removeActivityFromHistoryLocked:4089 com.android.server.am.ActivityStack.removeHistoryRecordsForAppLocked:4346 com.android.server.am.ActivityManagerService.handleAppDiedLocked:3163
    04-28 21:44:46.123 450-13973/? I/ActivityManager: Start proc com.artandwords.thoughtoftheday for activity com.artandwords.thoughtoftheday/.activities.main.MainActivity: pid=13975
    </unknown>

    Edit 1 :

    Still investigating and entered FFmpeg.java to the method loadBinary while debugging, which code I’ll paste below and the line making the crash is switch (CpuArchHelper.getCpuArch())

    @Override
    public void loadBinary(FFmpegLoadBinaryResponseHandler ffmpegLoadBinaryResponseHandler) throws FFmpegNotSupportedException {
       String cpuArchNameFromAssets = null;
       switch (CpuArchHelper.getCpuArch()) {
           case x86:
               Log.i("Loading FFmpeg for x86 CPU");
               cpuArchNameFromAssets = "x86";
               break;
           case ARMv7:
               Log.i("Loading FFmpeg for armv7 CPU");
               cpuArchNameFromAssets = "armeabi-v7a";
               break;
           case NONE:
               throw new FFmpegNotSupportedException("Device not supported");
       }

       if (!TextUtils.isEmpty(cpuArchNameFromAssets)) {
           ffmpegLoadLibraryAsyncTask = new FFmpegLoadLibraryAsyncTask(context, cpuArchNameFromAssets, ffmpegLoadBinaryResponseHandler);
           ffmpegLoadLibraryAsyncTask.execute();
       } else {
           throw new FFmpegNotSupportedException("Device not supported");
       }
    }

    I’ll keep on investigating...

    Edit 2 :

    Further debugging has just lead me to the exact line where app crashes, and it’s CpuArchHelper.java from FFmpeg library :

    The line causing the crash is the next :

    String archInfo = cpuNativeArchHelper.cpuArchFromJNI();

    and I cannot even go inside cpuArchFromJNI() with F7 as it just crashes.

    package com.github.hiteshsondhi88.libffmpeg;

    import android.os.Build;

    class CpuArchHelper {

       static CpuArch getCpuArch() {
           Log.d("Build.CPU_ABI : " + Build.CPU_ABI);
           // check if device is x86 or x86_64
           if (Build.CPU_ABI.equals(getx86CpuAbi()) || Build.CPU_ABI.equals(getx86_64CpuAbi())) {
               return CpuArch.x86;
           } else {
               // check if device is armeabi
               if (Build.CPU_ABI.equals(getArmeabiv7CpuAbi())) {
                   ArmArchHelper cpuNativeArchHelper = new ArmArchHelper();
                   String archInfo = cpuNativeArchHelper.cpuArchFromJNI();
                   // check if device is arm v7
                   if (cpuNativeArchHelper.isARM_v7_CPU(archInfo)) {
                       // check if device is neon
                       return CpuArch.ARMv7;
                   }
                   // check if device is arm64 which is supported by ARMV7
               } else if (Build.CPU_ABI.equals(getArm64CpuAbi())) {
                   return CpuArch.ARMv7;
               }
           }
           return CpuArch.NONE;
       }

       static String getx86CpuAbi() {
           return "x86";
       }

       static String getx86_64CpuAbi() {
           return "x86_64";
       }

       static String getArm64CpuAbi() {
           return "arm64-v8a";
       }

       static String getArmeabiv7CpuAbi() {
           return "armeabi-v7a";
       }
    }

    This is ArmArchHelper.java class :

    package com.github.hiteshsondhi88.libffmpeg;

    class ArmArchHelper {
       static {
           System.loadLibrary("ARM_ARCH");
       }

       native String cpuArchFromJNI();

       boolean isARM_v7_CPU(String cpuInfoString) {
           return cpuInfoString.contains("v7");
       }

       boolean isNeonSupported(String cpuInfoString) {
           // check cpu arch for loading correct ffmpeg lib
           return cpuInfoString.contains("-neon");
       }

    }

    Edit 3 :

    Reading carefully LogCat I’ve noticed there is a TransactionTooLarge Exception :

    04-28 21:44:46.103 450-13973/? W/ActivityManager: Exception thrown during pause
       android.os.TransactionTooLargeException
           at android.os.BinderProxy.transact(Native Method)
           at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:642)
           at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:1007)
           at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:3905)
           at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:3837)
           at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:8588)
           at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:8465)
           at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:9170)
           at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:8699)
           at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)

    Maybe this is what makes my app to crash, but I don’t know what to do with that, as it happens inside the FFMpeg library :s

    Edit 3 :

    As a note, I’ve tried in an old Android 4.2.2 (API 17) phone I also own and it’s working just fine, the video is generated without crashing.

  • Use data to develop impactful video content

    28 septembre 2021, par Ben Erskine — Analytics Tips, Plugins

    Creating impactful video content is at the heart of what you do. How you really engage with your audience, change behaviours and influence customers to complete your digital goals. But how do you create truly impactful marketing content ? By testing, trialling, analysing and ultimately tweaking and reacting to data-informed insights that gear your content to your audience (rather than simply producing great content and shooting arrows in the dark).

    Whether you want to know how many plays your video has, finish rates, how your video is consumed over time, how video was consumed on specific days or even which locations users are viewing your video content. Media Analytics will gather all of your video data in one place and provide answers to all of these questions (and much more).

    What is impactful video content ?

    Impactful video content grabs your audience’s attention, keeps their attention and promotes them to take measurable action. Be that time spent on your website, goal completion or brand engagement (including following, commenting or sharing on social). Maybe you’ve developed video content, had some really great results, but not consistently, nor every time and it can be difficult to identify what exactly it is that engages and entices each and every time. And we all want to find where that lovely sweet spot is for your audience.

    Embedded video on your website can be a marketing piece that talks about the benefits of your product. Or can be educational or informative that support the brand and overall impression of the brand. And at the very best entertaining at the same time. 

    84% of people say that they’ve been convinced to buy a product or service by watching a brand’s video. Building trust, knowledge and engagement are simply quicker with video. Viewers interact more, and are engaged longer with video, they are more likely to take in the message and trust what they are seeing through educational, informative or even entertaining video marketing content than solely through reading content on a website. And even better they take action, complete goals on your website and engage with your brand (potentially long term).

    It is not only necessary to have embedded video content on your website, it needs to deliver all the elements of a well functioning website, creating the very best user experience is essential to keeping your viewers engaged. This includes ensuring the video is quick to load, on-brand, expected (in format and tone) and easy to use and/or find. Ensuring that your video content is all of these things can mean that your website users will stick around longer on your website, spend more time exploring (and reading) your website and ultimately complete more of your goals. With a great user experience, your users, in turn, are more likely to come back again to your website and trust your brand. 

    All great reasons to create impactful video content that supports your website and brand ! And to analyse data around this behaviour to repeat (or better) the video content that really hits the mark.

    Let’s talk stats

    In terms of video marketing, there are stats to support that viewers retain 95% of a message when they view it in a video format. The psychology behind this should be fairly obvious. It is easier (and quicker) for humans to consume video and watch someone explain something than it is to read and take action. Simply look at the rise of YouTube for explanatory and instructional video content !

    And how about the 87% of marketers that report a positive ROI on using video in their marketing ? This number has steadily increased since 2015 and matches the increase in video views over the years. This should be enough to demonstrate that video marketing is the way forward, however it needs to be the right type of video to create impact and engagement.

    Do you need more reasons to consider honing and refining your video content for your audience ? And riding this wave of impactful video marketing success ?

    But, how do we do that ?

    So, how do you make content that consistently converts your audience to engaged customers ? The answer is in the numbers. The data. Collecting data on each and every piece of media that is produced and put out into the world. Measuring everything, from where it is viewed, how it is viewed, how much of it is viewed and what is your viewer’s action after the fact.

    While Vimeo and YouTube have their own video analytics they are each to their own, meaning a lot more work for you to combine and analyse your data before forming insights that are useful. 

    Your data is collected by external parties, and is owned and used by these platforms, for their own means. Using Web Analytics from Matomo to collect and collate media data can mean your robust data insights are all in one place. And you own the data, keeping your data private, clean and easy to digest. 

    Once your data is across a single platform, your time can be spent on analysing the data (rather than collating) and discovering those super valuable insights. Additionally, these insights can be collated and reported, in one place, and used to inform future digital and video marketing planning. Working with the data and alongside creative teams to produce video that talks to your audience in an impactful way.

    The more data that is collected the deeper the insights. Saving time and money across a single platform and with data-backed insights to inform decisions that can influence the time (and money) spent producing video content that truly hits the mark with your audience. No more wasted investment and firing into the dark without knowledge. 

    Interrogating the ideal length of your video media means it is more likely to be viewed to the end. Or understanding the play rate on your website of any video. How often is the video played ? And which is played more often ? Constant tweaking and updating of your video content planning can be informed by data-driven human-centric insights. By consistently tracking your media, analysing and forming insights you can build upon past work, and create a fuller picture of who your audience is and how they will engage with future video content. Understanding your media over time can lead to informed decisions that can impact the video content and the level of investment to deliver ROI that means something.

    Wrap Up

    Media Analytics puts you at the heart of video engagement. No more guessing at what your audience wants to see, how long or when. Make every piece of video content have the impact you want (and need) to drive engagement, goal completion and customer conversion. Create a user experience that keeps your users on your website for longer. Delivering on all of those delicious digital marketing goals and speaking the language of key stakeholders throughout the business. Back your digital marketing, with truly impactful content, and above all else deliver to your audience content that keeps them engaged and coming back for more.

    Don’t just take our word for it ! Take a look at what Matomo can offer you with streamlined and insightful Media Analytics, all in one place. And go forth and create impactful content, that matters.

    Next steps :

    Check out our detailed user guide to Media Analytics

    Or, if you have questions, see our helpful Video & Audio Analytics FAQ’s

  • CRO Program : Best Practices and KPIs to Track [2024]

    8 mai 2024, par Erin

    Driving traffic to your website is only one part of the equation ; the second part is getting those visitors to convert by completing a desired action — creating an account, signing up for a newsletter or completing a purchase. 

    But if you fail to optimise your website for conversions, you’ll have a hard time guiding visitors further down the funnel and turning them into customers.

    That’s where a CRO program (or conversion rate optimisation) can help. 

    This article will cover conversion rate optimisation best practices and outline key metrics and KPIs to start tracking to see an improvement in your conversion rates.

    What is a CRO program ? 

    In the simplest terms, a CRO program — also called a CRO plan — is a digital marketing strategy. It focuses on implementing different tactics that can lead to an increase in conversion rate and maximising revenue. 

    CRO concept with marketing icons

    One thing to remember is that the definition of “conversion” varies from business to business. The most obvious type of conversion would be a financial transaction or a completed form — but it comes down to what you consider a valuable action. 

    Many different actions can count as conversions, depending on your marketing goals. 

    Besides making a purchase, other common examples of key conversion moments include creating a new account, signing up for a free trial, booking a demo and subscribing to an email newsletter. 

    Another thing worth noting is that while the average conversion rate on e-commerce websites is 3.76%, it might fluctuate across different industries and device types. Case in point — desktop devices have higher conversion rates than mobile devices, clocking in at 4.79% and 3.32%, respectively. 

    So, in addition to defining your key conversion moments, you should also go over conversion insights relevant to your specific industry. 

    The importance of conversion rate optimisation 

    You’d be right to assume that the ultimate goal of a conversion rate optimisation process is to drive revenue through higher conversion rates — but don’t focus solely on the numbers. The core principle of a CRO program is improving the customer experience. Once you’ve achieved that, the increase in conversion rate will follow. 

    Illustration of conversion funnel optimisation

    According to a recent report, global conversion rate optimisation (CRO) software sales are expected to reach $3.7 billion by 2032 — up from $1.1 billion in 2021. 

    This growth indicates the increasing interest in strategies and tools that can help optimise the conversion funnel. Businesses are looking for ways to keep potential customers engaged and improve the average conversion rate — without necessarily increasing their spending. 

    Here are a few reasons why a CRO program deserves a spot in your broader digital marketing strategies : 

    • It can lower your cost per acquisition (CPA) : A CRO program is about optimising your conversion funnel by leveraging existing assets and website traffic rather than increasing your spending — which lowers the costs of acquiring new customers and, in turn, drives ROI. 
    • It can maximise customer lifetime value (CLV) : If you can turn one-time buyers into repeat customers, you’ll be one step closer to building a loyal user base and increasing your CLV. 
    • It can lead to increased sales and boost your revenue : Higher conversion rates typically mean higher revenue ; that’s arguably the most obvious benefit of implementing a CRO program
    • It improves the overall user experience : The goal is to make your site more accessible, easier to navigate and more engaging. Delivering the experience people want — and expect — when navigating your website is one of the core principles of a CRO program.
    • It helps you to get to know your customers better : You can’t meet your customers’ needs without taking the time to know them, create user personas and understand their preferences, pain points and conversion barriers they may be facing. 

    Conversion optimisation gives you a competitive edge in revenue and brand reputation. 

    5 CRO best practices 

    Illustration of different CRO elements

    Here are five conversion rate optimisation strategies and best practices that can make a real difference in the customer experience — and drive potential conversions. 

    Create a CRO roadmap in advance 

    First and foremost, you’ll need a well-defined “game plan” that aligns with and reflects your conversion goals. 

    A CRO roadmap is a detailed manual that outlines how to implement different elements of your CRO-related efforts. Marketing teams can refer to this step-by-step framework for test planning, prioritisation and resource allocation while optimising their marketing strategy. 

    While conversion rate optimisation can be a complex process — especially when you don’t know what to tackle first — we’ve found that there are three things you need to consider when setting the foundations of a successful CRO program : 

    • The “why” behind your website traffic : You’re likely using different online marketing strategies — from SEO to pay-per-click (PPC). So, it’s best to start by gathering channel-specific conversion insights through marketing attribution. Then identify which of these efforts have the biggest impact on your target audience. 
    • The so-called “conversion blockers” that tell you where and why visitors tend to leave without completing a desired action : Funnel analysis might reveal problematic pages — drop-off points where you tend to lose most of your visitors. 
    • Your “hooks” : User feedback can be of great help here ; you can learn a lot by simply asking your customers to fill out a quick online survey and tell you what motivated them to take action.

    Before working on that “game plan,” perform a pre-test analysis. 

    Matomo combines web analytics and user behaviour analytics with features like Heatmaps, Session Recordings, Form Analytics, Funnel Analytics, A/B Testing and User Flow. It can give you those initial benchmarks for measuring progress and a potential increase in conversion rate. 

    Validate your ideas with A/B and multivariate testing 

    Conversion rate optimisation is an iterative process. So, it shouldn’t come as a surprise that A/B testing variants of page layouts, CTAs, headlines, copy and other elements is a big part of it.

    Multivariate and A/B testing allows you to test a wide range of elements across your site and identify what works — and, more importantly, what doesn’t — in terms of driving conversions.

    On that note, Matomo’s A/B Testing feature can support your conversion rate optimisation process by identifying variants that perform better based on statistical significance. 

    Try Matomo for Free

    Get the web insights you need, without compromising data accuracy.

    No credit card required

    Get to know your website visitors 

    Driving conversions comes down to understanding potential customer’s pain points and needs — and delivering an experience that positions you as the solution and gets them to take action. 

    Here are a few things that can help you understand your website visitors better : 

    • Collecting customer feedback through surveys and using it to identify main areas for improvement 
    • Creating detailed customer personas and optimising your website design and messaging based on your target audience’s pain points, needs and wants 
    • Using heatmaps — colour-coded data visualisation tools that illustrate user interactions — and scroll maps to get a comprehensive overview of online sessions and identify the most engaging elements and those that stand out as potential conversion barriers 

    Matomo’s Heatmaps can help you identify the most-clicked elements on the page and show how far users scroll — providing powerful user insights you can use to optimise these pages.

    Try Matomo for Free

    Get the web insights you need, without compromising data accuracy.

    No credit card required

    Remove friction points 

    As we previously discussed, identifying friction points and barriers to conversion — issues that prevent visitors from converting — is one of the crucial aspects of developing a CRO plan. 

    Many different “conversion blockers” are worth looking into, including : 

    • Lengthy or otherwise complex checkout processes 
    • No guest checkout feature 
    • Device type, browser and OS compatibility issues 
    • Slow site speed and other technical issues
    • Lack of free shipping and limited payment methods 
    • Absence of social proof (customer reviews and testimonials) and trust badges

    Once you’ve identified what’s slowing down or completely discouraging users from reaching key conversion moments, take the time to address it. 

    Switch to text-based CTAs 

    Calls-to-action (CTAs) play a crucial role in guiding customers from interest to action. However, sometimes they fail to do their job — encouraging website visitors to proceed to the next step — effectively. 

    The most obvious reason is that your CTAs aren’t visually engaging or clear enough. In that case, you can try using action-oriented language and stronger visual elements and aligning the CTA copy with the context of the page. 

    But more often than not, the issue comes down to a phenomenon called “banner blindness” — the tendency of website visitors to ignore (either intentionally or unintentionally) elements on a page that resemble banner ads. 

    And if that’s what’s preventing visitors from converting, consider switching to text-based CTAs. 

    Conversion rate optimisation metrics and KPIs 

    At this point, you should know the outcomes you hope to achieve. Your next step should be to figure out how you’re going to measure and analyse results — and identify the changes that made the most impact on your conversion funnel. 

    After all, your CRO action plan should be based on data — assumptions and “gut feelings” will rarely lead to a notable increase in conversion rates

    Illustration of the conversion funnel

    That brings us to key performance indicators (KPIs) : 

    Tracking CRO metrics and website KPIs can help you understand the customer’s journey and path to purchase, identify opportunities for improving the user experience (UX) and determine how to optimise conversions.

    That said, you shouldn’t try to track every metric in the book ; think about your ultimate goal and identify the metrics and KPIs most relevant to your business. 

    We’ll assume that you’re already tracking macro- and micro-conversions. However, we’ve outlined a few additional key conversion rate optimisation metrics you should keep an eye on to make sure that your CRO program is performing as intended : 

    • Cost-per-conversion : By measuring how much you spend on each successful conversion — again, completed forms, sign-ups and sales all count as key conversion moments — you’ll be in a better position to assess the cost-effectiveness of your online marketing strategies.
    • Starter rate : This metric tells you the number of people who start filling out the form, after seeing it. This metric is particularly important for companies that rely on getting leads from forms. 
    • Average order value (AOV) : This metric is important for e-commerce sites to understand the value of their transactions. AOV calculates the average monetary value of each order.

    That’s not all ; you can also use a web analytics tool like Matomo to gain granular insights into visitors : 

    • Unique, new and returning visitors : Tracking the number of new and returning visitors your website gets within a given timeframe will help you understand your user base and determine if your content resonates with them. While you want a constant stream of new traffic, don’t overlook the importance of returning visitors ; they’re the foundation of a loyal customer base.
    • User flows : By analysing the user flows, you’ll have a visual representation of how visitors use your website, which will help you understand their journey and the specific path they take. 
    • Bounce rate : This metric tells you how many users viewed a single page on your site and ended up leaving before they took any kind of action. As such, it’s a clear indicator of how good your content, CTAs and website layout are at keeping users engaged.
    • Exit rate : Another key metric to track is the exit rate — the percentage of users who drop off at a specific page. High-exit pages usually lack important information and CTAs, cause frustration or otherwise fail to meet users’ expectations. Keep in mind that there’s a difference between bounce rate and exit rate — the latter involves users who viewed at least one other page. 

    There are many other user engagement metrics you should keep an eye on in addition to the ones mentioned above — including time on-page, actions per visit, scroll depth and traffic source. You’ll find all this information — and more — in Matomo’s Page Analytics Report

    Conclusion 

    Implementing a CRO program can be a time-consuming and iterative process. However, it’s vital for guiding your marketing efforts and making data-driven decisions that’ll ultimately help you drive growth and reach your business goals. 

    It’s best to start by identifying where your website visitors come from and what contributes to — or prevents them from — taking further action. But that’s easier said than done. You’ll need to leverage web analytics tools like Matomo to gather powerful user insights and monitor your website’s performance. 

    As an all-in-one, privacy-friendly web analytics solution, Matomo combines traditional web analytics and advanced behavioural analytics — delivering a consistent experience based on 100% accurate, unsampled data.

    Join the 1 million websites that have chosen Matomo as their web analytics platform. Start your 21-day free trial today — and see how Matomo can help you improve your website’s conversion rates. No credit card required.