<div dir="ltr">I'm having some trouble using GStreamer with gjs. I wasn't sure whether it was supposed top be supported at all, because Javascript isn't mentioned in its <a href="https://gstreamer.freedesktop.org/bindings/">list of bindings</a>, and other bindings, like python, seem to need help from custom bindings instead of being able to rely on gi alone. But the API docs support Javascript, so it seems like gjs is intended to be supported.<div><br></div><div>However, problems started almost immediately. The first is that if I call Gst.init(ARGV) it crashes with an attempt to free a block of memory that isn't freeable. I solved that by simply passing null instead, and I guess I could find a workaround if I really do need it to process ARGV.</div><div><br></div><div>More problems occurred when I attempted to write a very simple pipeline, similar to the playbin example:</div><div><font face="monospace"><br></font></div><div><font face="monospace">function bus_cb(bus, message) {<br>    log(`Got GstMessage type ${gst.message_type_get_name(message.type)}`);</font></div><div><font face="monospace">    ...<br>    return true;<br>}<br></font><div><font face="monospace"><br></font></div><div><font face="monospace">const playbin = gst.ElementFactory.make("playbin", "play");<br>playbin.get_bus().add_watch(glib.PRIORITY_DEFAULT, bus_cb);<br>playbin.set_property("uri", uri);<br>playbin.set_state(gst.State.PLAYING);<br></font></div><div><font face="monospace">const playbin = gst.ElementFactory.make("playbin", "play");<br>playbin.get_bus().add_watch_full(glib.PRIORITY_DEFAULT, bus_cb);<br>playbin.set_property("uri", uri);<br>playbin.set_state(gst.State.PLAYING);</font><br></div><div><br></div><div>(The URI I'm using is HTTP to stream DVB as an MPEG transport stream from tvheadend, but I have the same problem if I try to use a file:/// for a saved mpeg.ts instead).</div><div><br></div><div>First, note that although the API docs say you need to use <font color="#741b47">add_watch_full()</font><font color="#000000">, AFAICT you actually have to use </font><font color="#741b47">add_watch()</font><font color="#000000"> with arguments as for </font><font color="#741b47">add_watch_full()</font><font color="#000000">, because the latter doesn't exist in gjs. This is something to do with the 'full' version shadowing the other, which I don't fully understand, but I managed to work it out by looking at the output of ts-for-gjs.</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">The main problem though is that the pipeline only runs for a few seconds, then crashes with this error:</font></div><div><br></div><div><font color="#990000">Trying to dispose element inputselector2, but it is in PLAYING instead of the NULL state.</font><br></div><div><br></div><div>I haven't tested whether this is specific to gjs, or also occurs in python or even C, but I get the same error in OS X as well as Arch Linux. Both are using gstreamer 1.18.0.</div><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">TH<div><br></div></div></div></div></div>