Recherche avancée

Médias (91)

Autres articles (50)

  • Amélioration de la version de base

    13 septembre 2013

    Jolie sélection multiple
    Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
    Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)

  • Menus personnalisés

    14 novembre 2010, par

    MediaSPIP utilise le plugin Menus pour gérer plusieurs menus configurables pour la navigation.
    Cela permet de laisser aux administrateurs de canaux la possibilité de configurer finement ces menus.
    Menus créés à l’initialisation du site
    Par défaut trois menus sont créés automatiquement à l’initialisation du site : Le menu principal ; Identifiant : barrenav ; Ce menu s’insère en général en haut de la page après le bloc d’entête, son identifiant le rend compatible avec les squelettes basés sur Zpip ; (...)

  • Les tâches Cron régulières de la ferme

    1er décembre 2010, par

    La gestion de la ferme passe par l’exécution à intervalle régulier de plusieurs tâches répétitives dites Cron.
    Le super Cron (gestion_mutu_super_cron)
    Cette tâche, planifiée chaque minute, a pour simple effet d’appeler le Cron de l’ensemble des instances de la mutualisation régulièrement. Couplée avec un Cron système sur le site central de la mutualisation, cela permet de simplement générer des visites régulières sur les différents sites et éviter que les tâches des sites peu visités soient trop (...)

Sur d’autres sites (6069)

  • gstreamer : Internal data error, in appsink "pull-sample" mode

    9 mai 2018, par Amir Raza

    I am getting Internal data error, in appsink .
    My application is to read .yuv data , encode and write to a buffer.

    I have accomplished the writing it file but when i changed the code to write it buffer it giving error.
    Its only able to write only single packet (188bytes).

    Output of program :

    (ConsoleApplication6.exe:14432): GStreamer-WARNING **: Failed to load plugin 'C:\gstreamer\1.0\x86_64\lib\gstreamer-1.0\libgstopenh264.dll': 'C:\gstreamer\1.0\x86_64\lib\gstreamer-1.0\libgstopenh264.dll': The specified procedure could not be found.
       pipeline:  filesrc location=Transformers1080p.yuv blocksize=4147200 ! videoparse  width=1920 height=1080 framerate=60/1 ! videoconvert ! video/x-raw,format=I420,width=1920,height=1080,framerate=60/1 !  x264enc ! mpegtsmux ! queue !  appsink name = sink
       Now playing: Transformers1080p.yuv
       Running...

        on_new_sample_from_sink

        sample got of size = 188
       Error: Internal data stream error.
       Returned, stopping playback
       Deleting pipeline

    my code :

    #define _CRT_SECURE_NO_WARNINGS 1
    //#pragma warning(disable:4996)
    #include <gst></gst>gst.h>
    #include <gst></gst>audio/audio.h>
    #include <gst></gst>app/gstappsrc.h>
    #include <gst></gst>base/gstpushsrc.h>
    #include <gst></gst>app/gstappsink.h>
    #include <gst></gst>video/video.h>
    #include <gst></gst>video/gstvideometa.h>
    #include <gst></gst>video/video-overlay-composition.h>

    #include
    #include

    #include
    #include

    using namespace std;

    GstElement *SinkBuff;
    char *out_file_path;
    FILE *out_file;

    //gst-launch-1.0.exe -v filesrc location=Transformers1080p.yuv blocksize=4147200 !  
    //videoconvert ! video/x-raw,format=I420,width=1920,height=1080,framerate=60/1 !  
    //openh264enc ! mpegtsmux ! filesink location=final.ts


    static gboolean bus_call(GstBus     *bus, GstMessage *msg, gpointer    data)
    {
           GMainLoop *loop = (GMainLoop *)data;

           switch (GST_MESSAGE_TYPE(msg))
           {
           case GST_MESSAGE_EOS:
                   g_print("End of stream\n");
                   g_main_loop_quit(loop);
                   break;

           case GST_MESSAGE_ERROR:
             {
                   gchar  *debug;
                   GError *error;

                   gst_message_parse_error(msg, &amp;error, &amp;debug);
                   g_free(debug);

                   g_printerr("Error: %s\n", error->message);
                   g_error_free(error);

                   g_main_loop_quit(loop);
                   break;
             }
           default:
                   break;
       }
           return TRUE;
    }

    /* called when the appsink notifies us that there is a new buffer ready for
    * processing */
    static void  on_new_sample_from_sink(GstElement * elt, void *ptr)
    {
           guint size;
           GstBuffer *app_buffer, *buffer;
           GstElement *source;
           GstMapInfo map = { 0 };
           GstSample *sample;
           static GstClockTime timestamp = 0;
           printf("\n on_new_sample_from_sink \n ");
           /* get the buffer from appsink */
           g_signal_emit_by_name(SinkBuff, "pull-sample", &amp;sample, NULL);
           if (sample)
           {
                   buffer = gst_sample_get_buffer(sample);
                   gst_buffer_map(buffer, &amp;map, GST_MAP_READ);

                   printf("\n sample got of size = %d \n", map.size);
                   //Buffer
                   fwrite((char *)map.data, 1, sizeof(map.size), out_file);

                   gst_buffer_unmap(buffer, &amp;map);
                   gst_sample_unref(sample);
           }
    }


    int main(int   argc, char *argv[])
    {
           GMainLoop *loop;
           int width, height;

           GstElement *pipeline;
           GError *error = NULL;
           GstBus *bus;
           char pipeline_desc[1024];
           out_file = fopen("output.ts", "wb");


           /* Initialisation */
           gst_init(&amp;argc, &amp;argv);

           // Create gstreamer loop
           loop = g_main_loop_new(NULL, FALSE);

           sprintf(
                   pipeline_desc,
                   " filesrc location=Transformers1080p.yuv blocksize=4147200 !"
                   " videoparse  width=1920 height=1080 framerate=60/1 !"
                   " videoconvert ! video/x-raw,format=I420,width=1920,height=1080,framerate=60/1 ! "
                   //" x264enc ! mpegtsmux ! filesink location=final.ts");
                   " x264enc ! mpegtsmux ! queue !  appsink name = sink");


           printf("pipeline: %s\n", pipeline_desc);

           /* Create gstreamer elements */
           pipeline = gst_parse_launch(pipeline_desc, &amp;error);

           /* TODO: Handle recoverable errors. */

           if (!pipeline) {
                   g_printerr("Pipeline could not be created. Exiting.\n");
                   return -1;
           }

           /* get sink */
           SinkBuff = gst_bin_get_by_name(GST_BIN(pipeline), "sink");
           g_object_set(G_OBJECT(SinkBuff), "emit-signals", TRUE, "sync", FALSE, NULL);
           g_signal_connect(SinkBuff, "new-sample", G_CALLBACK(on_new_sample_from_sink), NULL);


           /* Set up the pipeline */
           /* we add a message handler */
           bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
           gst_bus_add_watch(bus, bus_call, loop);
           gst_object_unref(bus);

           /* Set the pipeline to "playing" state*/
           g_print("Now playing: Transformers1080p.yuv \n");
           gst_element_set_state(pipeline, GST_STATE_PLAYING);

           /* Iterate */
           g_print("Running...\n");
           g_main_loop_run(loop);

           /* Out of the main loop, clean up nicely */
           g_print("Returned, stopping playback\n");
           gst_element_set_state(pipeline, GST_STATE_NULL);

           g_print("Deleting pipeline\n");
           gst_object_unref(GST_OBJECT(pipeline));
           fclose(out_file);
           g_main_loop_unref(loop);


           return 0;
    }
  • FFMPEG "listfile.txt : Invalid data found when processing input" concat error

    18 juillet 2019, par Léandre

    I have a txt file, where I have all my mp4 file to concat with ffmpeg. I saw the documentation of FFMPEG but I don’t see where I did something wrong.

    Here is my txt file :

    file '/home/leandre/PycharmProjects/video_test/1.mp4'
    file '/home/leandre/PycharmProjects/video_test/2.mp4'
    file '/home/leandre/PycharmProjects/video_test/3.mp4'
    file '/home/leandre/PycharmProjects/video_test/4.mp4'
    file '/home/leandre/PycharmProjects/video_test/5.mp4'
    file '/home/leandre/PycharmProjects/video_test/6.mp4'
    file '/home/leandre/PycharmProjects/video_test/7.mp4'
    file '/home/leandre/PycharmProjects/video_test/8.mp4'
    file '/home/leandre/PycharmProjects/video_test/9.mp4'
    file '/home/leandre/PycharmProjects/video_test/10.mp4'

    And this is my ffmpeg command : ffmpeg -f concat -safe 0 -i listfile.txt -c copy out_concat.mp4

    And my error listfile.txt: Invalid data found when processing input

  • How to batch "touch" files in subfolder with data from parent folder

    12 août 2019, par Constantine Grigorakis

    I have a folder named "Video" on my Desktop and inside that folder are a bunch of .MTS video files. (00000.MTS, 00001.MTS, 00002.MTS etc...)

    There is also a subfolder "H.265" (Video > H.265) which contains files (00000.mp4, 00001.mp4, 00002.mp4 etc...) which were made by converting the files from the parent folder. The problem is they don’t contain the correct date created metadata.

    I want to use the command

    touch -r 00000.MTS 00000.mp4
    touch -r 00001.MTS 00001.mp4
    ...
    touch -r 000mn.MTS 000mn.mp4

    to copy the date from the MTS to the mp4 file.

    Is there a way I could write a for loop or something to do this for every single file ?

    I am using MacOS Mojave.