gstreamer-superficial
Superficial GStreamer binding
What?
This is a superficial binding of GStreamer to Node.js. It does not attempt at being a complete binding, and will hopefully one day be replaced by (or implemented with) node-gir.
How?
const gstreamer = require('gstreamer-superficial');
const pipeline = new gstreamer.Pipeline(`videotestsrc ! textoverlay name=text
! autovideosink`);
pipeline.play();
Then, you can find an element within the pipeline, and set its properties:
const target = pipeline.findChild('text');
target.text = 'Hello';
Object.assign(target.text, {
text: 'Hello',
'font-desc': 'Helvetica 32',
})
(see also examples/basic-pipeline.js)
Pipeline also knows .stop()
, .pause()
and .pollBus()
,
the elements returned by .findChild()
getting and setting all properties the real GObject
s do, appsinks also support .pull()
(see below).
Polling the GStreamer Pipeline Bus
You can asynchronously handle bus messages using Pipeline.pollBus(callback):
pipeline.pollBus(msg => {
console.log(msg);
});
(see also examples/bus.js)
Handling binary data
You can feast off GStreamer's appsink to handle binary data.
.pull starts a background work queue and calls your callback whenever a buffer is (or caps are) available:
const appsink = pipeline.findChild('sink');
function onData(buf) {
console.log('BUFFER size', buf.length);
appsink.pull(onData);
}
appsink.pull(onData, caps => {
/* caps currently not implemented */
console.log('CAPS', caps);
});
(see examples/appsink.js)
A simple Ogg/Theora streaming server
is broken, but was once working as implemented in examples/streaming/
run server.js (requires express) and point your browser to http://localhost:8001. (Tested only with Chromium).
This handles retaining the streamheader to feed first to every newly connected client.
Who?
gstreamer-superficial was written by Daniel Turing (mail AT danielturing.com) and currently licensed under the GPLv3. Pester me if you prefer a different License..