`
nanjingjiangbiao_T
  • 浏览: 2573481 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

red5视频聊天源码

 
阅读更多

忙了好几天,最近也算把Red5服务器服务端基本搞定了。
<wbr><wbr><wbr> 为了熟悉服务端代码,以及了解API,我仿照着FMS的模式做了一个多人聊天室。基本实现了视频、群聊、私聊几个基本功能。看到网上似乎还没有人放出这类的源代码,我索性就先当回螃蟹吧!<br>   我们先来看代码:<br>   <span style="color:red">服务端:</span><br>   Application.java<br>   </wbr></wbr></wbr>

package org.jerry.videochat;

import java.util.*;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.red5.server.api.service.IServiceCapableConnectio<wbr>n;<br> import org.red5.server.api.so.ISharedObject;<br><br> public class Application extends ApplicationAdapter {<br> // 属性<br> private IScope appScope;<br><br> private String username;<br><br> private ISharedObject listSO;<br><br> private ISharedObject msgSO;<br><br> private Map&lt;String, IConnection&gt; onLineClient = new HashMap&lt;String, IConnection&gt;();<br><br> // 方法<br> // 此应用开始运行时触发的方法<br> public boolean appStart(IScope app) {<br><wbr><wbr> if (!super.appStart(app)) {<br><wbr><wbr><wbr> return false;<br><wbr><wbr> }<br><wbr><wbr> appScope = app;<br><wbr><wbr> return true;<br> }<br><br> // 客户端连接的时候触发的方法<br> public boolean appConnect(IConnection conn, Object[] params) {<br><wbr><wbr> username = (String) params[0];<br><wbr><wbr> // 登入时将连接ID和连接信息形成对应关系并存入在线列表<br><wbr><wbr> String link_id = conn.getClient().getId();<br><wbr><wbr> onLineClient.put(username, conn);<br><wbr><wbr> // 为用户列表共享对象添加属性<br><wbr><wbr> // 创建用户列表共享对象<br><wbr><wbr> listSO = getSharedObject(appScope, "listSO", false);<br><wbr><wbr> // 创建用户聊天内容共享对象<br><wbr><wbr> msgSO = getSharedObject(appScope, "msgSO", false);<br><wbr><wbr> listSO.setAttribute(link_id, username);<br><wbr><wbr> return true;<br> }<br><br> // 广播消息<br> public void broadcastUserMsg(String msg) {<br><wbr><wbr> // 公聊<br><wbr><wbr> // 刷新共享对象属性<br><wbr><wbr> msgSO.setAttribute("msg", msg);<br> }<br><br> // 私聊信息<br> public void msgFromPrivate(String msg, String from, String to) {<br><wbr><wbr> IServiceCapableConnectio<wbr>n fc = (IServiceCapableConnectio<wbr>n) onLineClient<br><wbr><wbr><wbr><wbr> .get(from);<br><wbr><wbr> IServiceCapableConnectio<wbr>n tc = (IServiceCapableConnectio<wbr>n) onLineClient<br><wbr><wbr><wbr><wbr> .get(to);<br><wbr><wbr> fc.invoke("showMsgByPrivate", new Object[] { msg });<br><wbr><wbr> tc.invoke("showMsgByPrivate", new Object[] { msg });<br> }<br><br> // 用户断开连接的时候触发<br> public void appDisconnect(IConnection conn) {<br><wbr><wbr> String dis_link_id = conn.getClient().getId();<br><wbr><wbr> String user = (String) listSO.getAttribute(dis_link_id);<br><wbr><wbr> // 根据ID删除对应在线纪录<br><wbr><wbr> onLineClient.remove(user);<br><wbr><wbr> // 删除用户列表共享对象的对应属性<br><wbr><wbr> listSO.removeAttribute(dis_link_id);<br> }<br> }<br><br>   <span style="color:red">客户端代码:</span><br><br>   videoChat.as<br><br> package<br> {<br> import fl.controls.Button;<br> import fl.controls.List;<br> import fl.controls.TextArea;<br> import fl.controls.TextInput;<br> import fl.data.DataProvider;<br> import fl.managers.StyleManager;<br> import flash.display.Sprite;<br> import flash.events.AsyncErrorEvent;<br> import flash.events.Event;<br> import flash.events.KeyboardEvent;<br> import flash.events.MouseEvent;<br> import flash.events.NetStatusEvent;<br> import flash.events.SecurityErrorEvent;<br> import flash.events.SyncEvent;<br> import flash.media.Camera;<br> import flash.media.Microphone;<br> import flash.media.Video;<br> import flash.net.NetConnection;<br> import flash.net.NetStream;<br> import flash.net.SharedObject;<br> import flash.text.TextField;<br> import flash.text.TextFormat;<br> import flash.ui.Keyboard;<br><br><br> public class videoChat extends Sprite {<br><wbr><wbr> //属性<br><wbr><wbr> private var IP:String;<br><wbr><wbr> private var redPath:String;<br><wbr><wbr> private var nc:NetConnection;<br><wbr><wbr> private var ns:NetStream;<br><wbr><wbr> private var ns2:NetStream;<br><wbr><wbr> private var cam:Camera;<br><wbr><wbr> private var mic:Microphone;<br><wbr><wbr> private var listSO:SharedObject;<br><wbr><wbr> private var msgSO:SharedObject;<br><wbr><wbr> private var userArr:Array;<br><wbr><wbr> private var sendMsg:String;<br><wbr><wbr> private var now:Date;<br><wbr><wbr> private var userIDObj:Object;<br><wbr><br><wbr><wbr> //构造函数<br><wbr><wbr> public function videoChat() {<br><wbr><wbr><wbr> _init();<wbr><wbr><wbr><wbr><wbr><wbr> //初始化<br><wbr><wbr><wbr> _setComponentStyle();<wbr><wbr><wbr> //设置组件样式<br><wbr><wbr><wbr> _startConnect();<wbr><wbr><wbr><wbr> //开始连接服务器<br><wbr><wbr> }<br><wbr><br><wbr><wbr> //初始化<br><wbr><wbr> private function _init() {<br><wbr><wbr><wbr> IP = "192.168.0.10";<br><wbr><wbr><wbr> redPath = "rtmp://" + IP + "/videoChat";<br><wbr><wbr><wbr> nc = new NetConnection();<br><wbr><wbr><wbr> from.text = "guest" + int(Math.random() * 1000);<br><wbr><wbr><wbr> to.text = "所有人";<br><wbr><wbr><wbr> now = new Date();<br><wbr><wbr> }<br><wbr><br><wbr><wbr> //设置组件样式<br><wbr><wbr> private function _setComponentStyle() {<br><wbr><wbr><wbr> var myTF:TextFormat = new TextFormat();<br><wbr><wbr><wbr> myTF.size = 12;<br><wbr><wbr><wbr> myTF.font = "雅黑宋体";<br><wbr><wbr><wbr> StyleManager.setStyle("textFormat", myTF);<br><wbr><wbr> }<br><wbr><br><wbr><wbr> //开始连接<br><wbr><wbr> private function _startConnect() {<br><wbr><wbr><wbr> nc.addEventListener(NetStatusEvent.NET_STATUS, _statusHandler);<br><wbr><wbr><wbr> nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, _securityHandler);<br><wbr><wbr><wbr> nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, _asyncHandler);<br><wbr><wbr><wbr> nc.connect(redPath, from.text);<br><wbr><wbr><wbr> nc.client = this;<br><wbr><wbr> }<br><wbr><br><wbr><wbr> //状态监听<br><wbr><wbr> private function _statusHandler(evt:NetStatusEvent) {<br><wbr><wbr><wbr> if (evt.info.code == "NetConnection.Connect.Success") {<br><wbr><wbr><wbr><wbr> chatCon.text += "连接成功!/n";<br><wbr><wbr><wbr><wbr> _scrollToEnd();<br><wbr><wbr><wbr><wbr> _publishVideo();<wbr><wbr><wbr><wbr> //发布自己的视频<br><wbr><wbr><wbr><wbr> _setListSO();<wbr><wbr><wbr><wbr><wbr> //创建用户列表共享对象<br><wbr><wbr><wbr><wbr> _setMsgSO();<wbr><wbr><wbr><wbr><wbr> //创建发言信息共享对象<br><wbr><wbr><wbr><wbr> sendBtn.addEventListener(MouseEvent.CLICK, _sendBtnByClick);<wbr><wbr> //单击发送信息<br><wbr><wbr><wbr><wbr> stage.addEventListener(KeyboardEvent.KEY_DOWN, _sendBtnByKey);<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
评论

相关推荐

    red5chatv2.1 red5建的一个FLASH视频聊天会议例子

    red5chatv2.1 red5建的一个FLASH视频聊天会议例子,有JAVA和FLASH源码

    基于flex 和red5的视频聊天

    NULL 博文链接:https://feiyan35488.iteye.com/blog/509766

    [聊天留言]中龙多人视频聊天室源码_zlchat

    1.安装 解压zlchat_win.zip,运行setup_xampp.bat 2.启动 运行apache_start,mysql_start ,red5/red5.bat 3.登入 在浏览器中输入http://localhost/meeting 用户:admin 密码:123456

    Red5 Java 端聊天室代码

    这个文件是放在red5下的视频聊天用的服务端文件。

    red5聊天室、视频、用户列表的源代码

    为了熟悉服务端代码,以及了解API,我仿照着FMS的模式做了一个多人聊天室。基本实现了视频、群聊、私聊几个基本功能。看到网上似乎还没有人放出这类的源代码,我索性就先当回螃蟹吧!

    flex 视频聊天 基于red5

    此代码仅用于对flex视频功能进行初步学习用 代码流程很清楚

    RED5&Flex流媒体应用实战开发视频教程

    本系列教程注重实战,不仅讲解了...难度由浅入深,知识点由少到多,并且尽量涵盖Red5和Flex方面的多种知识点,而且避免知识点重复,覆盖面较广,三个项目的实战性均很强,代码只需稍加修改就可以用到真实的项目开发中。

    RED5&Flex流媒体应用实战开发课程2

    本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。  本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...

    RED5&Flex流媒体应用实战开发课程1

    本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。  本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...

    使用red5.doc

    Red5使用RSTP作为流媒体传输协议,内置了一些示例,这些示例实现了在线录制, flash流媒体播放,在线聊天,视频会议等一些基本的功能。由于系统本身是开源的,在碰到问题的时候也比较容易解决,大不了直接改代码,在...

    openfire red5插件 sparkweb源码

    是flex 3的源码,而且进行了汉化,源码中缺的lib文件也加上了。支持视频聊天。使用Flash builder可以直接导入,注意选择flex 3.6的sdk。希望能对大家有帮助。

    flash media server聊天室开发示例

    flash 聊天室 actionscrip 语音聊天室

    滚聊网随机聊天整站源码

    是国外聊天轮盘的国内版,功能优于国外的网站,基于red5和java开发的,p2p技术,上传至网站即可使用,可以作为网站和论坛的聊天娱乐平台。 更新: v2.0 (5.23上线) 加入快捷键功能、视频秀及来自域名显示,同时修正...

    滚聊网随机聊天整站源码 v2.0.rar

    国外聊天轮盘的国内版,提供随机视频聊天服务,运用red5和java技术,采用p2p的数据传输方式,最新版2.0 加入快捷键功能 风格更美观,可以作为网站或论坛的聊天板块。

    JAVA上百实例源码以及开源项目源代码

    Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例...

    JAVA上百实例源码以及开源项目

    这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet...

    video-with-text-chat:使用Vonage Video API向基本的视频聊天中添加发短信功能

    为视频聊天添加短信功能 本系列教程将探讨以及您可以使用它进行构建的内容。 Video API非常健壮且可高度自定义,因此我们将逐步构建和扩展应用程序的功能。 这次,我们将研究如何将文本聊天添加到基本的音频视频聊天...

    月光小屋 LChat v1.0

    视频环境:FMS/RED5 用户视频聊天不用安装任何插件 聊天室特性:AJAX无刷新聊天、在线大头贴拍照、自由视频聊天(可同时和多人视频)、屏蔽消息、保存聊天记录。 支持和所有Mysql会员系统整合(如论坛系统,交友...

    video-chat:从 code.google.compvideo-chat 自动导出

    ##Source Code 为我们最新的视频聊天源代码,请访问我们的 GitHub 存储库: : 使用 svn 获取最新(最新)源码,下载包可能较旧 (非会员可以通过 HTTP 匿名查看只读工作副本。) svn 结帐 ###问题使用SVN? ...

Global site tag (gtag.js) - Google Analytics