一 : 二选一:哪个路由器安装使用方法更好
插上电话线,然后连接上路由器,仿佛路由器安装使用就是这么简单,但大家有没有去实际操作一下呢。对比一下,下面哪一个方法更简单更易懂。真实地去体验一下路由器安装使用的整个过程吧。
关于路由器安装使用问题,怎么解决?
◆我把电话线--连接猫--路由器连接上之后无法连接宽带,如何进入路由器IP地址?请详细说明一下连接过程.越详细越好.
◆打开那个路由器IP地址登录下看下
◆你的路由器没有说明书吗?
网友给出的答案一:
◆路由器安装使用之前,得知道你的路由器IP是多少,然后在浏览器地址栏上输入那个ip,然后输入用户名密码,
◆进去后有很多功能,可以输入网络用户名,密码共享你的网络也可以建立局域网,路由器还具有网络防火墙的作用,
◆两台电脑的网线接路由器LAN口,再用一条网线将MODEM的WAN口与路由的LAN口连接,MODEM一定要链接啊
◆使用宽带路由器可自动获取IP地址和DNS,但是建议你手动指定电脑的IP地址和DNS等参数。
◆点击“网上邻居”――>“本地连接”――>“属性”――>“Internet协议(TCP/IP)属性”,
◆IP地址:192.168.1.X(1--255之间,注意最后的数字每台电脑不能相同)
◆子网掩码:默认,255.255.255.0;
◆网关:192.168.1.1(路由器LAN口默认地址);
◆首选DNS服务器:咨询你当地服务商的DNS
◆备用DNS服务器:咨询你当地服务商的DNS
◆别的电脑同样设置就行了。
◆如果你更改了路由器的LAN口IP地址,电脑的IP和网关也需要做相应的更改。
网友给出的答案二:
一、硬件路由器安装使用,先安装宽带路由器,用一条网线从宽带路由器的WAN口连接至ADSL的ADSL/CableModem口,另一条网线从宽带路由器的LAN口连接至PC机的RJ45口,电话外线连接至ADSL的Line口,连接完成后打开电脑电源启动电脑,接着打开ADSL、宽带路由器的电源,先检查ADSL的状态是否正常,然后检查宽带路由器的工作状态,若宽带路由器指示灯M2常亮,,M1熄灭表示工作正常;反之工作不正常。
二、宽带路由器的设置在路由器安装使用完成后,启动电脑,打开IE网络游览器窗口,接着在IE网络游览器地址栏中输入宽带路由器的IP地址:192.168.1.1[回车],当电脑与宽带路由器的连接建立起来后,屏幕上接着出现登录宽带路由器的界面,输入用户名:admin密码:admin;按[确定]按钮进入宽带路由器的设置。然后启用[路由器安装使用向导]对宽带路由器进行设置:
◆选择上网方式:ADSL虚拟拨号(PPPoE)
◆输入ADSL虚拟拨号(PPPoE)的上网帐号,上网口令
◆输入IP地址、子网掩码、网关、DNS服务器、备用的DNS服务器
◆宽带路由器LAN口的设置
◆宽带路由器WAN口的设置
◆MAC地址克隆[只有局域网中才能使用MAC地址克隆
◆退出宽带路由器,关电源重启宽带路由器
三、电脑网卡、网络的设置
◆在IE网络游览器中,进入[工具]->[INTERNET选项]->[连接]删除原有的ADSL虚拟拨号帐号,选择[局域网设置]中选择[自动检测设置],其它选项不打勾;
◆双击打开[网上邻居]-》选择[查看网络连接]-》在[本地连接]点右键设置网卡的属性:输入IP地址:192.168.1.x[x=2->255]子网掩码:255.255.255.0网关:192.168.1.1DNS服务器:202.100.64.68备用的DNS服务器:202.100.64.66重启电脑完成路由器安装使用。
四、将局域网中所有电脑设置在同一个网段,同一个组就可以了。
二 : NeatUpload的安装使用
版本:NeatUpload-1.2.32,用于文件上传。(www.61k.com)可传大文件。
1.在VS工具箱中点右键选“选择项”…… 将Brettle.Web.NeatUpload.dll添加到工具箱。
可以在添加后的工具箱看到相应控件。
2.新建web项目。将NeatUpload复制到项目根目录。
3.修改Web.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="system.web"> <sectionname="neatUpload" type="Brettle.Web.NeatUpload.ConfigSectionHandler, Brettle.Web.NeatUpload" allowLocation="true" /> </sectionGroup> </configSections> <appSettings/> <connectionStrings/> <system.web> <neatUploaduseHttpModule="false" maxNormalRequestLength="4096" maxRequestLength="2097151" defaultProvider="FilesystemUploadStorageProvider"> <providers> <addname="FilesystemUploadStorageProvider" type="Brettle.Web.NeatUpload.FilesystemUploadStorageProvider, Brettle.Web.NeatUpload" /> </providers> </neatUpload> <compilation debug="false"> </compilation> <authentication mode="Windows" /> <httpModules> <!--如果不加这httpmodules,进度条不显示--> <addname="UploadHttpModule" type="Brettle.Web.NeatUpload.UploadHttpModule, Brettle.Web.NeatUpload"/> </httpModules> </system.web> <location path="Default.aspx" > <system.web> <neatUploaduseHttpModule="true" /> <httpRuntime maxRequestLength="2097151" executionTimeout="3600" useFullyQualifiedRedirectUrl="true" /> </system.web> </location> </configuration> |
现在可以拖拽控件开始编程了。
4.aspx页面代码如下:
<head runat="server"> <title> NeatUpload </title> <script type="text/javascript" language="javascript"> function ToggleVisibility(id, type) { el = document.getElementById(id); if(el.style) { if(type == 'on') { el.style.display = 'block'; } else { el.style.display = 'none'; 扩展:neatupload 使用 / neatupload 源码使用 / neatupload } } else { if(type == 'on') { el.display = 'block'; } else { el.display = 'none'; } } } </script> </head> <body> <form id="form1" runat="server"> <div> <Upload:InputFile ID="AttachFile" runat="server" /> <asp:Button ID="Upload" runat="server" Text="Upload" OnClientClick="ToggleVisibility('ProgressBar','on')" onclick="Upload_Click" /> <div id="ProgressBar" > <Upload:ProgressBar ID="pbProgressBar" runat='server' Inline="true" Width="280px" Height="50px"> </Upload:ProgressBar> </div> </div> </form> </body> </html> |
设计页面如下:
5.按钮事件处理函数:
protected void Upload_Click(object sender, EventArgs e) { string FileName = this.AttachFile.FileName;//获取上传文件的全路径 string ExtenName = System.IO.Path.GetExtension(FileName);//获取扩展名 string SaveFileName = System.IO.Path.Combine(Request.PhysicalApplicationPath, DateTime.Now.ToString("yyyyMMddhhmm") + ExtenName);//合并两个路径为上传到服务器上的全路径 if (this.AttachFile.ContentLength > 0) { try { this.AttachFile.MoveTo(SaveFileName, Brettle.Web.NeatUpload.MoveToOptions.Overwrite); } catch (Exception ex) { throw ex; } } } |
做到这里程序就可以运行的了。
默认的进度条的样式是可以修改的。
主要修改default.css、Progress.aspx及ProgressBar控件的属性。
default.css修改部分:
.ProgressDisplay .ProgressBar { background-color: #D7E5F7; 扩展:neatupload 使用 / neatupload 源码使用 / neatupload background-image: url("/11.gif"); /*进度条背景图片*/ height:20px; } #normalInProgress{ color: Red; /*进度条字体颜色*/ } #completed{ color:Blue; /*上传完成的字体颜色*/ } |
Progress.aspx是显示进度条的核心文件,相关数据的显示都在里面。
<td id="barTd" > <div id="statusDiv" runat="server" class="StatusMessage"> <Upload:DetailsSpan id="normalInProgress" runat="server" WhenStatus="NormalInProgress" style="font-weight: normal; white-space: nowrap;"> <%-- 正在上传时显示的 --%> <%-- <%# FormatCount(BytesRead) %>/<%# FormatCount(BytesTotal) %> <%# CountUnits %> --%> (<%# String.Format("{0:0%}", FractionComplete) %>) at <%# FormatRate(BytesPerSec) %> <%-- - <%# FormatTimeSpan(TimeRemaining) %> left --%> </Upload:DetailsSpan> <Upload:DetailsSpan id="chunkedInProgress" runat="server" WhenStatus="ChunkedInProgress" style="font-weight: normal; white-space: nowrap;"> <%# FormatCount(BytesRead) %> <%# CountUnits %> at <%# FormatRate(BytesPerSec) %> - <%# FormatTimeSpan(TimeElapsed) %> elapsed </Upload:DetailsSpan> <Upload:DetailsSpan id="completed" runat="server" WhenStatus="Completed"> <%-- 上传完成时显示的 --%> 完成了: <%# FormatCount(BytesRead) %> <%# CountUnits %> at <%# FormatRate(BytesPerSec) %> took <%# FormatTimeSpan(TimeElapsed) %> </Upload:DetailsSpan> <Upload:DetailsSpan id="cancelled" runat="server" WhenStatus="Cancelled"> Cancelled! </Upload:DetailsSpan> <Upload:DetailsSpan id="rejected" runat="server" WhenStatus="Rejected"> Rejected: <%# Rejection != null ? Rejection.Message : "" %> </Upload:DetailsSpan> 扩展:neatupload 使用 / neatupload 源码使用 / neatupload <Upload:DetailsSpan id="error" runat="server" WhenStatus="Failed"> Error: <%# Failure != null ? Failure.Message : "" %> </Upload:DetailsSpan> <Upload:DetailsDiv id="barDetailsDiv" runat="server" UseHtml4="true" Width='<%# Unit.Percentage(Math.Floor(100*FractionComplete)) %>' class="ProgressBar"></Upload:DetailsDiv> </div> </td> |
程序的效果图如下:
上传前:
上传中:
上传结束:
扩展:neatupload 使用 / neatupload 源码使用 / neatupload
三 : protobuf的安装和使用
最近领导分配了一个任务,这个工程挺高端的,主要以前从没有搞过,其中里面有protobuf,以前从来没有听说过这个东西,最近在网上看了一些高人的帖子,才知道protobuf是什么云云了,我的理解是,例如我们要用C++写个什么工程,C++是面向对象的,我们要写很多类,估计都得写上上百行,上千行的代码,但是现在用这个protobuf,就可以省很多是,我们只需要写消息包,然后编译,protobuf就会根据这个消息包自动生成两个文件.cc和.h,.h这两个文件中就有很多类,供我们调用。
现在说明怎样在Ubuntu下安装protobuf。网上有人说,他用了很多版本的protobuf都没有成功,最终用的2.5.0版本才成功,于是我就直接安装了这个版本,至于其他版本成不成功,我就不知道了。首先下载protobuf源码包
在Ubuntu的终端里输入:$ wget http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz 这是在官网下载,但是我等了很长时间都没有下载下来,最后我在CSDN上下载下来了 下载之后解压: $ tar xvzf protobuf-2.5.0.tar.gz
进入到解压后的目录: $ cd protobuf-2.5.0
进行执行 : $ ./configure
在执行./configure这个命令之前最好把vim ,g++,make安装好,不然在执行./configure的时候可能会出现错误,上面三个安装的命令:$sudo apt-get install vim $sudo apt-get install g++ $sudo apt-get install make
./configure成功之后,接下来是如下几步:
$make
$make check
$make install //在执行这一步的时候,我出现了错误,错误的意思是执行的权限不够,如果是这样的话,$make install 这条命名就换成$sudo make install
下面我们要修改一下配置文件:$ vim ~/.profile
在打开的文件中,在文件末尾添加如下代码:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
然后保存退出,接下来执行: $ source ~/.profile
使刚才修改的配置文件生效,接下来执行: $protoc --version
如果上面的步骤一切顺利的话,那么就会在终端显示protobuf的版本号,如下
下面我们来测试一下,在测试之前我们最好先建立一个文件夹,例如上面的proto,接下的操作都在这个文件夹下进行。
我们先用vim创建并编辑.proto文件,例如: $ vim msg.proto
内容如下:
然后执行下面的命令: $ protoc -I=. --cpp_out=. msg.proto
执行这条命名之后,在当前目录下就会生成如下的两个文件:
这两个文件就是根据上面的那个msg.proto文件生成了,里面有类的声明和类的实现,我们可以进入这两个文件。研究一下,这里就不在说明了。然后我们就可以调用类和里面的函数实现自己的功能了,下面是两个简单的测试文件: 我们先创建: $ vim write.cc
内容如下:
然后编译write.cc,命名如下:
$ g++ msg.pb.cc write.cc -o write `pkg-config --cflags --libs protobuf` -lpthread
执行生成的write文件,命令为:
$ ./write
可看到生成的msg.pb文件,这个文件是由output(“./msg.pb”,ios::out|ios::trunc|ios::binary)函数生成的
下面在创建一个文件:$ vim reader.cc
内容如下:
fstream
编译reader.cc文件:命令为:
$ g++ msg.pb.cc reader.cc -o reader `pkg-config --cflags --libs protobuf` -lpthread 然后执行生成的reader文件。命令如下:
./reader
在终端就会打印出:
101
Hello
上面在生成可执行文件的过程,都是我们一条一条命令的输入,我们可以写Makefile,然后执行一条make命令,就可以自动生成可执行文件,
编写Makefile文件: $ vim Makefile
内容如下:
编写完之后,执行:$make
就会自动生成可执行文件write和
reader
Protobuffer语言详解:
Defined A Message Type
message SearchRequest
{
required string query = 1;
oprional int32 page_number = 2;
optional int32 result_per_page = 3;
}
上面 SearchRequest消息定义了三个fileds,每一个fileds都包含着该filed的name和type。 Message里面的每一个field都有一个unique numbered tag(也就是那些1 2 3 4)。这些tags用来在message binary format用来标识filed序号,如果这个message一旦被使用,建议必要轻易更改。需要注意的是,如果标记是1-15,那么当标记编码成二进制流的时候他们仅占一个字节,如果标记处于16-2047,标记将会占据两个字节,所以这里建议,对于那些需要频繁传输的数据尽量把他们放在前15位,这时编码key的时候就会尽量减少key的数据的大小,那么我们也应该留一些15因内的标记,以便将来可能会添加更频繁使用的filed。
最小的标记是1,最大的是2^29-1,但是从19000到19999这些被protobuf 实现保留。
Specifying Field Rules
你必须声明你所声明的filed是如下一种:
required:在你使用该消息时必须存在这种类型的filed
optional:在你使用该消息时该中filed可以不存在,但如果存在的只能存在一种 repeated:该中类型的filed可以被重复使用任意从(包括0次),而且protobuf会保存设置的次序。
Adding more message types
在一个.proto文件中可以定义多个message。例如你想定义多个相关联的message,如下例在一个proto文件中有一个reques message和一个reponse message message SearchRequest
{
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
}
message SearchResponse
{
……
}
我们可以直接使用//在.proto文件中添加注释
message SearchRequest
{
required string query = 1;
optional int32 page_number = 2; //which page number do we want?
optional int32 result_per_page = 3;
}
What's Generated From Your .proto?
当我们使用protocol buffer compiler编译一个.proto文件,编译器会生成与你所选语言(由编译选项决定--Java_Out 或者--Cpp_Out)相对应的代码。例如会生成所有字段的getter/setter,向输出流序列化你的messages以及从一个输入流中解析messages
For C++,,编译器会生成一个 .h 和.cc文件, proto文件里每一个message都会对应生成一个class.
For Java,编译器会生成一个java文件.在该java文件中会有N个由messages对应生成的内部类,以及一个Builder内部类.Builder用来创建其他messages生成的类的实例
Optional Fields And Default Values
如果一个optional field已经被手动地设置过默认值,那么在解析该messages时,发现该field没有被使用,那么该field会被设置成默认值.如下例
optional int32 result_per_page = 3 [default = 10];
那么如果没有手动地被设置过默认值那么就会采用系统默认值:string->"", bool->false, numeric->0 ,enums ->enums第一个value的默认值
Enumerations
在message中,可以使用枚举。Protobuf中的枚举以name/value形式出现。例如下例:VNIVERSAL = 0可以看出其value不是field_number
你可以对一个枚举类型的filed指定默认值,但是如果你指定的的值不在枚举列表中,那么解析器会认为这个字段为不可识别的字段。
message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3 [default = 10];
enum Corpus {
UNIVERSAL = 0;
WEB = 1;
IMAGES = 2;
LOCAL = 3;
NEWS = 4;
PRODUCTS = 5;
VIDEO = 6;
}
optional Corpus corpus = 4 [default = UNIVERSAL];
}
Using Other Message Types
我们可以采用其他的message作为我们的field类型.例如在下例中我们在同一.proto文件中定义了俩个messages,然后SearchResponse中使用Result作为field的类型.
message SearchResponse {
repeated Result result = 1;
}
message Result {
required string url = 1;
optional string title = 2;
repeated string snippets = 3;
}
Importing Definitions
在上例中Result 和SearchResponse 都定义在同一个.proto 文件,那么如果俩个messages不在同一个.proto 文件中怎么办呢?
我们采用在文件顶部import其他.proto文件来访问其他proto文件中的messages. import "myproject/other_protos.proto";
你可以在messageA里定义一个新的messageB,然后在messageA里使用messageB.例如下例: message SearchResponse {
message Result {
required string url = 1;
optional string title = 2;
repeated string snippets = 3;
}
repeated Result result = 1;
}
当message不再满足你的需求,例如你想要添加一个字段,但是你仍想使用原来生成的代码,不想破坏现存的代码,只要记住如下规则,你就可以实现这个需求了
不要改变原有fields的标记(序号).
新添加的fields要设置成optional or repeated. 这意味着你的新代码可以解析由原有的message序列化而成的messages,而且不会丢失那些required 元素.你应该对新的fields设置上明显的default values 以便新的代码可以和由旧代码生成的message交互.
标准方法:
解析和序列化:
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列在恢复为对象。
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
Message PhoneNumber
{
required string number = 1;
optional PhoneTyep type = 2 [default HOME]; //是默认值
}
Repeated PhoneNumber phone = 4; //repeated是重复的意思
Protobuf消息的定义:
消息由至少一个字段组合而成,类似于C语言中的结构体,每个字段都有一定的格式。 字段格式: 限定修饰符1 数据类型2 字段名称3 = 字段编码值4 [字段默认值5]
1限定修饰符包括required\optional\repeated
Required:表示一个必须的字段,必须相当于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前的没有设置required字段或者无法识别required字段都会引起编码异常,导致消息被丢弃。 就好比你(发送方)去面试的时候,填
写个人信息表,一个人必须要有身份证号,那么在表中身份证号这一栏必须的填。如果你不填那么HR(接收方)就会说,不行,你这张表无效,因为你的身份证号没有填写。
Optional: 表示一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或不设置该字段的值。对于接收方,如果能够识别可选字段则进行相应的处理,如果无法识别,则忽略该字段,消息中的其他字段正常处理。--因为optional字段的特征,很多接口在升级版本中都把后来添加的字段够统一的设置为optional,这样老的版本无需升级程序也可以正常的域新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。 就好比个人信息表中家庭成员一栏,你(发送方)可以填,也可以不填,如果你填的话,HR(接收方)就把栏信息登记一下,你不填的话,HR就不登记了,不影响HR登记其他的信息。
Repeated: 表示该字段可以包含0-n个元素,其特性和optional一样,但是一次可以包含多个值,可以看做是在传递一个数组的值。就好比你的教育经历,你可以只填你的大学经历这一项,也可以填大学和高中的经历,这两项,还可以填写大学、高中和初中,这三项经历。也就是桌教育经历可以填一个经历,也可以填多个经历。
2.数据类型: protobuf定义了一套基本数据类型,几乎都可以映射到C++/Java等语言的基础数据类型:
N表示打包的字节并不是固定的。而是根据数据的大小或者长度
例如Int32 ,你在发送消息的时候,设置的值比较小,在0—127之间,那么就使用一个字节打包。
关于枚举的打包方式和uint32相同。
关于message,类似于C语言中结构体包含另一个结构体作为数据成员一样。
关于 fixed32 和int32的区别。fixed32的打包效率比int32的效率高,但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高。根据项目的实际情况,一般选择fixed32,如果遇到对传输数据量要求比较苛刻的环境,可以选择int32
3.字段名称: 字段名称的命名和C。C++灯语言的变量命名方式几乎是相同的。
4.字段编码值
有了该值,通信双方才能互相识别对方的字段。当然相同的编码值,其限定修饰符和数据类型必须相同。
编码值的取值范围为 1~2^32(4294967296)。
其中 1~15的编码时间和空间效率都是最高的,编码值越大,其编码的时间和空间效率就越低(相对于1-15),当然一般情况下相邻的2个值编码效率的是相同的,除非2个值恰好实在4字节,12字节,20字节等的临界区。比如15和16.
1900~2000编码值为Google protobuf 系统内部保留值,建议不要在自己的项目中使用。 protobuf 还建议把经常要传递的值把其字段编码设置为1-15之间的值。
消息中的字段的编码值无需连续,只要是合法的,并且不能在同一个消息中有字段包含相同的编码值。
建议:项目投入运营以后涉及到版本升级时的新增消息字段全部使用optional或者repeated,尽量不实用required。如果使用了required,需要全网统一升级,如果使用optional或者repeated可以平滑升级。就好比在编码信息的时候,年龄是30 ,大学里开了30门课,然后就将将这个两个30编码了,发送给接收方了,但是当接受方收到之后,不知道这两个30是什么意思。然后你就必须给这两个30编一下序,2号表示年龄,为30, 15,课程数,30。其实这个编码值可以表示发送一帧数据,第一字节,第二字节,第三字节……
ID age classes
⑤.默认值。当在传递数据时,对于required数据类型,如果用户没有设置值,则使用默认值传递到对端。当接受数据时,对于optional字段,如果没有接收到optional字段,则设置为默认值。
关于import
Protobuf接口文件可以像C语言的.h文件一样,在需要的时候通过import导入需要的文件,和include的行为大致想相同。
关于package
避免名称冲突,可以给每个文件指定一个package名称,对于C++则解析为命名空间。
四 : protobuf的安装和使用
最近领导分配了一个任务,这个工程挺高端的,主要以前从没有搞过,其中里面有protobuf,以前从来没有听说过这个东西,最近在网上看了一些高人的帖子,才知道protobuf是什么云云了,我的理解是,例如我们要用C++写个什么工程,C++是面向对象的,我们要写很多类,估计都得写上上百行,上千行的代码,但是现在用这个protobuf,就可以省很多是,我们只需要写消息包,然后编译,protobuf就会根据这个消息包自动生成两个文件.cc和.h,.h这两个文件中就有很多类,供我们调用。(www.61k.com]
现在说明怎样在Ubuntu下安装protobuf。网上有人说,他用了很多版本的protobuf都没有成功,最终用的2.5.0版本才成功,于是我就直接安装了这个版本,至于其他版本成不成功,我就不知道了。首先下载protobuf源码包
在Ubuntu的终端里输入:$ wget http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz 这是在官网下载,但是我等了很长时间都没有下载下来,最后我在CSDN上下载下来了 下载之后解压: $ tar xvzf protobuf-2.5.0.tar.gz
进入到解压后的目录: $ cd protobuf-2.5.0
进行执行 : $ ./configure
在执行./configure这个命令之前最好把vim ,g++,make安装好,不然在执行./configure的时候可能会出现错误,上面三个安装的命令:$sudo apt-get install vim $sudo apt-get install g++ $sudo apt-get install make
./configure成功之后,接下来是如下几步:
$make
$make check
$make install //在执行这一步的时候,我出现了错误,错误的意思是执行的权限不够,如果是这样的话,$make install 这条命名就换成$sudo make install
下面我们要修改一下配置文件:$ vim ~/.profile
在打开的文件中,在文件末尾添加如下代码:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
然后保存退出,接下来执行: $ source ~/.profile
使刚才修改的配置文件生效,接下来执行: $protoc --version
如果上面的步骤一切顺利的话,那么就会在终端显示protobuf的版本号,如下
下面我们来测试一下,在测试之前我们最好先建立一个文件夹,例如上面的proto,接下的操作都在这个文件夹下进行。
我们先用vim创建并编辑.proto文件,例如: $ vim msg.proto
内容如下:
proto protobuf的安装和使用
然后执行下面的命令: $ protoc -I=. --cpp_out=. msg.proto
执行这条命名之后,在当前目录下就会生成如下的两个文件:
这两个文件就是根据上面的那个msg.proto文件生成了,里面有类的声明和类的实现,我们可以进入这两个文件。[www.61k.com)研究一下,这里就不在说明了。然后我们就可以调用类和里面的函数实现自己的功能了,下面是两个简单的测试文件: 我们先创建: $ vim write.cc
内容如下:
然后编译write.cc,命名如下:
$ g++ msg.pb.cc write.cc -o write `pkg-config --cflags --libs protobuf` -lpthread
执行生成的write文件,命令为:
$ ./write
可看到生成的msg.pb文件,这个文件是由output(“./msg.pb”,ios::out|ios::trunc|ios::binary)函数生成的
下面在创建一个文件:$ vim reader.cc
内容如下:
fstream
proto protobuf的安装和使用
编译reader.cc文件:命令为:
$ g++ msg.pb.cc reader.cc -o reader `pkg-config --cflags --libs protobuf` -lpthread 然后执行生成的reader文件。(www.61k.com)命令如下:
./reader
在终端就会打印出:
101
Hello
上面在生成可执行文件的过程,都是我们一条一条命令的输入,我们可以写Makefile,然后执行一条make命令,就可以自动生成可执行文件,
编写Makefile文件: $ vim Makefile
内容如下:
编写完之后,执行:$make
就会自动生成可执行文件write和
reader
proto protobuf的安装和使用
Protobuffer语言详解:
Defined A Message Type
message SearchRequest
{
required string query = 1;
oprional int32 page_number = 2;
optional int32 result_per_page = 3;
}
上面 SearchRequest消息定义了三个fileds,每一个fileds都包含着该filed的name和type。[www.61k.com) Message里面的每一个field都有一个unique numbered tag(也就是那些1 2 3 4)。这些tags用来在message binary format用来标识filed序号,如果这个message一旦被使用,建议必要轻易更改。需要注意的是,如果标记是1-15,那么当标记编码成二进制流的时候他们仅占一个字节,如果标记处于16-2047,标记将会占据两个字节,所以这里建议,对于那些需要频繁传输的数据尽量把他们放在前15位,这时编码key的时候就会尽量减少key的数据的大小,那么我们也应该留一些15因内的标记,以便将来可能会添加更频繁使用的filed。
最小的标记是1,最大的是2^29-1,但是从19000到19999这些被protobuf 实现保留。
Specifying Field Rules
你必须声明你所声明的filed是如下一种:
required:在你使用该消息时必须存在这种类型的filed
optional:在你使用该消息时该中filed可以不存在,但如果存在的只能存在一种 repeated:该中类型的filed可以被重复使用任意从(包括0次),而且protobuf会保存设置的次序。
Adding more message types
在一个.proto文件中可以定义多个message。例如你想定义多个相关联的message,如下例在一个proto文件中有一个reques message和一个reponse message message SearchRequest
{
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
}
message SearchResponse
{
……
}
我们可以直接使用//在.proto文件中添加注释
message SearchRequest
{
required string query = 1;
optional int32 page_number = 2; //which page number do we want?
proto protobuf的安装和使用
optional int32 result_per_page = 3;
}
What's Generated From Your .proto?
当我们使用protocol buffer compiler编译一个.proto文件,编译器会生成与你所选语言(由编译选项决定--Java_Out 或者--Cpp_Out)相对应的代码。[www.61k.com)例如会生成所有字段的getter/setter,向输出流序列化你的messages以及从一个输入流中解析messages
For C++,,编译器会生成一个 .h 和.cc文件, proto文件里每一个message都会对应生成一个class.
For Java,编译器会生成一个java文件.在该java文件中会有N个由messages对应生成的内部类,以及一个Builder内部类.Builder用来创建其他messages生成的类的实例
Optional Fields And Default Values
如果一个optional field已经被手动地设置过默认值,那么在解析该messages时,发现该field没有被使用,那么该field会被设置成默认值.如下例
optional int32 result_per_page = 3 [default = 10];
那么如果没有手动地被设置过默认值那么就会采用系统默认值:string->"", bool->false, numeric->0 ,enums ->enums第一个value的默认值
Enumerations
在message中,可以使用枚举。Protobuf中的枚举以name/value形式出现。例如下例:VNIVERSAL = 0可以看出其value不是field_number
你可以对一个枚举类型的filed指定默认值,但是如果你指定的的值不在枚举列表中,那么解析器会认为这个字段为不可识别的字段。
message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3 [default = 10];
enum Corpus {
UNIVERSAL = 0;
WEB = 1;
IMAGES = 2;
LOCAL = 3;
NEWS = 4;
PRODUCTS = 5;
VIDEO = 6;
}
optional Corpus corpus = 4 [default = UNIVERSAL];
}
Using Other Message Types
我们可以采用其他的message作为我们的field类型.例如在下例中我们在同一.proto文件中定义了俩个messages,然后SearchResponse中使用Result作为field的类型.
message SearchResponse {
proto protobuf的安装和使用
repeated Result result = 1;
}
message Result {
required string url = 1;
optional string title = 2;
repeated string snippets = 3;
}
Importing Definitions
在上例中Result 和SearchResponse 都定义在同一个.proto 文件,那么如果俩个messages不在同一个.proto 文件中怎么办呢?
我们采用在文件顶部import其他.proto文件来访问其他proto文件中的messages. import "myproject/other_protos.proto";
你可以在messageA里定义一个新的messageB,然后在messageA里使用messageB.例如下例: message SearchResponse {
message Result {
required string url = 1;
optional string title = 2;
repeated string snippets = 3;
}
repeated Result result = 1;
}
当message不再满足你的需求,例如你想要添加一个字段,但是你仍想使用原来生成的代码,不想破坏现存的代码,只要记住如下规则,你就可以实现这个需求了
不要改变原有fields的标记(序号).
新添加的fields要设置成optional or repeated. 这意味着你的新代码可以解析由原有的message序列化而成的messages,而且不会丢失那些required 元素.你应该对新的fields设置上明显的default values 以便新的代码可以和由旧代码生成的message交互.
标准方法:
proto protobuf的安装和使用
解析和序列化:
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。[www.61k.com]无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列在恢复为对象。
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
Message PhoneNumber
{
required string number = 1;
optional PhoneTyep type = 2 [default HOME]; //是默认值
}
Repeated PhoneNumber phone = 4; //repeated是重复的意思
Protobuf消息的定义:
消息由至少一个字段组合而成,类似于C语言中的结构体,每个字段都有一定的格式。 字段格式: 限定修饰符1 数据类型2 字段名称3 = 字段编码值4 [字段默认值5]
1限定修饰符包括required\optional\repeated
Required:表示一个必须的字段,必须相当于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前的没有设置required字段或者无法识别required字段都会引起编码异常,导致消息被丢弃。 就好比你(发送方)去面试的时候,填
proto protobuf的安装和使用
写个人信息表,一个人必须要有身份证号,那么在表中身份证号这一栏必须的填。(www.61k.com]如果你不填那么HR(接收方)就会说,不行,你这张表无效,因为你的身份证号没有填写。
Optional: 表示一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或不设置该字段的值。对于接收方,如果能够识别可选字段则进行相应的处理,如果无法识别,则忽略该字段,消息中的其他字段正常处理。--因为optional字段的特征,很多接口在升级版本中都把后来添加的字段够统一的设置为optional,这样老的版本无需升级程序也可以正常的域新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。 就好比个人信息表中家庭成员一栏,你(发送方)可以填,也可以不填,如果你填的话,HR(接收方)就把栏信息登记一下,你不填的话,HR就不登记了,不影响HR登记其他的信息。
Repeated: 表示该字段可以包含0-n个元素,其特性和optional一样,但是一次可以包含多个值,可以看做是在传递一个数组的值。就好比你的教育经历,你可以只填你的大学经历这一项,也可以填大学和高中的经历,这两项,还可以填写大学、高中和初中,这三项经历。也就是桌教育经历可以填一个经历,也可以填多个经历。
2.数据类型: protobuf定义了一套基本数据类型,几乎都可以映射到C++/Java等语言的基础数据类型:
N表示打包的字节并不是固定的。而是根据数据的大小或者长度
例如Int32 ,你在发送消息的时候,设置的值比较小,在0—127之间,那么就使用一个字节打包。
proto protobuf的安装和使用
关于枚举的打包方式和uint32相同。[www.61k.com]
关于message,类似于C语言中结构体包含另一个结构体作为数据成员一样。
关于 fixed32 和int32的区别。fixed32的打包效率比int32的效率高,但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高。根据项目的实际情况,一般选择fixed32,如果遇到对传输数据量要求比较苛刻的环境,可以选择int32
3.字段名称: 字段名称的命名和C。C++灯语言的变量命名方式几乎是相同的。
4.字段编码值
有了该值,通信双方才能互相识别对方的字段。当然相同的编码值,其限定修饰符和数据类型必须相同。
编码值的取值范围为 1~2^32(4294967296)。
其中 1~15的编码时间和空间效率都是最高的,编码值越大,其编码的时间和空间效率就越低(相对于1-15),当然一般情况下相邻的2个值编码效率的是相同的,除非2个值恰好实在4字节,12字节,20字节等的临界区。比如15和16.
1900~2000编码值为Google protobuf 系统内部保留值,建议不要在自己的项目中使用。 protobuf 还建议把经常要传递的值把其字段编码设置为1-15之间的值。
消息中的字段的编码值无需连续,只要是合法的,并且不能在同一个消息中有字段包含相同的编码值。
建议:项目投入运营以后涉及到版本升级时的新增消息字段全部使用optional或者repeated,尽量不实用required。如果使用了required,需要全网统一升级,如果使用optional或者repeated可以平滑升级。就好比在编码信息的时候,年龄是30 ,大学里开了30门课,然后就将将这个两个30编码了,发送给接收方了,但是当接受方收到之后,不知道这两个30是什么意思。然后你就必须给这两个30编一下序,2号表示年龄,为30, 15,课程数,30。其实这个编码值可以表示发送一帧数据,第一字节,第二字节,第三字节……
ID age classes
⑤.默认值。当在传递数据时,对于required数据类型,如果用户没有设置值,则使用默认值传递到对端。当接受数据时,对于optional字段,如果没有接收到optional字段,则设置为默认值。
关于import
Protobuf接口文件可以像C语言的.h文件一样,在需要的时候通过import导入需要的文件,和include的行为大致想相同。
关于package
避免名称冲突,可以给每个文件指定一个package名称,对于C++则解析为命名空间。
五 : 经典_Red5+的安装和使用
使用Red5和FFMpeg搭建在线Flash流媒体分享平台
最近视频的东西比较火,前些天我也稍微了解了一下使用开源软件建在线Flash流媒体播放平台的解决方案,还是有一些收获。(www.61k.com] Red5是一款基于java的开源的Flash流媒体Server 软件,可以作为取代Macromedia提供的商业版本FMS。Red5使用RSTP作为流媒体传输协议,内置了一些示例,这些示例实现了在线录制, flash流媒体播放,在线聊天,视频会议等一些基本的功能。由于系统本身是开源的,在碰到问题的时候也比较容易解决,大不了直接改代码,在成本方面也可 以省下一笔不小的开销,为未来的功能扩展也提供了充分的空间。
如果仅仅是实现在线录制,在线播放,那么Red5也就差不多够了,但可能我们有时候还需要用户上传自己拍摄的视频文件,而要把这些视频文件转成可播放的flv文件就需要视频编码软件了。FFMpeg提供了录制,播放,视频流处理的完整解决方案。它自身也带了一个基于HTTP的流媒体广播程序以及其它几个实用的程序,但我们的重点还是它的视频转换程序,似乎Google Video也是用的它的程序作为视频转换工具。
我用FFMpeg转了几个视频,效果还可以,在声音上碰到了一些问题,在不添加参数的情况下,有一部分视频的声音会有问题,有的视频无论怎么添加参 数,都出不来声音,报错提示的是不支持所带的声音采样格式,只支持几种固定的格式,我看了一下代码,确实是这样子,但理论上应该是能够解决的。 FFMpeg自带的libavcodec是一套很牛的编码库,为了保证质量和性能,里面的很多codec都是从头开发的。
这两个加起来,实现一些简单的在线视频功能就差不多了。
red5安装 经典_Red5+的安装和使用
D5Power Studio原创,转载请注明出处~谢谢!
RED5的中文资料象牛毛一样稀少。[www.61k.com]。从下载到完全调试成功,大概花费了1天多的时间。在这个把中间出现的问题罗列出来,希望给想研究RED5的朋友一点帮助。
需要用到的软件:
RED5 0.6 RC2 : http://osflash.org/red5
Eclipse 3.2 : http://www.eclipse.org
ant: http://ant.apache.org/
JDK: http://java.sun.com/javase/downloads/index.jsp
如果想直接通过SVN获得最新的RED5,还需要安装Eclipse的SVN插件:http://subclipse.tigris.org/
呵呵,装的东西够多吧?简单说一下各个软件的用途。如果是直接从SVN下载获得RED5,那么这里是不具备WIN下运行的文件的,所以就需要ant server来编译运行。下载安装包的朋友就不需要再用ANT来编译了(不过做开发的话,建议还是拖下来比较好,又不大,10几M而已)。Eclipse 是开发RED5服务器端的必须工具,JDK是RED5运行的必要环境。
这里,我以SVN下载版为例来介绍配置。
首先在Eclipse中用SVN插件(右上角有一个小加号的图标->other->SVN xxx)从RED5官方网站获得最新的代码(我下了至少两个小时,美国到中国好远啊。。。)SVN地址在RED5的官方网站,我下载的时候为
http://svn1.cvsdude.com/osflash/red5/java/server/trunk,连接上以后,在最上面的那一级点右键,选择check out,然后选择目标路径什么的就不再多说了。。
下载完成后,需要为Eclipse指定RED5的Build文件,在左边的列表顶端文件上点右键,然后选择External tools(工具栏绿色的PLAY图标,有红色锁的那个。。),打开后选左侧择蚂蚁图标(ANT),右键->Creat,输入文件名 server_all,然后点第一行的浏览按钮,在弹出的窗口中选择build.xml,确定。然后选择target标签,在下面的选择中把all勾选, 并选中该行,然后Apply.再操作一次,新建server_server,同样选择build.xml,然后在target中把all的勾选取消,选择 server,同样选中该行,点Apply.
这个时候运行server_all,我在这里出现了错误(详细见上一篇日志),解决办法为修改build.properti中的JAVA版本号与本机实际JDK版本号一致。另外也有人说报其他错误,要修改BUILD.XML,但我没有遇到这个问题(参见
red5安装 经典_Red5+的安装和使用
)。[www.61k.com)
当你看到BUILD SUCCESS的时候,恭喜你,编译成功咯。
OK,接下来可以建立第一个应用程序了,为了省事,可以去RED5的webapps里面,把test直接复制一份,改名为demo,然后把里面除了 WEB-INF以外的其他文件删除,再进WEB-INF中,把src和class两个文件夹清空,在把除了这两个文件夹以外的其他文件夹删除(如果有的 话),现在终于清净了,在Eclipse中把工作区设置在RED5的webapps,然后新建一个项目,命名为demo,这个时候你会发现刚才弄好的文件 夹demo中的内容已经显示在左边了:)右键选择src,Build Path->Use as Source Folder,将其指定为代码文件夹,然后在项目名demo上右键选择Properties,选择Java Bulid Path,在选择Source标签,在下面的Browse中选择Class目录,将其指定为目标目录。删除左边自动生成的BIN目录,OK!
为了编译RED5程序,我们要把RED5的包导入到现在的项目中来。在项目名上点右键选择Properties,然后在Java Build Path中选择Libraries,点击Add External JERS将RED5中的red5.jar包含入项目。然后,就可以按照RED5自带的指导文件建立第一个RED5程序啦!
red5安装 经典_Red5+的安装和使用
公司今天需要装一台RED5的服务器用来开发程序。[www.61k.com)发现RED5的0.6已经正式放出,以前我写过一篇关于用SVN进行抽取,然后建立RED5项目的文章。而对于一般的开发者来说,不需要去修改RED5本身的程序,只需要建立自己的应用程序就可以了。现在把建立过程记录下来,希望对各位有所帮助。本文适合第一次接触RED5(WIN平台下),而不知道如何开始建立自己的应用程序的用户。
流程:
1.下载最新版本的RED5 http://osflash.org/red5
2.安装RED5,注意在安装RED5前要先安装好JRE,安装RED5的时候会要求指定JRE的目录的。
3.到RED5的安装目录,找到doc/templates目录,该目录中存放了一个标准的RED5应用程序模版myapp,将其复制到RED5安 装目录中的webapps目录下,并改名为你喜欢的文件夹名,比如你要开发一个聊天的程序,那么可以把myapp改为myChat,这个名字就是以后你要 连接的服务名了。
61阅读请您转载分享:
4.在WEB-INF中新建一个文件夹src用来存放程序的源代码,新建一个classes文件夹用来存放编译后的文件。
5.打开Eclipse,将工作区指定为RED5安装目录下webapps,然后新建一个项目,项目名为myChat.这个时候你应该发现刚才 myChat中的文件都被加载进来了,我们首先把src目录指定为源代码目录,右键选择src,在弹出的菜单中选择Build Path->Use as Source Folder,即将其指定为代码文件夹。接下来要指定项目的目标目录,在项目名上右键选择Properties,选择Java Bulid Path,在选择Source标签,在下面的Browse中选择Class目录,将其指定为目标目录。然后选择Libraries,点击Add External JARs,将RED5安装目录下的red5.jar包含进来。
6.这个时候,在Eclipse的左边应该多了WEB-INF/src这样一个东东,我们将要在这里开始写入我们的第一个项目代码。右键选择它,在 弹出的菜单中选择New->Package,新建一个包,举例,包名可以为org.d5.first,然后再在生成的org.d5.first这个 包上继续右键选择New->File,输入文件名
Application.java。并在建好的文件中输入以下代码:
package org.d5.first;
import org.red5.server.adapter.ApplicationAdapter;
public class Application extends ApplicationAdapter {
red5安装 经典_Red5+的安装和使用
public String login(){
return "Welcome to Chat Servers";
}
}
7.进行配置。(www.61k.com]编辑WEB-INF下的red5-web.xml,找到bean id=”web.handler”一句,将class=”XXX”中的XXX位置修改为org.d5.first.Application,这样本程序将 以刚才写的Application来运行。删除后面的bean
id=”server.handler?整句,因为我们暂时用不到这个东东。编辑web.xml,找到webAppRootKey,将其下面的param -value标签中的值修改为/myChat。编辑red5-web.properties,将第一句修改为webapp.contextPath= /myChat
8.编译项目
9.重新启动RED5服务器
10.在FLASH中新建一个文件,输入以下代码:
nc = new NetConnection();
nc.connect("rtmp://localhost/myChat");
nc.onResult = function(obj){
trace(obj);
}
nc.call("login",nc);
运行程序,显示结果为Welcome to Chat Servers。第一个RED5应用程序诞生了,呵呵:)
red5安装 经典_Red5+的安装和使用
Red5 简单安装指南howto Red5是个开源的flash服务器,相对fms 4500$的一个lic的价格,能省好多钱哦,今天就测试安装一下Red5
1.配置java环境
去sun网站下载最新的jdk1.5.0_07,怎么安装不说了,直接解压安装到/usr/java/jdk1.5.0_07目录
然后在/etc/profile添加以下几句信息
export
PATH=$PATH:/usr/java/jdk1.5.0_07/bin:/usr/java/jdk1.5.0_07/jre/bin export JAVA_HOME=/usr/java/jdk1.5.0_07
export
CLASSPATH="./:/usr/java/jdk1.5.0_07/lib:/usr/java/jdk1.5.0_07/jre/lib"
export
LD_LIBRARY_PATH=/usr/java/jdk1.5.0_07/jre/lib/i386:/usr/java/jdk1.5.0_07/jre/lib/i386/server
注意,默认的as4可能自带java,把自带的先删除了!!
2.安装apche-ant
去apache网站下载最近的版本,安装方法跟jdk差不多,也是解压到
/usr/local/ant目录
然后在/etc/profile添加以下几句信息
export ANT_HOME=/usr/local/ant
export PATH=$PATH:/usr/local/ant/bin
source /etc/profile 让配置生效
3.安装Red5
可以用svn下载最新的版本
svn co http://svn1.cvsdude.com/osflash/red5/java/server/tags/0_5/ red5 cd red5
编译:输入ant命令,自动编译
运行
./red5.sh &
red5安装 经典_Red5+的安装和使用
4.简单的配置,使用demo
配置端口:conf/red5.properties 修改此文件就行
访问http://ip:5080
可以运行自带的demo,记住如果你配了ip,自带的demo里的地址localhost都要换成你的真实地址
在线录制的例子: 在线播放的例子: 分享例子,类似远程演示:
red5安装 经典_Red5+的安装和使用
开源的视频会议系统openmeetings——安装
OpenMeetings是一个开源的视频会议软件。(www.61k.com)它是基于OpenLaszlo’s的新流媒体格式和开源的Flash服务器---Red5!
本文以安装openmeetings目前的最新版本openmeetings05Beta5为例,详细说一下我的安装过程。这一版本的官方安装 说明见
http://code.google.com/p/openmeetings/wiki/InstallationOf05RC5Beta5,不 过是英文的。官方的安装给出了基于多种数据库和不同操作系统的安装方法。下面仅以基于mysql数据库和windows 2003 server的安装为例,来说明整个安装过程。
1. 到http://code.google.com/p/openmeetings/downloads/list 上下载openmeetings的最新版本(目前为止最新是openmeetings05Beta5)。
2. 安装mysql数据库,我安装的是mysql-5.0.41-win32的版本,安装后创建一个空的数据库,名为xmlcrm。
3. 安装Open-Office-Service,我安装的是openoffice.org2.2。
a. 安装完毕后,打开“开始”-〉“程序”->“OpenOffice.org 2.2”-〉OpenOffice.org Base(若是第一次运行,需要注册并配置,填写注册信息,不要进行数据库配置)
b. 软件运行后,点“开始”-〉“运行”-〉cmd,进入“命令提示符”; c. 进入openoffice的安装目录下的program目录,如:C:\Program Files\OpenOffice.org 2.2\program
d. 输入以下命令使openoffice在手动模式下运行在8100端口上:soffice.exe -headless -nologo -norestore
-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager e. 输入以下命令检查服务是否正常运行:netstat -anp tcp
61阅读请您转载分享:
f. 点“回车”后会出现一个列表,当发现列表中有如下一行,说明配置成功:TCP 127.0.0.1:8100 0.0.0.0:0 LISTENING
4. 安装“ImageMagick”,我安装的是
ImageMagick-6.3.6-1-Q16-windows-dll
5. 安装Ghostscript,我装的是Ghostscript 8.51
6. 安装SWFTools,我装的是swftools-0.8.1
7. 安装jre,我装的是jre1.5.0
red5安装 经典_Red5+的安装和使用
8. 安装Red5 Server,我装的是red5-0.6.3,下载地址
http://dl.fancycode.com/red5/0.6.3/win/setup -red5-0.6.3.exe
9. 将openmeetings的压缩包解压,得到的xmlcrm文件夹放到
$RED5-HOME/webapps/目录下。[www.61k.com]那么,现在$RED5- HOME/webapps/xmlcrm/就是视频会议系统的主目录($RED5-HOME表示red5的安装目录,接下来我们用$ OPENMEETINGS-HOME代表视频会议系统的主目录)
10. 到$OPENMEETINGS-HOME/install文件夹下,找到文件
mysql_hibernate.cfg.xml,改名为hibernate.cfg.xml,打开它,修改下列语句:
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property
name="connection.url">jdbc:mysql://localhost:3306/xmlcrm </property>
11. 重新启动red5,打开浏览器,会出现图1的画面,点击“continue with STEP 1”,出现图2的画面;
12. 将图2的所有信息填写完整后,点击“senden”,等待几分钟的时间(因为此时要执行安装过程,主要是要向数据库中创建好多表,你可以到$RED5- HOME/log目录下找到red5.log文件查看安装记录,以确定安装过程是否正常),若最后出现图3的画面,则表示安装成功,点击“Enter the Application”进入系统。
red5安装 经典_Red5+的安装和使用
图1
red5安装 经典_Red5+的安装和使用
图2
red5安装 经典_Red5+的安装和使用
图3
red5安装 经典_Red5+的安装和使用
关于red5——开源的Flash流媒体服务器red5简介
在介绍RED5之前,有必要先介绍一下Flash Media Server。(www.61k.com]
Flash Media Server,简称FMS,以前也叫Flash Communication Server(FCS),是Flash大家庭里的一员,被称为是目前开发Web音视频应用程序(比如,视频聊天室、视频会议系统、播客系统、音视频留言等 等)的最方便最快捷的解决方案。也在web应用程序开发上有着越来越广泛的应用。FMS如此的优良功能当然并不是免费提供给广大用户的,4000美金每个 点的价格让很多开发人员望而却步。于是,开源的Red5成为人们的新宠。
Red5是一个采用Java开发开源的Flash流媒体服务器,功能上与fms类似。它支持:把音频(MP3)和视频(FLV)转换成播放流; 录制客户端播放流(只支持FLV);共享对象;现场直播流发布;远程调用。
Red5使用RSTP作为流媒体传输协议,在其自带的一些示例中演示了在线录制,flash流媒体播放,在线聊天,视频会议等一些基本功能。
Red5的官方网站是http://osflash.org/red5,它目前正处在研发阶段,现在发布的测试版本为0.6.3,它的最终正式版为1.0,red5研发的进程已列在了官方网站上:http://osflash.org/red5/roadmap。
下面介绍几个比较好的学习Red5的网站:
Openred5中文开源社区:
http://www.openred5.cpm/bbs/index.php
一个red5学习者的博客:
http://blog.tianya.cn/blogger/view_blog.asp?BlogName=weitiger 第五动力:
http://www.d5power.com/thread.php?fid=20
61阅读请您转载分享:
本文标题:路由器的安装和使用-二选一:哪个路由器安装使用方法更好61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1