Если вы know window id окна, которое хотите вставить, вы можете просто отследить его в своем окне (используя XReparentWindow), даже если он создан другим процессом.
Для mplayer есть опция командной строки «-wid». Если вы передаете свой идентификатор окна к нему, MPlayer создает это окно, как ребенок УЖР автоматически:
-wid (также см -gui-WID) (X11, OpenGL и DirectX только)
Это говорит MPlayer для прикрепления к существующему окну. Полезно вставлять MPlayer в браузер (например, расширение плэйдера). Эта опция полностью заполняет данное окно, поэтому масштабирование размеров, panscan и т. Д. Больше не обрабатывается MPlayer, но должно управляться приложением, создавшим окно.
Вы можете управлять MPlayer'ом путем пропускания '-slave' флаг и отправки commands на стандартный ввод (или FIFO)
Пример встраивания MPlayer использованием node-x11:
var x11 = require('x11');
var spawn = require('child_process').spawn;
x11.createClient(function(err, display) {
var X = display.client;
var wid = X.AllocID();
X.CreateWindow(wid, display.screen[0].root, 100, 100, 400, 300, 0, 0, 0, 0, {eventMask: x11.eventMask.SubstructureNotify|x11.eventMask.StructureNotify});
X.MapWindow(wid);
var mplayer = spawn('mplayer', ['-wid', wid, './video.mp4']);
function pause() {
mplayer.stdin.write('pause\n');
setTimeout(play, 1000);
}
function play() {
mplayer.stdin.write('play\n');
setTimeout(pause, 1000);
}
pause();
var mpid;
X.on('event', function(ev) {
console.log(ev);
if (ev.name == 'CreateNotify')
mpid = ev.wid;
if (ev.name == 'ConfigureNotify' && ev.wid == wid) {
X.ResizeWindow(mpid, ev.width, ev.height);
}
});
});