Recherche avancée

Médias (91)

Autres articles (111)

  • Ajouter des informations spécifiques aux utilisateurs et autres modifications de comportement liées aux auteurs

    12 avril 2011, par

    La manière la plus simple d’ajouter des informations aux auteurs est d’installer le plugin Inscription3. Il permet également de modifier certains comportements liés aux utilisateurs (référez-vous à sa documentation pour plus d’informations).
    Il est également possible d’ajouter des champs aux auteurs en installant les plugins champs extras 2 et Interface pour champs extras.

  • Librairies et binaires spécifiques au traitement vidéo et sonore

    31 janvier 2010, par

    Les logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
    Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
    Binaires complémentaires et facultatifs flvtool2 : (...)

  • ANNEXE : Les plugins utilisés spécifiquement pour la ferme

    5 mars 2010, par

    Le site central/maître de la ferme a besoin d’utiliser plusieurs plugins supplémentaires vis à vis des canaux pour son bon fonctionnement. le plugin Gestion de la mutualisation ; le plugin inscription3 pour gérer les inscriptions et les demandes de création d’instance de mutualisation dès l’inscription des utilisateurs ; le plugin verifier qui fournit une API de vérification des champs (utilisé par inscription3) ; le plugin champs extras v2 nécessité par inscription3 (...)

Sur d’autres sites (9752)

  • Lean Analytics in a Privacy-First Environment – Bootcamp with Timo Dechau

    In a recent bootcamp, Timo Dechau walked attendees through his approach to data and measurement in privacy-focused analytics environments. He demonstrates how to shift from a chaotic, ‘track-it-all’ mentality to a focused method that prioritizes quality over quantity. This post will summarize some of his key privacy-first analytics ideas, but be sure to check out the on-demand video for more detail.

    Watch the bootcamp on demand

    <script type="text/javascript">var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[n][o]&&((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==n?t.apply(null,r):r[0]=t.apply(null,r)})),"filter"==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&&(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&&i!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][n]=r)}});</script>
    &lt;script&gt;<br />
    gform.initializeOnLoaded( function() {gformInitSpinner( 72, 'https://matomo.org/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery('#gform_ajax_frame_72').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') &gt;= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_72');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_72').length &gt; 0;var is_redirect = contents.indexOf('gformRedirect(){') &gt;= 0;var is_form = form_content.length &gt; 0 &amp;&amp; ! is_redirect &amp;&amp; ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_72').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_72').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_72').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */  }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_72').val();gformInitSpinner( 72, 'https://matomo.org/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery(document).trigger('gform_page_loaded', [72, current_page]);window['gf_submitting_72'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_72').replaceWith(confirmation_content);jQuery(document).trigger('gform_confirmation_loaded', [72]);window['gf_submitting_72'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_72').text());}, 50);}else{jQuery('#gform_72').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger(&quot;gform_pre_post_render&quot;, [{ formId: &quot;72&quot;, currentPage: &quot;current_page&quot;, abort: function() { this.preventDefault(); } }]);                if (event.defaultPrevented) {                return;         }        const gformWrapperDiv = document.getElementById( &quot;gform_wrapper_72&quot; );        if ( gformWrapperDiv ) {            const visibilitySpan = document.createElement( &quot;span&quot; );            visibilitySpan.id = &quot;gform_visibility_test_72&quot;;            gformWrapperDiv.insertAdjacentElement( &quot;afterend&quot;, visibilitySpan );        }        const visibilityTestDiv = document.getElementById( &quot;gform_visibility_test_72&quot; );        let postRenderFired = false;                function triggerPostRender() {            if ( postRenderFired ) {                return;            }            postRenderFired = true;            jQuery( document ).trigger( 'gform_post_render', [72, current_page] );            gform.utils.trigger( { event: 'gform/postRender', native: false, data: { formId: 72, currentPage: current_page } } );            if ( visibilityTestDiv ) {                visibilityTestDiv.parentNode.removeChild( visibilityTestDiv );            }        }        function debounce( func, wait, immediate ) {            var timeout;            return function() {                var context = this, args = arguments;                var later = function() {                    timeout = null;                    if ( !immediate ) func.apply( context, args );                };                var callNow = immediate &amp;&amp; !timeout;                clearTimeout( timeout );                timeout = setTimeout( later, wait );                if ( callNow ) func.apply( context, args );            };        }        const debouncedTriggerPostRender = debounce( function() {            triggerPostRender();        }, 200 );        if ( visibilityTestDiv &amp;&amp; visibilityTestDiv.offsetParent === null ) {            const observer = new MutationObserver( ( mutations ) =&gt; {                mutations.forEach( ( mutation ) =&gt; {                    if ( mutation.type === 'attributes' &amp;&amp; visibilityTestDiv.offsetParent !== null ) {                        debouncedTriggerPostRender();                        observer.disconnect();                    }                });            });            observer.observe( document.body, {                attributes: true,                childList: false,                subtree: true,                attributeFilter: [ 'style', 'class' ],            });        } else {            triggerPostRender();        }    } );} );<br />
    &lt;/script&gt;
    the consequences of more data are missing and incomplete data that messes up attribution and measurement.

    Unrestrained data collection leads to data bloat

    Marketing and the business world are experiencing a data problem. Analysts and business intelligence teams grapple with large amounts of data that aren’t always useful and are often incomplete. The idea that “more data is better” became a guiding principle in the early 2000s, encouraging companies to gather everything possible using all available data collection methods. This unrestrained pursuit often led to an unexpected problem : data bloat. Too much data, too little clarity. Digital marketers, analysts, and business leaders now try to navigate vast amounts of information that create more confusion than insight, especially when the data is incomplete due to privacy regulations.

    Cutting through the noise, focusing on what matters

    The “more data is better” mindset emerged when digital marketers were beginning to understand data’s potential. It seemed logical : more data should mean more opportunities to optimise, personalise, and drive results. But in practice, gathering every possible piece of data often leads to a cluttered, confusing pile of metrics that can mislead more than guide.

    This approach carries hidden costs. Excessive data collection burns resources, increases privacy concerns, and leaves teams unfocused. It’s easy to get lost trying to make sense of endless dashboards, metrics, and reports. More data doesn’t necessarily lead to better decisions ; it often just leads to more noise, hindering effective data management.

    Rethinking data management : From data overload to data mindfulness

    Data management has often prioritised comprehensive data gathering without considering the specific value of each data point. This approach has created more information, but not necessarily better insights.

    Data mindfulness is about taking a deliberate, focused approach to data collection and analysis. Instead of trying to collect everything, it emphasises gathering only what truly adds value. It’s about ensuring the data you collect serves a purpose and directly contributes to better insights and data-driven decision-making.

    Think of it like applying a “lean” methodology to data—trimming away the unnecessary and keeping only what is essential. Or consider embracing data minimalism to declutter your data warehouse, keeping only what truly sparks insight.

    Mindful data is ethical data

    Adopting a mindful approach to data can pay off in several ways :

    • Reduces overwhelm : When you reduce the clutter, you’re left with fewer, clearer metrics that lead to stronger decisions and actionable data insights.

    • Mitigates compliance risks : By collecting less, companies align better with privacy regulations and build trust with their customers. Privacy-first analytics and privacy-compliant analytics practices mean there’s no need for invasive tracking if it doesn’t add value—and customers will appreciate that.

    • Enhances data ethics : Focusing on the quality rather than the quantity of data collected ensures ethical data collection and management. Companies use data responsibly, respect user privacy, and minimise unnecessary data handling, strengthening customer relationships and brand integrity.

    • Improves data efficiency : Focused analytics means better use of resources. You’re spending less time managing meaningless metrics and more time working on meaningful insights. Many companies have found success by switching to a leaner, quality-first data approach, reporting sharper, more impactful results.

    Shifting towards simplicity and lean analytics

    If data mindfulness sounds appealing, here’s how you can get started :

    1. Ask the right questions. Before collecting any data, ask yourself : Why are we collecting this ? How will it drive value ? If you can’t answer these questions clearly, that data probably isn’t worth collecting. This is a key step in smart data management.

    2. Simplify metrics. Focus on the KPIs that truly matter for your business. Choose a handful of key metrics that reflect your goals rather than a sprawling list of nice-to-haves. Embracing data simplicity helps in targeting data collection effectively.

    3. Audit your current data. Review your existing data collection processes. Which metrics are you actively using to make decisions ? Eliminate any redundant or low-value metrics that create noise. Use ethical data management practices to ensure data efficiency and compliance. Understanding what is data management in this context is crucial.

    4. Implement lean analytics practices. Shift towards lean analytics by cutting down on unnecessary tracking. This can involve reducing reliance on multiple tracking scripts, simplifying your reporting, and setting up a streamlined dashboard focused on key outcomes. Embrace data reduction strategies to eliminate waste and boost effectiveness.

    Who should watch this bootcamp

    This bootcamp is perfect for data analysts, product managers, digital marketers and business leaders who are seeking a more streamlined approach to data measurement. If you’re interested in moving away from a chaotic “track-it-all” mentality and towards a focused, lean, and privacy-first analytics strategy, this workshop is for you.

    What you’ll discover

    • Practical steps : Learn actionable strategies to reduce data bloat and implement lean, privacy-first analytics in your organisation.

    • Real-life examples : Explore case studies of companies that have successfully adopted focused and privacy-first analytics.

    • Deep insights : Gain a deeper understanding of how to prioritise quality over quantity without sacrificing valuable insights.

    Watch the bootcamp on-demand

    For a comprehensive dive into these topics, watch the full workshop video or download the detailed transcript. Equip yourself with the knowledge and tools to transform your data management approach today.

    &lt;script&gt;<br />
    gform.initializeOnLoaded( function() {gformInitSpinner( 72, 'https://matomo.org/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery('#gform_ajax_frame_72').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') &gt;= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_72');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_72').length &gt; 0;var is_redirect = contents.indexOf('gformRedirect(){') &gt;= 0;var is_form = form_content.length &gt; 0 &amp;&amp; ! is_redirect &amp;&amp; ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_72').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_72').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_72').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */  }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_72').val();gformInitSpinner( 72, 'https://matomo.org/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery(document).trigger('gform_page_loaded', [72, current_page]);window['gf_submitting_72'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_72').replaceWith(confirmation_content);jQuery(document).trigger('gform_confirmation_loaded', [72]);window['gf_submitting_72'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_72').text());}, 50);}else{jQuery('#gform_72').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger(&quot;gform_pre_post_render&quot;, [{ formId: &quot;72&quot;, currentPage: &quot;current_page&quot;, abort: function() { this.preventDefault(); } }]);                if (event.defaultPrevented) {                return;         }        const gformWrapperDiv = document.getElementById( &quot;gform_wrapper_72&quot; );        if ( gformWrapperDiv ) {            const visibilitySpan = document.createElement( &quot;span&quot; );            visibilitySpan.id = &quot;gform_visibility_test_72&quot;;            gformWrapperDiv.insertAdjacentElement( &quot;afterend&quot;, visibilitySpan );        }        const visibilityTestDiv = document.getElementById( &quot;gform_visibility_test_72&quot; );        let postRenderFired = false;                function triggerPostRender() {            if ( postRenderFired ) {                return;            }            postRenderFired = true;            jQuery( document ).trigger( 'gform_post_render', [72, current_page] );            gform.utils.trigger( { event: 'gform/postRender', native: false, data: { formId: 72, currentPage: current_page } } );            if ( visibilityTestDiv ) {                visibilityTestDiv.parentNode.removeChild( visibilityTestDiv );            }        }        function debounce( func, wait, immediate ) {            var timeout;            return function() {                var context = this, args = arguments;                var later = function() {                    timeout = null;                    if ( !immediate ) func.apply( context, args );                };                var callNow = immediate &amp;&amp; !timeout;                clearTimeout( timeout );                timeout = setTimeout( later, wait );                if ( callNow ) func.apply( context, args );            };        }        const debouncedTriggerPostRender = debounce( function() {            triggerPostRender();        }, 200 );        if ( visibilityTestDiv &amp;&amp; visibilityTestDiv.offsetParent === null ) {            const observer = new MutationObserver( ( mutations ) =&gt; {                mutations.forEach( ( mutation ) =&gt; {                    if ( mutation.type === 'attributes' &amp;&amp; visibilityTestDiv.offsetParent !== null ) {                        debouncedTriggerPostRender();                        observer.disconnect();                    }                });            });            observer.observe( document.body, {                attributes: true,                childList: false,                subtree: true,                attributeFilter: [ 'style', 'class' ],            });        } else {            triggerPostRender();        }    } );} );<br />
    &lt;/script&gt;
  • GStreamer : How to set "stream-number" pad property of mpegtsmux element ? [closed]

    8 novembre 2024, par TishSerg

    Accroding to gst-inspect-1.0 mpegtsmux, mpegtsmux's sink pads have writable stream-number property :

    &#xA;

    ...&#xA;Pad Templates:&#xA;  SINK template: &#x27;sink_%d&#x27;&#xA;    Availability: On request&#xA;    Capabilities:&#xA;      ...&#xA;    Type: GstBaseTsMuxPad&#xA;    Pad Properties:&#xA;      ...&#xA;&#xA;      stream-number       : stream number&#xA;                            flags: readable, writable&#xA;                            Integer. Range: 0 - 31 Default: 0&#xA;

    &#xA;

    But when I try to set it, GStreamer says there's no such property. The following listing shows I can run multi-stream pipeline without setting that property, but when I add that property it doesn't work.

    &#xA;

    PS C:\gstreamer\1.0\msvc_x86_64\bin> ./gst-launch-1.0 mpegtsmux name=mux ! udpsink host=192.168.144.255 port=5600 sync=no `&#xA;>> videotestsrc is-live=true pattern=ball ! "video/x-raw, width=1920, height=1080, profile=main" ! x264enc ! mux.sink_300 `&#xA;>> videotestsrc is-live=true ! "video/x-raw, width=720, height=576" ! x264enc ! mux.sink_301&#xA;Use Windows high-resolution clock, precision: 1 ms&#xA;Setting pipeline to PAUSED ...&#xA;Pipeline is live and does not need PREROLL ...&#xA;Pipeline is PREROLLED ...&#xA;Setting pipeline to PLAYING ...&#xA;New clock: GstSystemClock&#xA;Redistribute latency...&#xA;Redistribute latency...&#xA;Redistribute latency...&#xA;handling interrupt.9.&#xA;Interrupt: Stopping pipeline ...&#xA;Execution ended after 0:00:03.773243400&#xA;Setting pipeline to NULL ...&#xA;Freeing pipeline ...&#xA;PS C:\gstreamer\1.0\msvc_x86_64\bin> ./gst-launch-1.0 mpegtsmux name=mux sink_300::stream-number=1 ! udpsink host=192.168.144.255 port=5600 sync=no `&#xA;>> videotestsrc is-live=true pattern=ball ! "video/x-raw, width=1920, height=1080, profile=main" ! x264enc ! mux.sink_300 `&#xA;>> videotestsrc is-live=true ! "video/x-raw, width=720, height=576" ! x264enc ! mux.sink_301&#xA;WARNING: erroneous pipeline: no property "sink_300::stream-number" in element "mpegtsmux"&#xA;PS C:\gstreamer\1.0\msvc_x86_64\bin> .\gst-launch-1.0.exe --version&#xA;gst-launch-1.0 version 1.24.8&#xA;GStreamer 1.24.8&#xA;Unknown package origin&#xA;PS C:\gstreamer\1.0\msvc_x86_64\bin> .\gst-launch-1.0.exe --version&#xA;gst-launch-1.0 version 1.24.9&#xA;GStreamer 1.24.9&#xA;Unknown package origin&#xA;PS C:\gstreamer\1.0\msvc_x86_64\bin> ./gst-launch-1.0 mpegtsmux name=mux sink_300::stream-number=1 ! udpsink host=192.168.144.255 port=5600 sync=no `&#xA;>> videotestsrc is-live=true pattern=ball ! "video/x-raw, width=1920, height=1080, profile=main" ! x264enc ! mux.sink_300 `&#xA;>> videotestsrc is-live=true ! "video/x-raw, width=720, height=576" ! x264enc ! mux.sink_301&#xA;WARNING: erroneous pipeline: no property "sink_300::stream-number" in element "mpegtsmux"&#xA;

    &#xA;

    I even updated GStreamer, but still no luck. I tried that because I found news saying there were updates regarding that property :

    &#xA;

      397 ### MPEG-TS improvements&#xA;  398 &#xA;  399 -   mpegtsdemux gained support for&#xA;  400     -   segment seeking for seamless non-flushing looping, and&#xA;  401     -   synchronous KLV&#xA;  402 -   mpegtsmux now&#xA;  403     -   allows attaching PCR to non-PES streams&#xA;  404     -   allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the&#xA;  405         muxer sink pads. Currently, the PES stream number is hard-coded to zero for these stream types.&#xA;

    &#xA;

    The syntax seems correct (pad_name::pad_prop_name on the element). I ran out of ideas about what I'm doing wrong with that property.

    &#xA;

    Broader context :

    &#xA;

    I want to set that property because I want an exact sequence of streams I mixing.

    &#xA;

    When I feed mpegtsmux with two video streams and one audio stream (from capture devices) without specifying the stream numbers I get them muxed in a random sequence (checking it using ffprobe). Sometimes they are in the desired sequence, but sometimes they aren't. The worst case is when the audio stream is the first stream in the file, so video players get mad when trying to play such .ts file. I have to remux such files using -map key of ffmpeg. If I could set exact stream indices in mpegtsmux (not to be confused with stream PID) I could avoid analyzing actual stream layout and remuxing.

    &#xA;

    Example of the real layout of the streams (ffprobe output) :

    &#xA;

    Input #0, mpegts, from &#x27;████████████████████████████████████████&#x27;:&#xA;  Duration: 00:20:09.64, start: 3870.816656, bitrate: 6390 kb/s&#xA;  Program 1&#xA;  Stream #0:2[0x41]: Video: h264 (Baseline) (HDMV / 0x564D4448), yuvj420p(pc, bt709, progressive), 1920x1080, 30 fps, 30 tbr, 90k tbn&#xA;  Stream #0:1[0x4b]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, mono, fltp, 130 kb/s&#xA;  Program 2&#xA;  Stream #0:0[0x42]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p(progressive), 720x576, 25 fps, 25 tbr, 90k tbn&#xA;

    &#xA;

    You can see 3 streams :

    &#xA;

      &#xA;
    • FullHD video with PID 0x41 (defined by me as mpegtsmux0.sink_65) has index 2 while I want it to be 0
    • &#xA;

    • PAL video with PID 0x42 (defined by me as mpegtsmux0.sink_66) has index 0 while I want it to be 1
    • &#xA;

    • Audio with PID 0x4b (defined by me as mpegtsmux0.sink_75) has index 1 while I want it to be 2
    • &#xA;

    &#xA;

  • Unable to set "stream-number" pad property of mpegtsmux

    8 novembre 2024, par TishSerg

    Accroding to gst-inspect-1.0 mpegtsmux, mpegtsmux's sink pads have writable stream-number property :

    &#xA;

    ...&#xA;Pad Templates:&#xA;  SINK template: &#x27;sink_%d&#x27;&#xA;    Availability: On request&#xA;    Capabilities:&#xA;      ...&#xA;    Type: GstBaseTsMuxPad&#xA;    Pad Properties:&#xA;      ...&#xA;&#xA;      stream-number       : stream number&#xA;                            flags: readable, writable&#xA;                            Integer. Range: 0 - 31 Default: 0&#xA;

    &#xA;

    But when I try to set it, GStreamer says there's no such property. The following listing shows I can run multi-stream pipeline without setting that property, but when I add that property it doesn't work.

    &#xA;

    PS C:\gstreamer\1.0\msvc_x86_64\bin> ./gst-launch-1.0 mpegtsmux name=mux ! udpsink host=192.168.144.255 port=5600 sync=no `&#xA;>> videotestsrc is-live=true pattern=ball ! "video/x-raw, width=1920, height=1080, profile=main" ! x264enc ! mux.sink_300 `&#xA;>> videotestsrc is-live=true ! "video/x-raw, width=720, height=576" ! x264enc ! mux.sink_301&#xA;Use Windows high-resolution clock, precision: 1 ms&#xA;Setting pipeline to PAUSED ...&#xA;Pipeline is live and does not need PREROLL ...&#xA;Pipeline is PREROLLED ...&#xA;Setting pipeline to PLAYING ...&#xA;New clock: GstSystemClock&#xA;Redistribute latency...&#xA;Redistribute latency...&#xA;Redistribute latency...&#xA;handling interrupt.9.&#xA;Interrupt: Stopping pipeline ...&#xA;Execution ended after 0:00:03.773243400&#xA;Setting pipeline to NULL ...&#xA;Freeing pipeline ...&#xA;PS C:\gstreamer\1.0\msvc_x86_64\bin> ./gst-launch-1.0 mpegtsmux name=mux sink_300::stream-number=1 ! udpsink host=192.168.144.255 port=5600 sync=no `&#xA;>> videotestsrc is-live=true pattern=ball ! "video/x-raw, width=1920, height=1080, profile=main" ! x264enc ! mux.sink_300 `&#xA;>> videotestsrc is-live=true ! "video/x-raw, width=720, height=576" ! x264enc ! mux.sink_301&#xA;WARNING: erroneous pipeline: no property "sink_300::stream-number" in element "mpegtsmux"&#xA;PS C:\gstreamer\1.0\msvc_x86_64\bin> .\gst-launch-1.0.exe --version&#xA;gst-launch-1.0 version 1.24.8&#xA;GStreamer 1.24.8&#xA;Unknown package origin&#xA;PS C:\gstreamer\1.0\msvc_x86_64\bin> .\gst-launch-1.0.exe --version&#xA;gst-launch-1.0 version 1.24.9&#xA;GStreamer 1.24.9&#xA;Unknown package origin&#xA;PS C:\gstreamer\1.0\msvc_x86_64\bin> ./gst-launch-1.0 mpegtsmux name=mux sink_300::stream-number=1 ! udpsink host=192.168.144.255 port=5600 sync=no `&#xA;>> videotestsrc is-live=true pattern=ball ! "video/x-raw, width=1920, height=1080, profile=main" ! x264enc ! mux.sink_300 `&#xA;>> videotestsrc is-live=true ! "video/x-raw, width=720, height=576" ! x264enc ! mux.sink_301&#xA;WARNING: erroneous pipeline: no property "sink_300::stream-number" in element "mpegtsmux"&#xA;

    &#xA;

    I even updated GStreamer, but still no luck. I tried that because I found news saying there were updates regarding that property :

    &#xA;

      397 ### MPEG-TS improvements&#xA;  398 &#xA;  399 -   mpegtsdemux gained support for&#xA;  400     -   segment seeking for seamless non-flushing looping, and&#xA;  401     -   synchronous KLV&#xA;  402 -   mpegtsmux now&#xA;  403     -   allows attaching PCR to non-PES streams&#xA;  404     -   allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the&#xA;  405         muxer sink pads. Currently, the PES stream number is hard-coded to zero for these stream types.&#xA;

    &#xA;

    The syntax seems correct (pad_name::pad_prop_name on the element). I ran out of ideas about what I'm doing wrong with that property.

    &#xA;

    Broader context :

    &#xA;

    I want to set that property because I want an exact sequence of streams I mixing.

    &#xA;

    When I feed mpegtsmux with two video streams and one audio stream (from capture devices) without specifying the stream numbers I get them muxed in a random sequence (checking it using ffprobe). Sometimes they are in the desired sequence, but sometimes they aren't. The worst case is when the audio stream is the first stream in the file, so video players get mad when trying to play such .ts file. I have to remux such files using -map key of ffmpeg. If I could set exact stream indices in mpegtsmux (not to be confused with stream PID) I could avoid analyzing actual stream layout and remuxing.

    &#xA;

    Example of the real layout of the streams (ffprobe output) :

    &#xA;

    Input #0, mpegts, from &#x27;████████████████████████████████████████&#x27;:&#xA;  Duration: 00:20:09.64, start: 3870.816656, bitrate: 6390 kb/s&#xA;  Program 1&#xA;  Stream #0:2[0x41]: Video: h264 (Baseline) (HDMV / 0x564D4448), yuvj420p(pc, bt709, progressive), 1920x1080, 30 fps, 30 tbr, 90k tbn&#xA;  Stream #0:1[0x4b]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, mono, fltp, 130 kb/s&#xA;  Program 2&#xA;  Stream #0:0[0x42]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p(progressive), 720x576, 25 fps, 25 tbr, 90k tbn&#xA;

    &#xA;

    You can see 3 streams :

    &#xA;

      &#xA;
    • FullHD video with PID 0x41 (defined by me as mpegtsmux0.sink_65) has index 2 while I want it to be 0
    • &#xA;

    • PAL video with PID 0x42 (defined by me as mpegtsmux0.sink_66) has index 0 while I want it to be 1
    • &#xA;

    • Audio with PID 0x4b (defined by me as mpegtsmux0.sink_75) has index 1 while I want it to be 2
    • &#xA;

    &#xA;