Red5 流媒体服务器 的使用(开发)

article/2025/10/30 12:04:58

1. 什么是Red5.
Red5是一个开源项目,用于实现flash与服务器端之间通过rtmp(real time messaging protocal)协议通信,可以实现视频、音频的传输,remote shared object等等。相对于FMS, Red5是免费、开源的。
2. 环境搭建(用Tomcat好了).
首先下载Red5,我们这里适用0.7版。下载地址:http://osflash.org/red5/070final, 选择相应的版本就可以了。下载安装包比较好,里面资料比较多,有api文档,demo源码等等,推荐下载下来看一下。
搭建Red5的环境非常简单,只要把用到的jar包放到lib目录下面,再配置一下相应的xml文件即可。
在Red5的安装目录下面,有我们要用到的所有东西,目录结构如下:

在Eclipse里面新建一个Dynamic Web Project, 命名为Red5ChatRoom, 直接finish.
把Red5安装目录下的red5.jar和lib目录下的jar包复制一份到Red5ChatRoom项目的WEB-INF/lib下。

接着,修改red5配置文件。
第一个要修改的是web.xml文件,我们可以直接从red5安装目录下面的conf目录下复制一份。
第二个就是把Red5必须要的配置文件放到class path中,这些配置文件是容器一启动的时候,Red5自动去读取的。主要是下面这些配置文件beanRefContext.xml, defaultContext.xml, red5-common.xml, red5-core.xml, 这四个文件是必须的。其中beanRefContext.xml中说明了要加载其他三个文件。
所以,简单的方式就是在WEB-INF目录下面新建一个classes目录,把上面4个文件复制到classes中。
这样,Red5的基本环境就配置完了。

3. 写个简单一点的Demo,实时聊天室.(由于是demo,所以没有检测之类的功能,功能点就是有用户名、能群聊天)
首先实现server端:
package demo;

import java.util.Iterator;
import java.util.Map;

import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.red5.server.api.Red5;
import org.red5.server.api.service.IServiceCapableConnection;

public class Red5RealTimeChatR extends ApplicationAdapter {

/**
* 每个新的客户端来连接的时候调用!
* 这里我们覆盖了父类的实现。
*/
public boolean appConnect(IConnection con, Object[] params) {
System.out.println(”new client connectting chat room”);
return true;
}

/**
* 当客户端断开连接的时候调用!
* 这里我们覆盖了父类的实现。
*/
public void appDisconnect(IConnection conn) {
System.out.println(conn.getClient().getId() + ” disconnect”);
}


/**
* 加入聊天室,必须带上用户名,假如用户名为空,则不能发送消息,也不能收到消息。
* @param params 客户端调用服务器端的参数。
*/
public void jionChatRoom(Object[] params) {

String nickName = params[0].toString();
if (null == nickName || “”.equals(nickName)) {
return ;
} else {
// 设置用户昵称。
IConnection conn = Red5.getConnectionLocal();
conn.setAttribute(”nickName”, nickName);
}

// 发通知给聊天室的所有人,有新人加入了。
IScope scope = Red5.getConnectionLocal().getScope();
Iterator it = scope.getConnections();
int x = 0;
for (;it.hasNext();) {
IConnection tempConn = (IConnection)it.next();
if (tempConn instanceof IServiceCapableConnection) {
IServiceCapableConnection sc = (IServiceCapableConnection) tempConn;
// 服务器端调用客户端flash方法。
sc.invoke(”showJoinInInfo”, new Object[]{nickName});
}
}

}

/**
* 给聊天室的所有人发送消息
* @param params
*/
public void sayToAll(Object[] params) {
IConnection conn = Red5.getConnectionLocal();
//conn.setAttribute(”nickName”, nickName);
String nickName = conn.getAttribute(”nickName”).toString();
String sayWhat = params[0].toString();
// 发消息给聊天室的所有人.
IScope scope = Red5.getConnectionLocal().getScope();
Iterator it = scope.getConnections();
for (;it.hasNext();) {
IConnection tempConn = (IConnection)it.next();
if (tempConn instanceof IServiceCapableConnection) {
IServiceCapableConnection sc = (IServiceCapableConnection) tempConn;
// 服务器端调用客户端flash方法。
sc.invoke(”showMessage”, new Object[]{nickName+” : “+sayWhat});
}
}
}
}
这个类继承自ApplicationAdapter, 所以当有rtmp请求时,它可以作为处理类。
写完这个后,得配置到Red5ChatRoom项目里面,用最简单的方法,在class path下面新建一个xml文件,比如Red5ChatRoom-web.xml(Red5默认会加载class path下面的*-web.xml)。
内容如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd“>
<beans>
<bean id=”web.context.chatroom” class=”org.red5.server.Context”>
<property name=”scopeResolver” ref=”red5.scopeResolver” />
<property name=”clientRegistry” ref=”global.clientRegistry” />
<property name=”serviceInvoker” ref=”global.serviceInvoker” />
<property name=”mappingStrategy” ref=”global.mappingStrategy” />
</bean>
<bean id=”web.scope” class=”org.red5.server.WebScope” init-method=”register”>
<property name=”server” ref=”red5.server” />
<property name=”parent” ref=”global.scope” />
<property name=”context” ref=”web.context.chatroom” />
<property name=”handler” ref=”web.handler” />
<property name=”contextPath” value=”/Red5ChatRoom” />
<property name=”virtualHosts” value=”*,localhost,localhost:8080,127.0.0.1:8080″ />
</bean>
<bean id=”web.handler.chatroom” class=”demo.Red5RealTimeChatR” />
</beans>
这是最简单的Red5项目应用配置。
现在就可以发布到Tomcat下面去了。启动以后,我们得写Flash客户端来联调。

首先,接下来我们就新建一个Flex Project,项目名称就叫ChatRoom吧。
做一个简单的聊天室界面。
图片一张。
代码如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application fontSize=”12″ xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute”>
<mx:Script>
<![CDATA[

private var nc:NetConnection;

private function connectAndJoinRoom(e:Event):void
{
var nickName:String = nickNameTextInput.text;
if (nickName == "")
{
return;
} else {
if (nc == null)
{
initialNetConnection();
}
}
}

private function initialNetConnection():void
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, connectStatus);
nc.client = this;
nc.connect("rtmp://127.0.0.1/Red5ChatRoom", null);
}

private function connectStatus(event:NetStatusEvent) : void
{
if (event.info.code == "NetConnection.Connect.Success")
{
nc.call("jionChatRoom", null, nickNameTextInput.text);
sendButton.enabled = true;
}
}

private function sendMessage():void
{
var sendString:String = inputWhatYouWantSay.text;
inputWhatYouWantSay.text = "";
nc.call("sayToAll", null, sendString);
}

public function showJoinInInfo(message:String) : void
{
roomArea.text += message + " 加入聊天室" + "\n";
}

public function showMessage(message:String) : void
{
roomArea.text += message + "\n";
}
]]>
</mx:Script>


<mx:VBox x=”20″ y=”20″>
<mx:HBox>
<mx:Label text=”昵称 : “></mx:Label>
<mx:TextInput id=”nickNameTextInput”>

</mx:TextInput>
<mx:Button click=”connectAndJoinRoom(event)” label=”加入聊天室”>

</mx:Button>
</mx:HBox>
<mx:HBox width=”100%” height=”300″>
<mx:TextArea height=”100%” width=”100%” id=”roomArea”>

</mx:TextArea>
</mx:HBox>

<mx:HBox width=”100%”>
<mx:TextInput width=”100%” id=”inputWhatYouWantSay”>

</mx:TextInput>
<mx:Button enabled=”false” id=”sendButton” label=”发送” click=”sendMessage()”>

</mx:Button>
</mx:HBox>

</mx:VBox>

</mx:Application>

运行Flex应用,在昵称里面填入内容,加入聊天室以后,就可以和在线的人一起聊天了。

上面是一个非常非常简单的版本,修改一下就可以实现显示在线人员,给特定人员发消息等。


http://chatgpt.dhexx.cn/article/sDXuk8Ut.shtml

相关文章

CentOS 7下Red5流媒体服务器的搭建与测试

Red5流媒体服务器的搭建 一、Red5流媒体简介二、搭建流程1、下载Red52、修改Red5相关配置3、启动Red5服务器4、问题解决问题1&#xff1a;问题2&#xff1a; 5、测试环节6、结语 一、Red5流媒体简介 Red5流媒体服务器是一个采用Java开发的开源免费的Flash流媒体服务器。并且相…

常用流媒体服务器

1、Mediasoup mediasoup是相对比较新的一个WebRTC服务器端的开源项目。它更多是通过集成包方式和其他应用服务器来集成。它支持SFU模式&#xff0c;主要支持视频聊天&#xff0c;媒体流广播等。 其特点是&#xff1a; 通过底层API实现和第三方集成&#xff0c;安装简单&#…

开源流媒体服务器Red5实施案列分析

Red5是一个采用Java开发开源的Flash流媒体服务器。它支持&#xff1a;把音频 &#xff08;MP3&#xff09;和视频&#xff08;FLV&#xff09;转换成播放流&#xff1b; 录制客户端播放流&#xff08;只支持FLV&#xff09;&#xff1b;共享对象&#xff1b;现场直播流发布&…

Red5流媒体服务器的搭建与使用

什么是流媒体服务器 流媒体指以流形式在网络中传送音频、视频和多媒体文件的媒体形式。相对于下载后观看的网络播放形式而言&#xff0c;流媒体的典型特征是把连续的音频和视频信息压缩后放到网络服务器上&#xff0c;用户边下载边观看&#xff0c;而不必等待整个文件下载完毕…

Red5流媒体服务器初探——Red5服务器的搭建

由于个人的兴趣爱好&#xff0c;想利用手中的树莓派搭建一个环境监控系统。由于需要一个流媒体服务器用于多媒体数据的接收与推送&#xff0c;所以最近稍微了解了下Red5 Media Server方面的东西。 搭建Red5服务器 首先在百度中搜索“Red5”关键字可以获得以下链接&#xff1a;…

Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议)

最近研究了一下流媒体技术&#xff0c;也试着用免费开源的Red5搭建了流服务器&#xff0c;实现了直播&#xff0c;视频播放&#xff0c;远程视频会议等功能&#xff0c;下面是近期实践的总结&#xff0c; 一. 先介绍一下流媒体技术&#xff1a; 所谓流媒体技术&#xff0c;是…

搭建Windows Red5流媒体服务器详解

搭建Windows Red5流媒体服务器详解 环境 win7 64 位 一、下载程序 setup-Red5-1.0.0-java6.exe 或者 setup-Red5-1.0.1-java6.exe 推荐 下载1.0.1 版本 &#xff0c; 后面rtmp 播放使用的是1.0.1 版本的red5 red51.0.0 下载地址 http://download.csdn.net/detail/keepin…

Red5流媒体服务器的搭建

Red5搭建耗了我很多时间&#xff0c;尝试了Red5的N多个版本&#xff0c;从0.9.0~1.0.5都试过了。 还有JDK的版本&#xff0c;也尝试了很多从jdk6u43到jdk7u79都试过了。 我主要的一个问题就是&#xff0c;在Red5的安装页面看不到安装的AppName&#xff0c;因此我试了很多都不…

(一)使用RED5搭建流媒体服务器

——–本次是在windows中搭建成功&#xff0c;并且成功演示demo 1.安装好jdk red5-server-1.05 以下需要JDK-1.7 red5-server-1.06 以上需要JDK-1.8 2.到官方下载red5-server-1.04 压缩文件 https://github.com/Red5/red5-server/releases 安装步骤&#xff1a; 1&#…

nginx+red5流媒体服务器搭建

公司 近期要开展演练投票&#xff0c;需要对演练视频进行观看&#xff0c;由于服务器资源有限&#xff0c;所以决定将视频部署到多个流媒体上&#xff0c;并且通过nginx进行负载调节&#xff1b; 一、red5流媒体搭建 Red5 是一个采用 Java 开发开源的 Flash 流媒体服务器。 下…

【Java】Red5服务器搭建(实现在线直播,流媒体视频播放)

为什么80%的码农都做不了架构师&#xff1f;>>> 引言 流媒体文件是目前非常流行的网络媒体格式之一&#xff0c;这种文件允许用户一边下载一边播放&#xff0c;从而大大减少了用户等待播放的时间。另外通过网络播放流媒体文件时&#xff0c;文件本身不会在本地磁盘中…

Red5流媒体服务器的完整尝试

1、下载Red5以及Java环境 所需要的文件如下&#xff1a;JDK可利用华为镜像快速下载 然后解压JDK与red5,配置JDK环境变量JAVA_HOMEE:\Program Files\Java\jdk1.8.0_20 配置好运行环境后&#xff0c;点击red5.bat即可启动&#xff0c;在浏览器地址栏输入http://localhost:5080/出…

流媒体服务器之Red5环境搭建

首先先介绍一下RED5&#xff0c;Red5的主要功能和Macromedia公司的FMS类似&#xff0c;提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写&#xff0c;使用RTMP作为流媒体传输协议&#xff0c;这与FMS完全兼容。它具有流化FLV、MP3文件&#xff0c…

java语言【#106. 求绝对值】(已通过)

题目描述 ​ 在数学中&#xff0c;对于小于 0 的实数 n 来说&#xff0c;它的绝对值等于 −n&#xff0c;而对于大于等于 0 的实数来说&#xff0c;它的绝对值等于自身。 ​ 输入一个实数&#xff0c;输出它的绝对值。 输入 ​ 输入一个实数 n &#xff08;−100.0≤n≤100.0…

java求数字的绝对值

1.代码如下&#xff1a; package com.aaa;import java.util.Scanner;public class Shuzi {public static void main(String[] args) { // 求数字的绝对值Scanner scnew Scanner(System.in);while (true) {System.out.println("请输入你要判断的数字");double…

java中负数取绝对值,面试篇

前言: 这篇文章主要介绍了26道Spring经典面试题总结(附带答案)的相关资料,小编在网上看到的觉得挺不错的,现在分享给大家,希望对你们有所帮助。 另外本人整理收藏了多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,下方只是部分截图 想要资料的话也可以在…

CentOS7.4配置OpenLDAP Client集成AD服务及SSSD服务与SSH服务

一、前置准备 1、基础环境说明 客户端操作系统&#xff1a;CentOS 7.4 core AD服务器&#xff1a;WinServer 2012 R2 2、AD证书导出 1).服务器管理 服务器管理→AD CS→证书颁发机构→所有任务→备份CA 2).证书备份(导出) 备份项目→设置密码(默认为空)→完成 二、OpenL…

通过AD域验证登录Linux系统(Linux安装sssd加入Windows AD域)

背景 有一台Centos 7 的Linux服务器&#xff0c;需要每个IT管理员都可以登录并进行维护&#xff0c;为了方便账户管理&#xff0c;统一认证&#xff0c;要求Linux服务器登录实现Windows AD域验证。 环境说明 AD域&#xff1a;Windows server 2019 AD域主机IP : 192.168.100.…

使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录

使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录 Linux 统一身份登录和查询POSIX 属性 (POSIX Attributes)安装组件程序加入 AD 域测试 LDAP 查询配置 NSS 和 PAM配置 SSSD验证 SSSD 配置针对 AFS 进一步配置 PA…

linux 7 realm,系统运维|Samba 系列(十五):用 SSSD 和 Realm 集成 Ubuntu 到 Samba4 AD DC...

本教程将告诉你如何将 Ubuntu 桌面版机器加入到带有 SSSD 和 Realm 服务的 Samba4 活动目录域中,以在活动目录中认证用户。 要求: 第 1 步:初始配置 1、 在把 Ubuntu 加入活动目录前确保主机名被正确设置了。使用 hostnamectl 命令设置机器名字或者手动编辑 /etc/hostname 文…