作为路由器来说,相比常用的路由器要清晰不少,至少不用输入 IP 进入管理页面还得调节画面尺寸然后配置网络,点击左上角的图标就可以进入到网络配置界面,正常配置 Wi-Fi 的话进入宽带连接中选择对应的连接方式(动态 IP 、静态 IP 、 PPPoE 拨号)按要求配置就可以了,无线局域网中的配置是来设置 Wi-Fi 名称和密码的,至于移动网络这一项可以在使用 SIM 卡上网的情况下查看相关信息,其他的局域网以及高级设置中可以配置限制规则等更进一步的操作,日常是用不太到,这里不再细说:
/* Register media source. */
const sourceName = 'camera-flv';WebMedia.registerSource(sourceName,CameraSource);/* WebApp. */var app =WebApp.createApp();/* Set static path. */
app.use(WebApp.static('/public'));/* Media manage server. */var server = undefined;/* Is server starting. */var starting =false;
创建媒体服务:
/*
* Create Media server.
*/
function createMediaSer(){
console.log('Create media server.');if(server){return server;}var opts ={
mediaTimeout:1800000,
searchCycle:20000,
autoGetCamera:false};
server = new Manager(app, null, opts,(opts)=>{return{
source: sourceName,
inOpts: opts,
outOpts: null
}});
server.on('open',(media)=>{
console.log('Mediaopen.')
media.on('open',(media, client)=> console.log('Media client open.'));
media.on('close',(media, client)=> console.log('Media client close.'));});return server;}
设备列表查询接口:
/*
* res: [{devId, alias, report, status}...]
*/
app.get('/api/list',(req, res)=>{if(!server){var ret =startServer();if(!ret){return res.json([]);}}var devs =[];
server.iterDev((key, dev)=>{var info = dev.dev;var stream = dev.mainStream;var media = stream ? stream.media : null;
devs.push({
devId: key,
alias: `${info.hostname}:${info.port}${info.path}`,
report: info.urn,
path: media ? '/' + media.sid : '',
status: media ?true:false});});
res.send(JSON.stringify(devs));});
前端组件模块的引入如下:
importVue from 'vue';importApp from './App.vue';import router from './router';importVant from 'vant';import 'vant/lib/index.css';import{Notify} from 'vant';import{edger} from '@edgeros/web-sdk';import{setToken, setSrand} from './lib/auth';import{setPerms, checkPerms, requestPerm} from './lib/permission';
定义基础变量以及收发事件:
console.log(typeof Module);
console.log(typeof NodePlayer);Vue.config.productionTip =false;Vue.use(Vant);Vue.use(Notify);
edger.onAction('permission',(data)=>{setPerms(data);});
edger.onAction('token',(result)=>{
const { token, srand }= result;setToken(token);setSrand(srand);});
edger.token().then((result)=>{
const {token, srand}= result;setToken(token);setSrand(srand);}).then(()=>{var ret =checkPerms();if(ret.length >0){requestPerm();}}).catch((err)=>{
console.error(err);}).finally(()=>{NodePlayer.load(()=>{
new Vue({
router,
render: h =>h(App),}).$mount('#app');});});
编译执行工程的 camera1 和 web,它们各自生成自己的 node_modules 库目录,进入 web 目录,执行 npm run build 命令生成对应的 dist 目录,将其中的文件拷贝到 camera1 的 public 目录中。