用了两星期多,在空闲时间研究了下基于red5的实时视频直播,今天终于有了第一个版本,虽然比较简单,但是费了我好多心血,从零开始到现在,学到了好多以前根本就不知道的知识,根本没用过的东西。。。。在这里和大家分享,共同进步!
先把效果给大家看看吧,然后再细说这个过程,以后还会有后续的研究日记。。。。也希望我能坚持下去。。。。
实现了实时视频,群聊,在线列表……
环境搭建:red hat 6 linux+red5(0.9)
flex 3 + myeclipse8.5
这儿要说一下,搭环境还是挺重要的,我刚开始是跑在window上的,window上的环境搭建还是挺容易的,网上资料也很多,为了方便我没装ant(也不知道window环境下为啥不用装),等到了后来将red5移到linux上时,环境搭建就不像window上那样简单了,ant是必要的,作为编译red5(解压目录下有个build.xml,window解压目录下没有),另外设要置好jdk环境变量,启动red5之前要ant下,参照
http://wangguorui89.iteye.com/blog/698230,可是这时会抛出异常,找不到各种配置文件,当时就很郁闷,版本不一样?再网上找了好久也没解决,最后还是到官网上找找,还是官网上的配置说明给力,
http://trac.red5.org/wiki/Install,原来缺的东西还需要在它的版本库中checkout 下来,顺便就又学了些svn的东西,帽是它上面就说了0.9版本的需要这么做。。。。。还有一点在linux下安装时没有提示输入ip和端口,默认的就是0.0.0.0(表示都可以访问),5080(red5端口号),这些都在conf/red5.proerties中配置。
red5的中文资料的确很少,但是官网上的技术文档还是还是容易读懂的,我也找了个pdf版本的,另外red5api也是必须的。
red5 应用程序:项目文件必须放在webapps下面,在项目一级目录中必须有WEB-INF和META-INF,大家可以直接把解压后的例子中的拷贝过来,然后在WEB-INF中会有三个重要的文件:
red5-web.properties:里面webapp.contextPath=/项目文件夹名称
red5-web.xml:只需要改动bean id = “web.hander” class="java项目class文件目录"(响应客户端请求)
web.xml:里面<display-name>和<param-value>一定要与项目名称一样
新建java工程,我是直接将路径放在webapps下的,然后将WEB-INF和META-INF导入,注意要将java项目的output folder路径设为WEB-INF下的classes文件夹下,不然会抛出ClassNotFound异常。
java程序比较简单,一个用户列表共享对象,一个用户消息共享对象,当用户连接到服务器(appConnect())时,将用户名和连接信息形成对应存入在线列表,当用户断开时(appDisConnect()),再删除此对应关系,另外还有一个广播消息方法,用于客户端调用。
客户端(flex):
视频发布端,视频接收端,用户列表刷新,聊天内容更新,连接服务器(初始化时)……
视频发布端调用Camera,Microphone,这里要注意他们的相应配置,以达到视频的最佳效果,例如我设置的是:
cam.setMode(320,240,10); //设置摄像头的捕获模式 分辨率: 320*240 每秒10帧
cam.setQuality(100*100,80);
mic.setUseEchoSuppression(true); //抑制回音(很重要)
在刷新用户列表和聊天记录时,设置监听器:
//为共享对象添加异步事件,这也是服务器同步处理多客户端最关键的地方,
//一个客户端进行了什么操作,其它客户端也会有相应的变化,就是通过此事件来完成的
listSO.addEventListener(SyncEvent.SYNC, listSOSyncHandler);
//每当由用户进入时,listSOSyncHander方法执行,刷新用户列表
//用户列表共享对象被更新之后事件
private function listSOSyncHandler(evt:SyncEvent) {
showUserList(); //更新用户列表
}
private function showUserList() {
userArr = new ArrayCollection();
//用户数组更新
for (var j in listSO.data) {
userArr.addItem({username:listSO.data[j]});
}
userList.dataProvider = userArr; //添加DataProvider
}
还有在视频流接受端可以设置缓冲,以保证视频的流畅。
remoteStream.bufferTime=2; //缓冲2秒再播放,保证视频流畅
大家可以看看actionScript API中的Camera,Microphone相关方法说明。
测试的时候,尽量不要在本机上,这样效果不是很明显,可以把.swf文件嵌入到jsp中,部署到应用服务器上,用多台主机登陆,看看视频效果……
另外大家可以参看fms下的视频直播实现相关资料,毕竟fms资料还是相当多的,我就是遇到了瓶颈突然想到了fms下的开发,(因为它俩某些方面实现机制还是大同小异的,)才解决问题的。
http://mhqawjh.iteye.com/它的具体代码在豆瓣上有一个系列讲解
http://www.docin.com/mydoc-23978659-1.html 相信对大家肯定有所帮助的。
接下来做的事情:处理些细节,比如视频请求应答交互,实现简单共享白板。
第一次发表文章,可能有很多没写好的地方,望大家多多指教!
分享到:
相关推荐
此代码仅用于对flex视频功能进行初步学习用 代码流程很清楚
red5和flex的链接实例,毕设老师给的参考,希望可以帮助到你。
flex与red5服务器结合,实现流视频的实时播放!
Red5 英文说明文档, flex视频 ,flash流媒体
本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。 本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...
Flex+Red5+Tomcat视频语音录制、播放
Flex Red5 Tomcat 视频语音录制和播放 在网上找,总发现文章都一样,而且都是不完整的, 这里希望能够给跟我一样学习中的朋友一些帮助, 详细说明在压缩文件中有。 Flex+Red5+Tomcat视频播放器: ...
本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。 本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...
java和Flex的视频通话,使用的是red5的服务器,其中服务器和客户端的源码都写好了,可以直接运行
NULL 博文链接:https://feiyan35488.iteye.com/blog/509766
flex + red5 简单实例,Flex作为一个客户端。同Red5自带的例子中的一个服务,客户端请求服务器的简单例子
Red5的Web视频、音频系统开发
Flex作为一个客户端。同Red5自带的例子中的一个服务一起使用,合成一个简单的聊天例子。
基于red5的多人聊天,使用了sharedobject,此例子仅用于对不了解sharedobject的人做一个入门的例子
基于Red5的Web视频、音频系统开发.pdf
Red5 基于 Java 和一些功能强大的开源框架,为企业级应用奠定了标准。它使用 RTMP,RTMPT,RTMPS 和 RTMPE 流媒体协议, 支持:将音频(MP3)和视频(FLV,MP4,F4V,3GP)转换成播放流;录制客户端播放流;共享对象...
本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。 本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...
flex与java之间的信息交互,使用的框架是red5
import org.red5.server.api.Red5; import org.red5.server.api.service.IServiceCapableConnection; import org.red5.server.api.so.ISharedObject; import org.red5.server.api.ScopeUtils; import org.red5....
简单的flex+red5学习,对初步学习者很有帮助