文档章节

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

一个灰
 一个灰
发布于 2016/02/01 10:18
字数 401
阅读 2990
收藏 6

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左右

© 著作权归作者所有

一个灰
粉丝 28
博文 32
码字总数 21111
作品 3
南京
高级程序员
私信 提问
加载中

评论(23)

一个灰
一个灰

引用来自“tangjie123”的评论

意思是从服务器端拉流下来转发?

回复@tangjie123 : 是服务器转发给浏览器的时候转换成了websocket连接
t
tangjie123
意思是从服务器端拉流下来转发?
一个灰
一个灰

引用来自“tangjie123”的评论

不能直接从流服务器上拉rtmp协议的流?
浏览器只能通过websocket建立长连接
t
tangjie123
不能直接从流服务器上拉rtmp协议的流?
327832117
327832117
您好,我想问下我要做哪些工作才能使用你这个功能测试
q
qwedfghhh
在编译时报类似的错./AMF.h:113:7: error: no member named 'isNull' in 'emscripten::val'
if(o.isNull()) return AMF_NULL; 是什么原因?代码是完全下载下来的啊
一个灰
一个灰

引用来自“qwedfghhh”的评论

Emscripten SDK下载32位还是64位 下载web型、full型还是portable型
你选windows 64位的
q
qwedfghhh
Emscripten SDK下载32位还是64位 下载web型、full型还是portable型
一个灰
一个灰
EMSCRIPTEN_ROOT这个是环境变量,就像JAVA_HOME这种,你网上搜一下
一个灰
一个灰
EMSCRIPTEN_ROOT这个是环境变量,就像JAVA_HOME这种,你网上搜一下
WEB直播技术入门及在 Vue 中应用 video.js

简介 视频直播服务目前支持三种直播协议,分别是RTMP、HLS、FLV 以下内容来自阿里云帮助中心 RTMP 。协议比较全能,既可以用来推送又可以用来直播,其核心理念是将大块的视频帧和音频帧“剁碎...

kisshua
2018/11/07
0
0
swfobject.js 怎么用

视频直播 支持rtsp HLS rtmp 协议 想用主流的swfobject.js 但是发现 怎么设置参数加入播放URL google了都是说怎么好用啥的。请问到底怎么弄啊。 自己猜测 是flash as脚本一样 封装成swf文件 ...

简单1
2015/10/30
630
1
flash 播放器 直播 rtmp协议 弹幕 时移 线路切换

flash 播放器 直播协议rtmp 弹幕JS 时移 线路切换 等基本功能 配合wowza流媒体 做提供相关接口 外部调用 模仿斗鱼播放器

德如海网络科技有限公司
2016/04/29
3
0
EasyPlayer.js H5播放器帮助我这种不会前端的普通用户也能轻松实现直播接入

版权声明:本文为EasyDarwin开源社区原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiejiashu/article/details/84841604 说到EasyPlayer.js,先得说一下EasyPlayer到底是啥, An...

xiejiashu
2018/12/05
0
0
分享一下一款直播App开发的过程

听说有人声称开发一款直播App不仅耗时还非常昂贵,今天跟大家说道一下,开发一款直播App到底分几步走? 第一步:分解直播App的功能,我们以X客为例 1. 视频直播功能,这是一款直播App最主要的...

duduo丶
2016/07/27
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
46分钟前
4
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
2
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
3
0
Java设计模式之外观模式(门面模式)

什么是外观模式   外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口...

须臾之余
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部