首页 文章 精选 留言 我的

精选列表

搜索[快直播],共10005篇文章
优秀的个人博客,低调大师

Red5直播服务器,属于Java语言的直播服务器

前言 什么是Red5 Red5的主要功能和Macromedia公司的FMS类似,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写,使用RTMP作为流媒体传输协议,这与FMS完全兼容。它具有流化FLV、MP3文件,实时录制客户端流为FLV文件,共享对象,实时视频播放、Remoting等功能。用Red5替换FMS后,客户端不用更改可正常运行。 搭建思路 搭建准备 1.JDK环境 搭建 1.搭建Red5服务器 下载服务器 https://github.com/Red5/red5-server/releases 解压并启动 将下载的服务器解压到指定目录,但是目录不可有中文或空格。然后点击red5.bat启动即可 2.使用obs-studio推送视频流 下载obs https://obsproject.com 安装obs 配置obs视频来源 设置推流服务器 注: localhost为本地服务器地址,如果远程推送可以写IP或域名 串流密钥稍候拉流时使用 开始推流 3.Html拉流 准备资源文件 注: jwplayer.js和player.swf可从red5-server\webapps\oflaDemo文件夹中获取 red.html中代码 sh 复制代码 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Hello Red5</title> <style type="text/css"> .player { height: 480px; width: 720px; margin: 20px auto; } </style> </head> <body> <div class='player'> <div id='player'></div> </div> <script type='text/javascript' src='jwplayer.js'></script> <script type='text/javascript'> jwplayer('player').setup({ 'flashplayer': 'player.swf', 'file': 'xujun', 'streamer': 'rtmp://localhost/oflaDemo', 'controlbar': 'bottom', 'width': '720', 'height': '480', 'buffer': '0' }); </script> </body> </html> 其中localhost为拉流服务器地址,file为obs设置的串流密钥 打开red.html开始拉流 注:该播放器为flash播放器,因此浏览器必须开启对flash的支持

优秀的个人博客,低调大师

Android 快应用实践

1. 应用配置信息 1). package.json name: 项目名称 version: 版本信息 toolkit: hap 版本 description: 描述信息 dependencies: 依赖包 2). src/manifest.json package: 应用包名 name: 应用名称 versionName: 应用版本 versionCode: 应用号 mainPlatformVersion: 最小平台版本号 icon: 应用图标 permissions: 权限 config: 配置调试级别(debug, log, info, warn, error) router: 页面路由. 用于定义页面的实际地址、跳转地址。如果ux页面没有配置路由,则不参与项目编译。一个目录下最多只能存在一个主页面文件. 其中entry:配置主页,component:页面对应的ux文件名,path:页面路径,不填则默认为页面名称(<ProjectName>/src目录下,页面目录的相对路径) display: UI显示,用于定义与UI显示相关的配置。支持定义:页面公用的默认UI显示、页面私有的UI显示. titleBarBackgroundColor:导航栏颜色; titleBarTextColor:导航栏字体颜色; menu: 是否有菜单; pages: 页面私有配置(具体页面具体配置). 2. 调试日志 console.debug('debug') console.log('log') console.info('info') console.warn('warn') console.error('error') 可以使用Android Studio的Android Monitor输出来查看日志。 3. 跳转页面 routeDetail () { // 跳转到应用内的某个页面 router.push ({ uri: '/DemoDetail' }) console.debug('打开新页面') } 4. 生命周期 onInit: 表示VM的数据(events,props,data)已经准备好 onReady: 表示VM的模板已经编译完成 onShow:显示其中一个页面 onHide: 隐藏其中一个页面 onDestroy: 释放资源 onBackPress: 用户点击返回实体按键、左上角返回菜单、调用返回API时触发该事件 onMenuPress: 菜单返回时调用

优秀的个人博客,低调大师

希尔堆快排

1、希尔排序 (1)、算法思想:希尔排序是插入排序的改良算法,增加了一个步长step,每次插入排序使步长为step的元素形成一个递增序列,然后缩小增量,继续插入,直至step=1时,就是插入排序了,此时排序完成; 算法模型: (2)、代码实现 #include<stdio.h> voidinsertSort(int*a,intcount,intstep); voidshowArray(int*a,intcount); voidshellSort(int*a,intcount); voidshellSort(int*a,intcount){ intstep; for(step=count/2;step>0;step/=2){ insertSort(a,count,step); } } voidshowArray(int*a,intcount){ inti; for(i=0;i<count;i++){ printf("%d",a[i]); } printf("\n"); } //以下就是插入排序了,思想完全一样,只不过步长为step而已!!! voidinsertSort(int*a,intcount,intstep){ inti; intj; intn; inttmp; for(i=step;i<count;i+=step){ tmp=a[i]; for(j=0;a[i]>a[j]&&j<i;j+=step){ ; } if(i!=j){ for(n=i;n>j;n-=step){ a[n]=a[n-step]; } a[j]=tmp; } } } voidmain(void){ inta[]={2,7,1,11,0,9,8,10}; intcount=sizeof(a)/sizeof(int); printf("排序前输出如下:"); showArray(a,count); shellSort(a,count); printf("排序后输出如下:"); showArray(a,count); } (3)、结果截图 (4)、算法分析 时间复杂度为:O(nlogn); 2、堆排 (1)、算法思想:对无序数组先构建小堆(完全二叉树结构),每次删除堆顶元素(用最后一个元素直接覆盖第一个元素),每次输出堆顶元素就行; 小堆:根(父)结点比左右孩子都小的数字; (2)、代码实现 #include<stdio.h> voidheapSort(int*a,intcount); voidsiftDown(int*a,intcount,intstart); voidswap(int*a,int*b); intremoveHeap(int*a,intn); intremoveHeap(int*a,intn){ intkey=a[0]; a[0]=a[n]; siftDown(a,n,0); returnkey; } voidswap(int*a,int*b){ inttmp; tmp=*a; *a=*b; *b=tmp; } voidsiftDown(int*a,intcount,intstart){ inti=start; intj=2*i+1; while(j<count){//说明有左子树 if(j<count-1&&a[j]>a[j+1]){//表示存在右孩子的情况下; j++;//j:表示指向左右子树中最小的一个 } if(a[i]<=a[j]){ break;//不用调整,父节点的值是最小的; }else{ swap(&a[i],&a[j]); //交换 i=j;//一直往树下交换,一直调整到叶子结点 j=2*i+1; } } } voidheapSort(int*a,intcount){ intcurPos=count/2-1;//最后一个非叶子结点 inti; intkey; while(curPos>=0){ siftDown(a,count,curPos); curPos--; } /*输出构建好的堆结构 for(i=0;i<count;i++){ printf("%d",a[i]); } printf("\n"); */ for(i=0;i<count;i++){ key=removeHeap(a,count-i-1);//传参:第二个参数是下标 printf("%d",key); } printf("\n"); } voidmain(void){ inta[]={3,5,7,1,4,2,9,10}; intcount=sizeof(a)/sizeof(int); heapSort(a,count); } (3)、结果截图 (4)、算法分析 时间复杂度:O(nlogn); 3、快速排序 (1)、算法思想:分治的思想,一轮下来将第一个数放到了数字大小的中间,经过多次递归完成排序算法; (2)、代码实现 #include<stdio.h> intoneQuickSort(int*a,inti,intj); voidquickSort(int*a,inti,intj); voidshowArray(int*a,intcount); voidshowArray(int*a,intcount){ inti; for(i=0;i<count;i++){ printf("%d",a[i]); } printf("\n"); } voidquickSort(int*a,inti,intj){ intindex; if(i<j){ index=oneQuickSort(a,i,j); quickSort(a,i,index-1); quickSort(a,index+1,j); } } intoneQuickSort(int*a,inti,intj){ inttmp; tmp=a[i]; while(i<j){ while(i<j&&a[j]>tmp){ j--; } if(i<j){ a[i++]=a[j]; } while(i<j&&a[i]<tmp){ i++; } if(i<j){ a[j--]=a[i]; } } a[i]=tmp; returni; } voidmain(void){ inta[]={3,7,1,0,9,-9,}; intcount=sizeof(a)/sizeof(int); quickSort(a,0,count-1); showArray(a,count); } (3)、结果截图 (4)、解法二代码实现 #include<stdio.h> intquickSortOne(int*a,intcount){ inti=0; intj; inttmp; if(a[0]>a[1]){ tmp=a[0]; a[0]=a[1]; a[1]=tmp; } for(j=2;j<count;j++){ if(a[j]<a[0]){ tmp=a[j]; a[j]=a[++i]; a[i]=tmp; } } tmp=a[0]; a[0]=a[i]; a[i]=tmp; returni; } voidquickSort(int*a,intcount){ intindex=0; if(index<count-1){ index=quickSortOne(a,count); quickSort(a,index+1); quickSort(a+index+1,count-index-1); } } voidshowArray(int*a,intcount){ inti; for(i=0;i<count;i++){ printf("%d",a[i]); } printf("\n"); } intmain(void){ inta[]={10,9,8,7,6,5,4,3,2,1,0}; intcount=sizeof(a)/sizeof(int); intindex; quickSort(a,count); showArray(a,count); return0; } (5)、算法分析 时间复杂度:O(nlogn); 最坏情况:已经排好序或完全逆序,此时时间复杂度:O(n^2);

优秀的个人博客,低调大师

“快!很快!非常快!” —— 众安保险上云经验谈

摘要:阿里云服务从开始到现在已经有九年的时间,阿里云和用户一直彼此成就,共同成长,在用户的支持和鞭策下,阿里云服务也不断的在成长,越来越多的企业也通过阿里云激发业务和技术的化学反应。本文将带领大家了解国内最大的互联网保险公司众安保险的上云之路,首先对互联网保险和众安保险进行基本介绍,然后介绍众安保险上云动机以及为什么选择阿里云,同时详细介绍阿里云计算如何满足并保障众安保险的业务场景,最后介绍了众安成立的科技团队目前及未来所做的创新性研究,并如何将这些研究成果赋能到金融行业的伙伴中。 本场视频观看请戳:https://yunqi.aliyun.com/2018/shanghai/review PPT下载请戳:https://yq.aliyun.com/articles/602764 演讲嘉宾简介: 梁亮,众安保险应用运维负责人。 以

优秀的个人博客,低调大师

Redis为什么这么快?

| 作者 吴显坚,腾讯云数据库高级工程师,参与过360开源项目Pika的研发工作,现从事redis数据库研发工作。 Redis服务器是一个事件驱动程序, 事件是Redis服务器的核心, 它处理两项重要的任务, 一个是IO事件(文件事件), 另外一个是时间事件. Redis服务器通过套接字与客户端进行连接, 而文件事件可以理解为服务器对套接字操作的抽象. 服务器与客户端的通信会产生相应的文件事件, 而服务器则通过监听并处理这些事件来完成一系列网络通信操作. 另外Redis内部有一些操作(从Redis4.0的代码分析目前时间事件只有serverCron)需要在给定的时间点执行, 而时间事件就是Redis服务器对这类定时操作的抽象。 一、aeEventLoop 在分析具体代码之前, 我们先了解一下在事件处理中处于核心部分的aeEventLoop到底是什么: /* State of an event based program */ 创建aeEventLoop只需要一个setsize参数, 它标识了当前aeEventLoop最大可以监听的文件描述符数(通常redis传入server.maxclients+CONFIG_FDSET_INCR,也就是在用户指定的最大客户端连接数的基础上再额外增加128, 这128可以用于Redis内部打开AOF,RDB文件以及主从, 集群互相通信所对应的文件句柄), 创建aeEventLoop时, aeFileEvent和aeFiredEvent数组的大小就由setsize确定。 1. aeFileEvent 内部以掩码的形式存储了当前套接字关心的事件(可读/可写事件), 内部还有两个函数指针指向可读/可写事件发生时应该调用的函数, 另外还有一个无类型的指针指向相关联的数据, 这里需要注意的是, events是一个数组, 而套接字就是作为下标来进行索引对应aeFileEvent, 例如我当前关心的套接字是9, 那么events[9]就是它对应的文件事件数据结构(csapp中提到过, 当我们调用系统函数返回描述符数字时, 返回的描述符总是在进程中当前没有打开的最小描述符, 所以我们无需担心文件描述符被反复的创建销毁, 而越来越大的问题)。 2. aeFiredEvent 内部以掩码的形式存储了当前已经触发的事件和对应的套接字, 实际上fired数组只有在调用aeApiPoll的时候才会被赋值, 例如当前发现有套接字6, 8有可读事件, 而套接字10有可写事件, 那么fired数组的前三个元素会被赋值{fd = 6, mask =AE_READABLE}, {fd = 8, mask = AE_READABLE}, {fd = 10, mask = AE_WRITABLE}, 紧接着我们以6为索引, 找到文件事件数据结构events[6],然后发现触发的是可读事件, 我们再调用events[6]中rfileProc来处理可读事件。 aeEventLoop *aeCreateEventLoop(int setsize){ 对于时间事件, aeEventLoop中有一个timeEventHead指针指向第一个时间事件, 由于aeEventLoop创建之初, 内部没有任何时间事件, 所以初始化时timeEventHead指向NULL, 每当有新的时间事件时, 总会被添加到timeEventHead头部, 由于aeTimeEvent结构体中有next指针可以指向下一个aeTimeEvent结构体, 所以只要我们获取timeEventHead就能遍历当前所有的时间事件了, 另外有一个细节需要注意, 最后一个aeTimeEvent结构体中的next指针指向的是timeEventHead, 所以所有时间事件实际上就是由一个环形链表串连起来的。 二、文件事件 在介绍中有提到过文件事件实际上就是服务器对套接字操作的抽象, 当套接字有可读\写事件触发的时候, 我们需要调用相应的处理函数, 下面先看一下跟文件事件相关的结构体: /* File event structure */ 在aeEventLoop初始化的时候会为aeFileEvent数组(events)分配空间, 数组的大小由参数setsize指定,表明了当前Redis最大打开的套接字的大小, 套接字与aeFileEvent一一对应, 也就是说我们可以通过套接字数值作为索引到events数组中找到他对应的aeFileEvent对象。 当我们在aeEventLoop中注册一个文件事件时, 首先我们判断传入的套接字对events数组是否有越界行为, 若没有越界行为, 我们便可以获取与当前套接字对应的aeFileEvent对象, 然后调用aeApiAddEvent将当前的文件描述符以及监听的事件注册到底层IO多路复用机制(epoll, select, evport, kqueue其中之一)中, 另外我们还需要指定当可读/可写事件发生时需要调用的函数,另外当前文件事件的一些私有数据被存放在clientData指向的对象当中。 int aeCreateFileEvent(aeEventLoop *eventLoop,int fd, int mask, 三、时间事件 Redis内部的时间事件实际可以分为两类, 一类是定时事件, 也就是需要在未来某一个时间点触发的事件(只触发一次), 另外一类是周期性事件,和前面的定时事件只触发一次不同, 周期性事件是每隔一段时间又会重新触发一次。 Redis使用了timeProc指向函数的返回值来判断当前属于哪类事件, 若函数返回AE_NOMORE(也就是-1),说明当前事件无需再次触发(将id置删除标记AE_DELETED_EVENT_ID), 若函数返回一个大于等于0的值n, 说明再等待n秒, 该事件需要再重新被触发(根据返回值更新when_sec和when_ms),在博客开头提到的serverCron时间事件实际上就是一个周期性事件, 函数末尾会返回1000/server.hz, server.hz默认被设置为10, 也就是说serverCron平均每间隔100ms会被调用一次。 /* Time event structure */ Redis调用aeCreateTimeEvent来创建一个时间任务, 实现非常简单, 传参我们关注一下milliseconds和proc即可, 前者指定了时间事件距离当前的触发时间, 后者指定了时间事件触发时应调用的函数, 内部通过aeAddMillisecondsToNow将当前定时任务触发的时间戳计算出来赋值给when_sec和when_ms, 然后再将timeProc指向时间事件到达时应该调用的函数。 在完成了aeTimeEvent结构体内部变量赋值之后, 最后将其添加到aeEventLoop内部的存储定时间事件的环形链表的头部中(这里需要注意的是, 由于我们总是将新的时间事件加入环形链表的头部, 所以时间事件触发的时间先后并不是在环形链表中有序的, 我们需要将环形链表遍历完毕才能保证当前已经到达的时间事件都已经被处理完毕, 不过由于在开头提到过, 目前Redis只存在serverCron一个时间事件, 所以我们无需担心遍历环形链表影响服务性能), 此时一个时间事件就算创建完成了。 static void aeAddMillisecondsToNow(long longmilliseconds, long *sec, long *ms) { Redis通过aeDeleteTimeEvent函数来删除一个时间任务, 传参只有一个待删除时间事件的id, 我们发现这里的删除实际上是一种惰性删除, 将aeTimeEvent中的id标记为AE_DELETED_EVENT_ID, 而不是直接将aeTimeEvent对象从链表中删除并且释放, 个人认为这么实现的原因更多是为了安全考虑以及代码的简洁性, 考虑在一个时间事件中本来想删除另外一个时间事件, 但是由于id填错, 误删成自己了, 此时如果释放自身aeTimeEvent对象, 这是十分危险的。 int aeDeleteTimeEvent(aeEventLoop *eventLoop,long long id) 四、事件的调度与执行 Redis是单线程的, 内部是一直处于aeMain中的while循环中, 而循环内部不断调用aeProcessEvents函数, 该函数会对上面提到的文件事件和时间事件进行调度, 决定何时处理文件事件以及时间事件。 void aeMain(aeEventLoop *eventLoop) { 实际上aeProcessEvents函数内部做的事情也非常简单, 下面进行了梳理: 1. 首先调用aeSearchNearestTimer获取到达时间距离当前最近的时间事件; 2. 计算上一步获取到的时间事件还有多久才可以触发, 并且将结果记录到一个struct timeval*指针指向的结构体中(若在步骤一中没有获取到时间事件对象, 那么指针为NULL); 3. 阻塞并等待文件事件的产生, 最大的阻塞时间由步骤二决定(步骤二指针为NULL的场景表示当前没有时间事件, 我们可以永远阻塞, 直到有文件事件到达); 4. 如果在最大阻塞时间内获取到了文件事件, 则根据文件事件的类型调用对应的读事件处理函数或者写事件处理函数; 5. 遍历时间事件链表, 在这个过程中可能会遇到id为AE_DELETED_EVENT_ID的代表已经做了删除标记的时间事件, 需要将该时间事件从链表中移除, 并且进行释放, 如遇到已经达到的时间事件, 则调用其绑定的处理函数, 并且根据返回值来判断该事件时间是否需要在给定的时间内再重新触发。 五、问题 Q1: 时间事件触发的时间一定精准么? A1: 时间事件的触发并不能在指定的时间精准触发, 一般都要比指定的时间稍晚一点, 此外在Redis单线程模型下, 时间事件都是串行执行的, 中间如果某个时间事件处理时间长, 更加影响了后面时间事件执行时间的精准性. 而且时间事件链表是无序的, 所以在极端场景下, 存在优先级低的时间事件比优先级高的事件先触发的可能性, 不过好在目前Redis内部只有一个时间事件, 所以影响不会太大. Q2:aeEventLoop在创建之初就指定了可监听文件描述符的数量, 之后又通过config set maxclients命令动态调整客户端最大连接数是怎么实现的? A2: 通过翻看源码了解到,aeEventLoop提供了aeResizeSetSize函数, 用户重新分配events和fired数组的大小, 使aeEventLoop可监听的套接字数量得以调整, 当新的maxclients比原先要大的时候, 会调用该函数, 扩大aeEventLoop可监听文件描述符的数量, 以支持更多的客户端连接. intaeResizeSetSize(aeEventLoop*eventLoop,intsetsize){ 六、总结 Redis对事件的处理方式十分巧妙, 文件事件和时间事件之间相互配合, 充分的利用时间事件达到之前的这段时间等待和处理文件事件, 这样既避免了CPU的空转检查, 也能及时的处理文件事件. 此外通过时间事件中timeProc函数的返回值, 将时间事件的移除和再次触发权完全交给了用户, 使用起来更加灵活. 本文由博客群发一文多发等运营工具平台 OpenWrite 发布

优秀的个人博客,低调大师

快使搭建zookeeper集群

安装(2n-1)台linux虚拟机(因为zookeeper选举制度的半数规则),具体安装过程可参考 用工具上传zookeeper安装文件到/home目录下,并且发送给其他两台机器,发送指令为:scp /home/zookeeper root@ip:/home 解压文件并zookeeper文件,tar –zxvf zookeeper-3.4.5.tar.gz。将解压缩包进行重命名:mv zookeeper-3.4.5 zookeeper 修改环境变量(集群的每台zookeeper机器都要改): 4.1 vi /etc/profile 4.2 添加内容: export ZOOKEEPER_HOME=/home/hadoop/zookeeper //csdn输入(美元符)PATH有点问题,所以这里用中文代替 export PATH=(美元符)PATH:$ZOOKEEPER_HOME/bin 4.3 重新编译:source /etc/profile 修改zookeeper配置文件并创建myid 5.1 cd /home/zookeeper/conf 5.2 cp zoo_sample.cfg zoo.cfg 5.3 vi zoo.cfg 5.4 添加内容(其中slave1,slave2,slave3分别是三台虚拟机的ip): dataDir=/home/zookeeper/data dataLogDir=/home/zookeeper/log server.1=slave1:2888:3888 server.2=slave2:2888:3888 server.3=slave3:2888:3888 5.5 创建对应的文件夹 cd /home/zookeeper mkdir data mkdir log chmod 755 data chmod 755 log 5.6 创建myid(myid的值和上面添加的内容的server后面的数字对应): cd /home/hadoop/zookeeper/data vi myid 到这里使用三台linux搭建的zookeeper集群就完成了,我们只需要进入到bin目录,并使用指令:zkServer.sh start 将zookeeper启动即可。启动完成之后,使用指令jps查看是否已经启动。如果启动成功,则输入zkServer.sh status查看是否联机成功,如果没有成功,有可能是由于防火墙的原因,可以使用service iptables stop 关闭防火墙。

优秀的个人博客,低调大师

物联网快“熟”了

当设备供应商、芯片商、电信运营商、物联网应用提供商都称他们做好准备推广各家产品时,物联网真的就开始了。 “企业终于开始了试验和试点物联网解决方案,”埃森哲大中华区移动技术董事总经理、物联网业务主管洪冠中在接受《第一财经日报》采访时表示,“2016年,大量依托物联网的项目将快速进入商业推广,而前所未见的业务模式和服务也将层出不穷。” 往年世界移动通信展(MWC)物联网部分,更多还是产业链各方技术展示。而《第一财经日报》巴塞罗那报道小组在MWC2016现场看到,在这个展示ICT前瞻技术和产品的展会上,物联网产品正大量涌现。 连接不仅将在个人智能设备中极大延展,更重要的是将驱动产业互联,在工业、农业、交通等领域极大改变当下的产品和服务,带来全新商业模式。 物联网产品落地 2月23日,爱立信在MWC2016宣布与吉利汽车开展全面合作,以一个平台统一管理吉利汽车集团下不同平台品牌、不同车型的“互联网汽车”,通过爱立信提供的车联网云平台(ConnectedVehicleCloud,下称“CVC”)所有的核心功能。 和之前将互联网搬到汽车上不同的是,真正的“车联网”,需要解决的是汽车之间、汽车和周围行人、环境之间的连接和数据交换,实现汽车智能化。双方的合作,使得初步的交互成为可能:在安全方面,汽车可以感应到打滑的危险而自动发出警报,可实现车辆油耗、运行数据自动监控,甚至可感觉到自身有所“不适”,自动在4S店或指定维修站预约维修。 华为预计,到2025年,全球将新增40亿的宽带用户,超过1000亿的物将被连接起来,是现在连接数的100倍以上,每个人消耗的流量也将增长500倍以上。而中国移动董事长尚冰也在巴塞罗那GSMA大会上表示,据有关预测,2020年全球市场连接规模将达到500亿,中国市场连接数有望突破100亿。 新增的连接,部分来自于个人智能设备从手机向智能可穿戴设备、智能家庭设备的延伸。绝大多数新增连接数,来自于M2M(机器对机器)、物与物的连接。 早在2013年,米其林轮胎公司即将传感设备加入引擎和轮胎,收集有关燃油消耗、胎压胎温、车速以及位置等数据信息,并将之传送至云端,对其进行分析并向车队管理人员提出建议。通用电气旗下Taleris公司为全球30多家航空企业提供机群优化服务,通过传感设备对飞机的零部件和系统实施全面监测,并配有分析团队跟踪飞机的工程系统和整体运行情况,以分析异常现象的根本产生原因,决定何时对零部件进行更换或维修。 什么是“万物互联”?英特尔推出了可感知温度的瓷杯;爱立信甚至认为纸张、玻璃窗可以联网,其部分联网设备应用到了工业领域,例如远程操作机械手臂完成组装螺丝钉任务。MWC2016华为展台上,华为和合作伙伴带来了联网的垃圾桶、狗环。 演变的力量 早在几年前,“物联网”概念曾热炒一时,随后消寂。那个3G刚刚起步、网络刚从PC向智能手机延伸的年代,谈“万物互联”显得过于遥远。尽管英特尔早已成立嵌入式事业部,向工业控制领域提供嵌入式芯片,但无线连接技术此时并不成熟。 真正的起步在于4G,相对于3G,4G移动网理论峰值速率提升了10倍以上,高速传输数据成为可能,而对于“万物互联”的想象空间,则开启于5G。欧盟成立了由爱立信牵头的METIS项目,2013年,中国成立了IMT2020(5G)推进组。 对于5G愿景,各方表述不同但意义大同小异。IMT2020(5G)推进组的提法是,光纤般接入速率、零时延的使用体验、千亿设备的连接能力、超高流量密度、超高连接数密度和超高移动性等多场景的一致服务。 爱立信、华为、中兴等全球无线和通信设备供应商,在2014年国际电联(ITU)在国际全权代表大会上制定2020年ICT发展目标之前,即启动对5G的研究,并推出了相应的早期设备,仅从峰值传输速率一项比较,如果说4G对3G的演进是改良,而5G对4G的演进,其提升则是达到质变层面的革命。尽管厂商提出4G+概念弥补了中间的鸿沟。 相对于4G向5G演进的移动通信技术,要逐步实现以革命性的更快速度和更小时延,解决智能设备间的连接和数据交互,例如智能交通,以更高可靠性和低功耗保障工业、楼宇等的连接,以超强的网络容量支撑海量数据爆发。 业界普遍认为,5G将在2020年左右实现。不过,这并不影响希望变现技术研发商业利益的无线和通信设备商向运营商推广其4G+或Pre5G技术方案,将3D-MIMO、CA等他们眼中的5G或准5G技术应用于提升现有4G网络。尽管,国际标准组织3GPP对于5G的标准化工作才刚刚启动。 真正意义的“万物互联”原本是为5G准备的,但在4G向4G+演进过程中却意外“早产”。 希望在5G时期引领全球无线通信技术标准的中国,成为全球4G发展最迅速的国家和最积极的5G研发支持者,中国的运营商实际承担了网络部署的相当重任。2014年、2015年,营收、利润增长趋于停滞乃至下降的中国运营商,每年在网络建设的投资在千亿元以上。他们必须升级网络,除了责任和使命,还因为谁落后则可能失去竞争力。 而对于芯片商,多年前即成立嵌入式事业部的英特尔,已将该部门更名为物联网事业部。这个部门,是英特尔各部门中增长最为强劲的部门之一。 2014年,当本报记者采访三家设备商(华为、爱立信、中兴)高管时,这些公司刚提出5G愿景,尽管都开发出了5G基站验证设备,但对于什么是5G技术,5G能做什么,意见并不统一。而CA、3D-MIMO等则在5G技术推广上取得一致,并说服全球运营商,特别是4G发展迅速的中国运营商部署4G+、4G+网络,成为当下萌芽中的物联网存在前提。 英特尔、高通等芯片公司,也赞同4G+、万物互联概念,并迅速推出了其芯片和便捷的开发平台。现在,它们只需要更多吉利汽车、米其林公司等应用厂商配合,一个雏形中的物联网产业,初步展开。 改变了什么? 从现在开始,人们要在全新技术下准备全新的产品、商业模式,放开想象力。 现在,我们拥有了智能手机、不太成熟的智能手表,但现在的手机、智能手表无法完全适应物联网环境,它需要有更清晰的定位,适应数据流量、网络连接速度每年快速增长需求。数据显示,2015年,中国数据流量消费提升不止一倍;因为4G+快速部署,移动网络连接速度在中国两年内有望达到4G推行之初的3倍以上。 人工智能将得到快速发展。日本希望让类人答题机器人2021年能够考上东京大学,而中国一项人工智能计划,也是让类人答题机器人3到5年内能够考上一本大学。科大讯飞董事长刘庆峰曾预言,3到5年,机器人就可能进入家庭,进行端茶倒水等服务工作。 想象空间更为巨大的产业物联网,不仅将帮助企业提高生产力和效率,也可能带来全新的市场和商业模式。 埃森哲向《第一财经日报》记者提供的一份产业物联网报告指出,到2030年,产业物联网资本投资及其带来的生产率提升,预计将为美国累计贡献GDP(国内生产总值)6.1万亿美元,如果美国对产业物联网技术的投资提高50%,并为其发展创造更多有利条件(例如提升相关技能和改善宽带网络等),那么到2030年,产业物联网有望为美国GDP创造7.1万亿美元,使美国GDP比常规预测水平提高2.3%。 “企业通过产业物联网,可以提供新的服务,改进产品并打入新的市场,实现产业升级。而即便那些不进行产品销售的企业,例如虚拟影像公司,也能利用这一机会将业务拓展至数字化服务领域。”上述报告指出。 “为增加营收,工业企业以服务销售补充产品销售。这种‘产品+服务’混合型商业模式,通过将产品的销售和租赁相结合,使企业得以运用数字化服务获取经常性收益,从而拓展了新的收入来源。”埃森哲数字技术服务大中华区董事总经理吴立能认为。 “中国‘互联网+’战略将催生分享经济、智能制造、智慧家庭等新兴业态,进而创造出巨大的信息消费需求。对于运营商而言,移动端的视频、医疗、教育、金融等新兴服务需求旺盛,既能带动流量迅猛增长,也可带来数字化服务的广阔市场。”尚冰23日在GSMA年度大会上表示。 本文转自d1net(转载)

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册