Как следует интерпретировать свойство временной метки gstreamer multifilesink? - PullRequest
0 голосов
/ 01 апреля 2019

Я использую элемент multifilesink в C. multifilesink создает имена файлов с индексом, но мне нужны имена файлов с отметкой времени.Удобно, что multifilesink отправляет сообщение шины после записи каждого файла, а в данных сообщения он предоставляет структуру glib, содержащую имя файла и временную метку.Я установил код для отслеживания сообщения и вызова функции для переименования каждого файла следующим образом:

"file-01.jpg" становится "file-DDMMYYYY_HHMMSS.sss.jpg"

Я могу успешно получить сообщение и вызывать свою функцию каждый раз, когда записывается файл.

Проблема в том, что я не понимаю значение метки времени.Это не похоже на время эпохи Unix, оно не является монотонным, и часто значение является отрицательным или нулевым.

// My function to handle multifilesink messages
static gboolean HandleElementMessages( GstMessage *MessagePtr )
{
    const GstStructure* MessageStructurePtr;
    gboolean success = TRUE;

    MessageStructurePtr = gst_message_get_structure( MessagePtr );
    g_print( "Received an element message from an element of type \"%s\" at time %ld\n", 
        gst_structure_get_name( MessageStructurePtr ), 
        GST_MESSAGE_TIMESTAMP( MessageStructurePtr ) 
        );

    return success;
} // End of HandleElementMessages()

Я ожидаю, что GST_MESSAGE_TIMESTAMP () должна вернуть монотонно увеличивающееся значение, которое связанов эпоху или какую-то отправную точку, которую я могу понять.Вместо этого я вижу такие результаты:

Received an element message from an element of type "GstMultiFileSink" at time 3282
Received an element message from an element of type "GstMultiFileSink" at time 0
Received an element message from an element of type "GstMultiFileSink" at time 2
Received an element message from an element of type "GstMultiFileSink" at time 0
Received an element message from an element of type "GstMultiFileSink" at time 0
Received an element message from an element of type "GstMultiFileSink" at time 140662536522192
Received an element message from an element of type "GstMultiFileSink" at time -3543839906708188932
...

1 Ответ

1 голос
/ 02 апреля 2019

Вот код, структура которого отправляется на шину:

  s = gst_structure_new ("GstMultiFileSink",
      "filename", G_TYPE_STRING, filename,
      "index", G_TYPE_INT, multifilesink->index,
      "timestamp", G_TYPE_UINT64, timestamp,
      "stream-time", G_TYPE_UINT64, stream_time,
      "running-time", G_TYPE_UINT64, running_time,
      "duration", G_TYPE_UINT64, duration,
      "offset", G_TYPE_UINT64, offset,
      "offset-end", G_TYPE_UINT64, offset_end, NULL);

Поэтому, когда вы получите свою структуру, вы должны использовать некоторые функции GstStructure для получения данных, которые вас интересуют:

guint64 timestamp;

gst_structure_get_uint64(MessageStructurePtr, "timestamp", &timestamp);
...