java 使用adobe fms流媒体

本文介绍了一个基于Java和Flex结合FMS的视频聊天程序。该程序实现了视频聊天、文字消息发送、在线列表等功能,并详细说明了Java端的Socket连接、在线列表实现及消息发送流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   转载别人的 

    最近完成的 Java Flex Fms 视频聊天程序,虽然说同类的东西还是有的,但是这是我自己写的。 和大家交流一下,由于要配置fms3 服务器端,和mySql 数据库所以,源代码配置起来很麻烦,要代码的话和我联系。 说一下和java 有关的部分,因为视频走的是fms,所以和java代码部分没有任何关系。 java的功能部分主要有这么几个: 1.建立socket Tcp/Ip连接到服务器端。 2.实现在线列表,好友列表,黑名单等功能。 3.发送消息,控制有关申请,拒接等控制操作。 4.连接mySql数据库,对登录信息进行管理。 功能的解释在 http://ltoooooooo.javaeye.com/blog/424008 下面发一下截图: (登录&注册) (单聊申请) (单聊对话框) (视频申请) (视频聊天窗口)


 

继续上一篇,写一下有关的代码。

 

声明一下:本人才疏学浅,有什么不妥的地方,多加指正,先谢谢了

 

Java方面和一般的socket聊天室一样,就是建立一个数据库,连接的方法不再细说.

在线列表实现方法:

建立个线程池,vector,在每个线程中增加一个变量,用来存储账号信息,就是当用户连接的时候,服务器端遍历这个vector把用户列表发给客户端。

单聊,广播实现方法:

由于加入了用户账号的信息,只要找到这个线程,用输出流,输出即可。广播就是给线程池里的所有人发就行。

socket:

在java端建立 ServerSocket,等待flash 连接。客户端向服务器端发数据,包括控制信息,分别用不同的开头表示,如在java 端收到

Java代码 
  1. try{  
  2.                   while(true){  
  3.                        
  4.                       line=inse.readUTF();  
  5.                       if(line.startsWith("000")){//000 开头的为普通信息,不同卡头处理不同  
  6.                           
  7.                        myserver.sendmeseage(line);  
  8.                   
  9.                       }  
  10. }catch(e){  
  11.     异常时执行  
  12. }finally{  
  13.     客户端退出时执行  
  14. }  

 

 

java Tcp/Ip的构架就不说。网上一般都有介绍,下面说一下fms的配置,使用。我这个一个相当简单的例子。(再次强调:视频是flex连接fms 与java 端无关)

 

1,下载fms 3 安装,一路下一步,当要输入序列号的时候,空着不填,就是开发者版本,有个连接数的限制,但功能上不会有限制。记住用户名,密码

2,按安装路径打开这个 就两个用的上的东西

 

applications 为远程要连接的文件,放在下面,就是是说所有的东西都爱要放在这里,相当于PHP的WWW

fms_adminConsole.swf 为控制的软件。

 

3.安装后要启动服务,一般已启动,有必要的话,可以打开它,在tool 文件夹中。

 

4.连接这个服务器。

 

    我们在applications 下建立这么个文件夹 test_video1。用RTMP 协议,不是HTTP 哦!

 

As3代码 
  1. appServer="rtmp://127.0.0.1/test_video1";  
  2.  netConnection = new NetConnection();  
  3.  netConnection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);  
  4.  netConnection.connect(appServer);  
  5.  netConnection.client=this;//标示客户端,别忘了哦!  

 

 NetStatusEvent.NET_STATUS监听连接事件,结果要执行netStatusHandler 函数。

 NetConnection.Connect.Success 是连接成功。否则失败,下面是事件的处理函数

 

As3代码 
  1. private function netStatusHandler(evt:NetStatusEvent):void  
  2. {     
  3.  if ( evt.info.code=="NetConnection.Connect.Success" )  
  4.  {  
  5.   startCommunicate();//成功,继续执行  
  6.  }  
  7.  else  
  8.  {  
  9.   Alert.show("fms连接失败"+evt.info.code);  
  10.  }  
  11. }  

 

5.连接成功后

  在FMS服务端有代码: 把这个代码拷贝到记事本中,另存为test_video1.asc(flash as 通信文件),放在test_video1文件中,注意:这两个文件名要一样

 

As代码 
  1. <span style="white-space: normal;"> <span style="white-space: pre;">userList=[];</span></span>  
  2.   
  3. application.onAppStart=function()  
  4. {  
  5.  trace("fms服务器启动......");  
  6. }  
  7.   
  8. application.onConnect = function(currentClient)  
  9. {             
  10.   currentClient.communicateServer= function(value)  
  11.   {  
  12.    currentClient.username=value;  
  13.    for(j=0;j<userList.length;j++)  
  14.  {  
  15.   if ( userList[j]==currentClient.username)  
  16.   {  
  17.    userList.splice(j,1);  
  18.   }  
  19.  }  
  20.    userList.push(value);  
  21.    trace("当前用户列表"+userList);   
  22.    application.broadcastMsg("playVideo",userList);  
  23.   }  
  24.  }  
  25. }  
  26.   
  27. application.onDisconnect=function(currentClient)  
  28. {  
  29.  trace("用户"+currentClient.username+"离开聊天室");  
  30.    
  31.  for(j=0;j<userList.length;j++)  
  32.  {  
  33.   if ( userList[j]==currentClient.username)  
  34.   {  
  35.    userList.splice(j,1);  
  36.   }  
  37.  }  
  38.  trace("当前用户列表"+userList);  
  39.  application.broadcastMsg("playOtherVideo",userList);  
  40.  application.broadcastMsg("hisOut",currentClient.username);//本例子不涉及  
  41. }  

   几个需要解释的:

     1.定义一个数组用于存放客户端名称。

     2.application.onConnect在连接是执行。里面定义的方法,要在客户端调用。

     3.application.broadcastMsg("playVideo",userList);为广播,调用所有客户端的playVideo函数,后面为参数。

     4.application.onDisconnect=function(currentClient),为断开连接时执行,像Java中的finally。

 

 

 客户端:

 

responder=new Responder(dovideo);//定义一个回调函数
 netConnection.call("communicateServer",responder,username);

 

解释一下:responder 为一个回调函数,,意思是在执行netConnection.call这句时,先在远程服务器端执行communicateServer 这个函数,执行后在执行客户端responder 的函数,

username是要传递的参数。

 

 

自此连接的阶段完成了,并且把客户端记录在数组中。方便以后查找,因为我们要完成的是单聊。

 

6.进入下个阶段,视频:

    如何获取本地视频?

 

   用摄像头就行啊!  camera = Camera.getCamera();

As3代码 
  1. if (!camera)  
  2. {  
  3.      Alert.show( "系统没有检测到摄像头,建议您安装摄像头");  
  4. }  
  5.  camera.setMode(160,100,24);//设置模式,(长,宽,帧率)  
  6.  camera.setQuality(0,100);//设置质量(0为不限制带宽 ,100 质量为100% )  
  7.  onlyVideo.vd1.attachCamera(camera); //onlyVideo.vd1 为 videoDisplay  
  8.  microphone=Microphone.getMicrophone();  

 

    如何把视频传到服务器上?

 

     outNetStream = new NetStream(netConnection);

As3代码 
  1. outNetStream.attachCamera(camera);  
  2. outNetStream.attachAudio(microphone);  
  3. outNetStream.publish(username,"live");//发布视频  

    live 方式是现场流。

 

    如何播放服务器上的现场流?

 

     因为服务器端由很多人的视频,所以要找到和你聊天的人。

 

    public function playVideo(UserList:Array):void//传来客户端的列表

As3代码 
  1. {  
  2.    
  3.  for(var i:int=0;i<UserList.length;i++)  
  4.  {  
  5.   if ( UserList[i]==onlyVideo.toWho)//找到要播放谁的视频 onlyVideo.toWho 是聊天窗口的对方  
  6.   {  
  7.    var video:Video = new Video();  
  8.    video.width=160;  
  9.    video.height=100;  
  10.    var inNetStream:NetStream= new NetStream(netConnection);  
  11.    video.attachNetStream(inNetStream);  
  12.    inNetStream.play(newUserList[i]);  
  13.    onlyVideo.vd2.addChild(video);   //onlyVideo.vd2 为 videoDisplay  
  14.   }  
  15.  }  
  16. }  
【基于QT的调色板】是一个使用Qt框架开发的色彩选择工具,类似于Windows操作系统中常见的颜色选取器。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备,支持C++和QML语言。这个调色板功能提供了横竖两种渐变模式,用户可以方便地选取所需的颜色值。 在Qt中,调色板(QPalette)是一个关键的类,用于管理应用程序的视觉样式。QPalette包含了一系列的颜色角色,如背景色、前景色、文本色、高亮色等,这些颜色可以根据用户的系统设置或应用程序的需求进行定制。通过自定义QPalette,开发者可以创建具有独特视觉风格的应用程序。 该调色板功能可能使用了QColorDialog,这是一个标准的Qt对话框,允许用户选择颜色。QColorDialog提供了一种简单的方式来获取用户的颜色选择,通常包括一个调色板界面,用户可以通过滑动或点击来选择RGB、HSV或其他色彩模型中的颜色。 横渐变取色可能通过QGradient实现,QGradient允许开发者创建线性或径向的色彩渐变。线性渐变(QLinearGradient)沿直线从一个点到另一个点过渡颜色,而径向渐变(QRadialGradient)则以圆心为中心向外扩散颜色。在调色板中,用户可能可以通过滑动条或鼠标拖动来改变渐变的位置,从而选取不同位置的颜色。 竖渐变取色则可能是通过调整QGradient的方向来实现的,将原本水平的渐变方向改为垂直。这种设计可以提供另一种方式来探索颜色空间,使得选取颜色更为直观和便捷。 在【colorpanelhsb】这个文件名中,我们可以推测这是与HSB(色相、饱和度、亮度)色彩模型相关的代码或资源。HSB模型是另一种常见且直观的颜色表示方式,与RGB或CMYK模型不同,它以人的感知为基础,更容易理解。在这个调色板中,用户可能可以通过调整H、S、B三个参数来选取所需的颜色。 基于QT的调色板是一个利用Qt框架和其提供的色彩管理工具,如QPalette、QColorDialog、QGradient等,构建的交互式颜色选择组件。它不仅提供了横竖渐变的色彩选取方式,还可能支持HSB色彩模型,使得用户在开发图形用户界面时能更加灵活和精准地控制色彩。
标题基于Spring Boot的二手物品交易网站系统研究AI更换标题第1章引言阐述基于Spring Boot开发二手物品交易网站的研究背景、意义、现状及本文方法与创新点。1.1研究背景与意义介绍二手物品交易的市场需求和Spring Boot技术的适用性。1.2国内外研究现状概述当前二手物品交易网站的发展现状和趋势。1.3论文方法与创新点说明本文采用的研究方法和在系统设计中的创新之处。第2章相关理论与技术介绍开发二手物品交易网站所涉及的相关理论和关键技术。2.1Spring Boot框架解释Spring Boot的核心概念和主要特性。2.2数据库技术讨论适用的数据库技术及其在系统中的角色。2.3前端技术阐述与后端配合的前端技术及其在系统中的应用。第3章系统需求分析详细分析二手物品交易网站系统的功能需求和性能需求。3.1功能需求列举系统应实现的主要功能模块。3.2性能需求明确系统应满足的性能指标和安全性要求。第4章系统设计与实现具体描述基于Spring Boot的二手物品交易网站系统的设计和实现过程。4.1系统架构设计给出系统的整体架构设计和各模块间的交互方式。4.2数据库设计详细阐述数据库的结构设计和数据操作流程。4.3界面设计与实现介绍系统的界面设计和用户交互的实现细节。第5章系统测试与优化说明对系统进行测试的方法和性能优化的措施。5.1测试方法与步骤测试环境的搭建、测试数据的准备及测试流程。5.2测试结果分析对测试结果进行详细分析,验证系统是否满足需求。5.3性能优化措施提出针对系统性能瓶颈的优化建议和实施方案。第6章结论与展望总结研究成果,并展望未来可能的研究方向和改进空间。6.1研究结论概括本文基于Spring Boot开发二手物品交易网站的主要发现和成果。6.2展望与改进讨论未来可能的系统改进方向和新的功能拓展。
1. 用户与权限管理模块 角色管理: 学生:查看个人住宿信息、提交报修申请、查看卫生检查结果、请假外出登记 宿管人员:分配宿舍床位、处理报修申请、记录卫生检查结果、登记晚归情况 管理员:维护楼栋与房间信息、管理用户账号、统计住宿数据、发布宿舍通知 用户操作: 登录认证:对接学校统一身份认证(模拟实现,用学号 / 工号作为账号),支持密码重置 信息管理:学生完善个人信息(院系、专业、联系电话),管理员维护所有用户信息 权限控制:不同角色仅可见对应功能(如学生无法修改床位分配信息) 2. 宿舍信息管理模块 楼栋与房间管理: 楼栋信息:名称(如 "1 号宿舍楼")、层数、性别限制(男 / 女 / 混合)、管理员(宿管) 房间信息:房间号(如 "101")、户型(4 人间 / 6 人间)、床位数量、已住人数、可用状态 设施信息:记录房间内设施(如空调、热水器、桌椅)的配置与完好状态 床位管理: 床位编号:为每个床位设置唯一编号(如 "101-1" 表示 101 房间 1 号床) 状态标记:标记床位为 "空闲 / 已分配 / 维修中",支持批量查询空闲床位 历史记录:保存床位的分配变更记录(如从学生 A 调换到学生 B 的时间与原因) 3. 住宿分配与调整模块 住宿分配: 新生分配:管理员导入新生名单后,宿管可按专业集中、性别匹配等规则批量分配床位 手动分配:针对转专业、复学学生,宿管手动指定空闲床位并记录分配时间 分配结果公示:学生登录后可查看自己的宿舍信息(楼栋、房间号、床位号、室友列表) 调整管理: 调宿申请:学生提交调宿原因(如室友矛盾、身体原因),选择意向宿舍(需有空位) 审批流程:宿管审核申请,通过后执行床位调换,更新双方住宿信息 换宿记录:保存调宿历史(申请人、原床位、新床位、审批人、时间) 4. 报修与安全管理模块 报修管理: 报修提交:学生选择宿舍、设施类型(如 "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值