遇到个问题,哪位大牛给个解决方法 应用:nodejs 通过 ffi调用 c库,c库为多播放器(多线程库) 贴一下部分代码: var dtplib =ffi.Library('vendor/linux_x64/libdtp', { "player_register_all":['void',[]], "dtplayer_init":['pointer',[dtp_para_ptr]], "dtplayer_start":['int',[voidptr]], } );
var dtp_cb = ffi.Callback('void',[dtp_state_ptr],function(state) { }); function dtplayer(p) { var para = p; var priv; if(!para.update_cb) para.update_cb = dtp_cb;
this.bindEvents();
events.EventEmitter.call(this);
console.log('[node-js] : dtplayer constructer');
}
dtplayer.prototype.play = function()
{
var self = this;
dtplib.player_register_all();
priv = dtplib.dtplayer_init(para.ref());
dtplib.dtplayer_start(priv);
this.emit('playing');
}
dtplayer.prototype.bindEvents = function()
{
this.on('playing',function(){console.log("receive playing signal")});
this.on('update_info',function(state)
{
console.log("cur time:" + state.deref().cur_time);
}
);
}
这里调用start启动播放后,播放器内部会启动多个线程进行解码播放,但上层play执行完毕后就退出了
这里有个函数指针 dtp_cb传递进去,经过测试可以调用到,但dtp_cb并不属于dtplayer这个类,因此不能通过this.emit等定时触发回调
完整代码:https://github.com/peterfuture/node-dtplayer/blob/node-demo/libs/dtplayer.js