您的位置:首页 > Web前端 > JavaScript

使用JS实现RTMP协议直播(三)

2016-02-28 22:46 691 查看
摘要: 为进一步优化整体项目,我把js代码重新翻译成C++,并和broadway以及libspeex两个库的C++代码融合,通过emscripten的编译合成到一起。

broadway和libspeex的C代码可以先编译成llvm的中间文件,然后再和自己写的c++代码连接形成最终的js代码。

中间遇到的问题是,如何在C代码和js代码之间进行交互,就是哪些代码写成C,哪些用js实现。

用emscripten绑定两个C++类,NetConnection,NetStream,以实现通讯解码等高密度运算,调用方式基本模仿as。

在调用js系统自带的一些对象的时候,从C端调用会有一些性能影响,尤其是传递大对象的时候,这时候通过阅读speex.js的一些用法发现,C代码的内存使用,emscripten会分配一块ArrayBuffer,在js端可以通过将C端的指针看成是ArrayBuffer的偏移来直接操作内存,这样就可以高效管理内存。需要传递大数据的时候,只需要传递指针(即偏移)到js代码中,js就能获取到内存数据。

使用方法和as十分接近。

var nc = null;
var ns = null;
function test() {
nc = new NetConnection();
nc.onNetStatus = function(info) {
Module.print(info.code);
if (info.code == "NetConnection.Connect.Success") {
ns = new NetStream(nc);
ns.attachCanvas(document.getElementById("canvas"));
ns.initAudio(50);
}
}
nc.connect("192.168.0.100:1936", "live", "");
}


ns.initAudio(50);这段代表音频缓冲50帧播放,因为实际测试发现,不缓冲的话声音播放不出来

目前经过压缩整体js在500k左右
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rtmp javascript emscripten