文章来之:http://hi.baidu.com/3tion/blog/item/9ce3e219fdd4be4f43a9adb5.html
公司出于业务扩展的考虑,准备把原先基于FMS为后台的程序,改为用开源的Red5作为视频音频服务,而由Socket作为数据交换服务。
公司服务端的人忙着处理其他事情,于是公司安排我做Red5的架设工作。在网上找了些资料,Red5配置起来还是比较简单的。网上的教程有一堆,这里就不累述了。
因为flash客户端用NetConnection连接Red5的时候,是不需要像连接socket或者是http那样要提交一个<request-policy-file/>的请求去请求一个crossdomain的字符串。
而视频,音频服务在我们整个服务中所占的IO是最大的。如果Red5服务没有做任何连接的验证,其他人通过反编我们的swf文件,得到我们的red5服务的地址后,就很容易让其他人来使用我们的服务器。
对于这种问题,通常可以使用连接Red5时,要求客户端提交一个由服务端生成的密钥来做验证,但是这样就涉及到Red5和Socket直接的通信问题(或者是通过查询临时表等方法),无疑会给本来已经事情很多的服务端的同事们增加麻烦。
于是我采取通过检测flash客户端的swf文件URL这种基于域的检测方式。
首先,需要自己先写一个Red5的应用,并且把WEB-INF中red5-web.xml里面<bean id="web.handler" class="xxx.xxx.xxxx" />的class指定为你写的这个应用。
让你的应用继承ApplicationAdapter,然后重写connect
我在应用的根目录放置了一个crossdomain.properties文件。

package com._3tion.live;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import java.util.Properties;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.springframework.core.io.Resource;
/**
* @author 3tion
*
*/
public class Application extends ApplicationAdapter {
private static String swfUrl[];
//域检测文件名
private static final String CROSS_DOMAIN_FILE_NAME = "crossdomain.properties";
private static final String SEPARATOR = ";";
@Override
public synchronized boolean connect(IConnection conn, IScope scope,
Object[] params) {
if( swfUrl == null )
{
//检查策略文件
Resource resource = getResource(CROSS_DOMAIN_FILE_NAME);//resource的目录结构是从当前应用的根目录开始
if(resource.exists())
{
Properties props = new Properties();
try {
props.load(resource.getInputStream());
swfUrl = props.getProperty("swfUrl").toLowerCase().split(SEPARATOR);
} catch (IOException e) {
e.printStackTrace();
}
}
else //如果没有域安全文件,则视为所有域都允许通过
{
swfUrl = new String[1];
swfUrl[0] = "*";
}
}
Map<String,Object> map = conn.getConnectParams();
//检查连接参数中swfUrl的地址是否在安全文件中
if( Arrays.binarySearch(swfUrl,"*") > -1 || Arrays.binarySearch(swfUrl, map.get("swfUrl").toString().toLowerCase()) > -1 )
{
return super.connect(conn, scope, params);
}
else
{
return false;
}
}
}
这样,就可以在crossdomain.properties中控制你red5应用允许访问的文件了,如果写*,就允许任意文件访问。
允许http://test/Main.swf和http://test1/Main.swf访问。
则crossdomain.properties:
swfUrl = http\://test/Main.swf;\
http\://test1/Main.swf
分享到:
相关推荐
### 基于Red5的流媒体服务器搭建与应用详解 #### 一、Red5概述 **Red5**是一款基于Java开发的开源免费Flash流媒体服务器。它利用Java语言及一系列强大开源框架构建而成,为企业的各类应用提供了坚实的基础。Red5...
RED5流媒体服务器是一款开源的Java技术实现的流媒体服务器,它支持实时传输协议(RTMP)、RTMFP(Adobe的P2P协议)、HLS(High-Level Streaming)等多种流媒体协议,广泛应用于在线视频直播、点播服务。在本教程中,我们将...
通过以上对Red5流媒体服务器的详细介绍,我们可以看到它在在线直播和点播服务中的重要角色,以及在开发和应用过程中需要注意的关键点。对于需要构建自己的流媒体平台的开发者来说,Red5是一个值得考虑的开源解决方案...
RED5流媒体服务器是一款强大的基于Java开发的开源流媒体服务器,专为支持基于Flash的流媒体服务而设计。它的出现使得开发者和企业能够构建自定义的流媒体解决方案,包括视频直播、点播、录制和回放等功能。RED5提供...
Red5流媒体服务器入门基础,其中附带例子聊天系统
本项目是由springboot构建的red5流媒体服务器。服务添加了hls支持http请求支持。red5_hls是对red5的1.1.1版本进行springboot整合,整合后直接使用springboot进行启动和管理。打jar包运行。目前通过实时推流测试。该...
通过以上步骤,您就成功搭建了一个基于FFmpeg和Red5的RTMP流媒体服务器,可以为VLC播放器、Web页面提供实时视频流服务。在此过程中,你可能会遇到各种配置和环境问题,需要根据实际情况调整配置,确保服务能顺利运行...
Red5的主要功能是,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写,使用RTMP作为流媒体传输协议。它具有流化FLV、MP3文件,实时录制客户端流为FLV文件,共享对象,实时视频播放、...
流媒体指以流方式在网络中传送音频、视频和多媒体文件的媒体形式。 相对于下载后观看的网络播放形式而言,流媒体的典型特征是把连续的音频和视频信息压缩后放到网络服务器上,用户边下载边观看,而不必等待整个文件...
【Red5流媒体服务器】是基于Java开发的开源流媒体服务器,主要支持RTMP(实时消息传输协议)来实现Flash客户端与服务器之间的交互。Red5提供了视频、音频流的传输,以及Remote Shared Object等功能,与Adobe的FMS...
原创搭建RED5流媒体服务器,刚搭建好记录下搭建过程和一些心得。
Red5是一款基于Java技术的开源流媒体服务器,由Igor Cimerman开发。它的核心功能包括录制、播放、存储和分发流媒体内容。Red5支持Flash Player和HTML5浏览器,能够处理实时音频、视频流,并且具有良好的可扩展性和...
Red5流媒体服务器是一款开源的Java平台服务器,用于实时流传输协议(RTMP)、HLS、HDS和RTSP服务。这个"red5流媒体服务器一个正常的demo"提供了一个完整的示例,帮助用户快速了解并体验Red5的功能,特别是在安装过程...
### 搭建Red5流媒体服务器步骤详解 #### 一、环境准备 为了搭建一个稳定且高效的Red5流媒体服务器,首先需要确保系统环境中已安装并正确配置Java开发工具包(JDK)。本教程将指导您如何进行这些基本设置。 1. **...
Red5流媒体是一款开源的Java流媒体服务器,它支持实时传输协议(RTMP)、RTMPT、RTMPS、RTMPE等多种协议,能够处理音视频数据的录制、播放和存储。Red5以其开放源代码和跨平台的特性,为开发者提供了构建实时交互性...
标题中的"red5-1.0.1 流媒体服务"指的是Red5服务器的一个特定版本,即1.0.1,它专注于提供流媒体内容,如视频和MP3播放。描述中的“视频 MP3 播放 服务区”暗示了Red5能够支持多种媒体格式,并且是为创建一个能够...
在本文中,我们将深入探讨如何在CentOS 6.3操作系统上安装RED5流媒体服务器。RED5是一款开源的流媒体服务器,支持RTMP、HLS等协议,用于实时流传输音频、视频内容。以下是一份详细的安装指南: 首先,确保你的系统...
标题“red5流媒体服务端”揭示了该压缩包中的主要内容,即Red5服务器的安装包或源码,用于搭建流媒体服务环境。这个服务器端软件对于那些想要构建自定义流媒体解决方案或者需要在自己的服务器上运行流媒体服务的人来...
Red5是一款开源的流媒体服务器,它支持实时流传输协议(RTMP)、HLS、RTSP等常见的流媒体协议,可以用于视频直播、点播、录制等多种应用场景。Red5的源代码是用Java语言编写的,这使得它具有良好的跨平台性,可以在...