1、gulp任务管理
npm start启动app,执行脚本:
"start": "gulp live"
该命令用启动gulp顺序任务组合live,位于gulpfile.js中,关于gulp相关点击这里
gulp.task(‘live‘, gulp.series( ‘clean‘, ‘lint‘, ‘bundle:watch‘, ‘html‘, ‘css‘, ‘resources‘, ‘watch‘, ‘browser‘ ));
分别执行以下任务:
关于app启动时报的这4个参数错误:
Possible race condition: `window.SHOW_INFO` might be reassigned based on an outdated value of `window.SHOW_INFO`
该错误来源在app/lib/index.jsx中的run( )函数
if (info) window.SHOW_INFO = true; if (throttleSecret) window.NETWORK_THROTTLE_SECRET = throttleSecret;
index.jsx最后被合并进mediasoup-demo-app.js,然后用于index.html,即首页显示相关脚本,该函数里面的window对象为浏览器窗口对象BOM,window的属性即浏览器窗口的属性
2、RoomClient类
关于客户端房间的定义在app/lib/RoomClient.js模块中,该模块中引用了 mediasoup-client 模块,定义了RoomClient类,房间的相关属性,websocket事件,以及麦克风,摄像头,共享,聊天等交互操作。
加入房间后建立websocket连接客户端,用的是 protoo-client 模块,这是一个专为群聊,会议设计的websocket模块,与一般的websocket client略有不同,除了websocket的open,close等事件之外还有request,response,notifaction事件,相关说明参考官方文档。
而server中用了与之对应的 protoo-server 模块,
3、Redux状态容器
除了上面的 gulp 外,RoomClient使用 Redux状态容器来记录 room 页面的状态参数。
Redux的唯一数据源store作为一个全局变量,定义在RoomClient.js中,并且对外暴露了
static init(data) { store = data.store; }
init 函数,作为类的静态成员来初始化store,该函数在app/lib/index.jsx中被调用,将store赋给当前window对象并初始化,这些js文件最后合而为一被用于房间页面的js依赖。
导致store状态改变的action 事件描述定义在 app/lib/redux下,而与之对应的改变store的reducer纯函数定义在 app/lib/reducers目录下,STATE.md正是当前所有状态的展示。
然后在RoomClient中用store.dispatch()函数调用相关action改变store状态树,例如:
store.dispatch(
stateActions.setRoomState(‘closed‘));
4、WebRTC
5、屏幕共享的限制
mediasoup-demo client的屏幕捕捉是通过调用浏览器API实现的,只在Chrome和Firefox浏览器中可用,毕竟WebRTC的作为新兴标准,Google支持最好。
原文:https://www.cnblogs.com/jixiaohua/p/11573957.html