adding datetime tag to pipeline

Pablo Rodríguez oinos at web.de
Sat Apr 16 15:22:05 UTC 2022


On 4/16/22 13:28, Pablo Rodríguez via gstreamer-devel wrote:
> [...]
> I wonder whether this will work.

I have tried this code in the following script.

I get no error messages and no metadata.

To the best (of my extremely limited) knowledge, this should add
metadata to the recorded file.

What am I doing wrong or what am I missing?

Background for this comes from
https://sourceforge.net/p/gentrans/code/ci/master/tree/tools/entrans.py#l2803

Many thanks for your help,

Pablo


import sys
import gi
gi.require_version("Gtk", "3.0")
gi.require_version("Gst", "1.0")
from gi.repository import Gtk, Gdk, GObject, Gst

Gst.init(sys.argv)

class record:
    def __init__(self):
        self.audiofilename = "recording.mp3"

        self.win = Gtk.Window()
        self.win.set_title("recording script")
        self.win.set_default_size(500, 500)
        self.win.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
        self.vbox = Gtk.VBox()

        self.win.connect("destroy", Gtk.main_quit)
        self.win.show_all()

        self.win.connect('key-press-event', self.key_press_event)

        self.player = Gst.parse_launch("autoaudiosrc ! audio/x-raw !
lamemp3enc ! id3v2mux ! filesink location=\"" + self.audiofilename + "\"")

        bus = self.player.get_bus()
        bus.add_signal_watch()
        bus.connect('message', self.on_message)

        tags_dict = { "title" : "The Title" }
        tags_dict["artist"] = "The Artist"
        tags_dict["datetime"] = Gst.DateTime.new_now_local_time()

        tagsetter = self.player.get_by_interface(Gst.TagSetter)
        taglist = Gst.TagList.new_empty()
        for tag_key, tag_value in tags_dict.items():
            try:
              taglist.add_value(Gst.TagMergeMode.REPLACE, tag_key,
tag_value)
            except ValueError:
              print("WARNING: skipping tag %s; value %s is not valid" %
(tag_key, tag_value))
        if not taglist.is_empty():
            tagsetter.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL)
        else:
            print("<<<< WARNING: Could not find element to set tags. >>>")

    def on_message(self, bus, message):
        t = message.type
        if t == Gst.MessageType.EOS:
            self.player.set_state(Gst.State.NULL)
            Gtk.main_quit()
        elif t == Gst.MessageType.ERROR:
            err, debug = message.parse_error()
            print ("Error: %s" % err, debug)
            self.player.set_state(Gst.State.NULL)

    def key_press_event(self, widget, event):
        if event.keyval == Gdk.keyval_from_name("space"):
            if self.player.get_state(0)[1] == Gst.State.NULL:
                self.player.set_state(Gst.State.PLAYING)
                self.win.set_title("recording...")
            elif self.player.get_state(0)[1] == Gst.State.PLAYING:
                self.player.send_event(Gst.Event.new_eos())
                self.win.set_title("Bye...")

    def gtk_main_quit(self, widget, event):
        Gtk.main_quit()

    def main(self):
        Gtk.main()

rec = record()
rec.main()



More information about the gstreamer-devel mailing list