文章来之: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 是一个采用 Java 开发的开源免费 Flash 流媒体服务器。Red5 基于 Java 和一些功能强大的开源框架,为企业级应用奠定了标准。它使用 RTMP,RTMPT,RTMPS 和 RTMPE 流媒体协议, 支持:将音频(MP3)和视频(FLV,...
RED5流媒体服务器的简单搭建,只需要简单配置环境变量,然后执行批处理文件,就可以运行RED5流媒体服务器了,非常方便简单
基于red5流媒体服务器代码 实现在线直播和点播,可以点rtsp流和文件流
Red5流媒体服务器入门基础,其中附带例子聊天系统
Red5的主要功能是,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写,使用RTMP作为流媒体传输协议。它具有流化FLV、MP3文件,实时录制客户端流为FLV文件,共享对象,实时视频播放、...
基于Flash的流媒体服务的一款基于Java的开源流媒体服务器
流媒体指以流方式在网络中传送音频、视频和多媒体文件的媒体形式。 相对于下载后观看的网络播放形式而言,流媒体的典型特征是把连续的音频和视频信息压缩后放到网络服务器上,用户边下载边观看,而不必等待整个文件...
本项目是由springboot构建的red5流媒体服务器。服务添加了hls支持http请求支持。red5_hls是对red5的1.1.1版本进行springboot整合,整合后直接使用springboot进行启动和管理。打jar包运行。目前通过实时推流测试。该...
《使用Red5入门》 《red5入门》 《red5入门教程》 《RED5安装与配置》 《red5流媒体服务器入门基础》
小试 Red5 流媒体服务器小试 Red5 流媒体服务器
原创搭建RED5流媒体服务器,刚搭建好记录下搭建过程和一些心得。
本文档记录了利用ffmpeg将摄像机采集的rtsp视频流转换为rtmp视频流,并推送到rtmp服务器red5的详细步骤。最终可以供VLC、web页面访问并展示rtmp视频。
red 5 流媒体服务器 搭配jdk1.8使用 看了一眼csdn上面都要5积分 去github看了一下 每次下载都失败,没办法 大家可以下这个 也可以去github看看https://github.com/Red5/red5-server/releases 多试几次说不好能...
RED5流媒体服务器教程,可以在linux下安装运行。
red5流媒体服务器一个正常的demo,如果你安装不了red5里的demo,可以直接下载此demo,这样你变可以使用red5的一些基本功能,里面还有小视频可以进行点播测试
red5 流媒体 源代码
red5 流媒体
FLEX流媒体服务器Red5安装软件.基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写,使用RTMP作为流媒体传输协议.
red5-server 流媒体服务器安装工具,直接解压启动服务