Red5 防止盗链可通过调用客户端方法得到主机URI,判断是否在允许范围内,如果不是则断开连接。
具体实现是:Application 必须实现IPendingServiceCallback 接口,通过如下方法调用客户端方法
public boolean appConnect(IConnection conn, Object[] params) { if (conn instanceof IServiceCapableConnection) { //调用客户端代码 IServiceCapableConnection sc = (IServiceCapableConnection) conn; sc.invoke("clientMethod", new Object[]{"One", 1},this); } return super.appConnect(conn, params); }
其中的clientMethod是客户端方法名称,new Object[]{"One", 1}是任意参数,this为必选
并书写接收客户端返回参数的方法
public void resultReceived(IPendingServiceCall arg0) { String host = arg0.getResult().toString(); String allowHost = “http://localhost:28080/redxserver”; boolean allow = false; if(host.indexOf( allowHost)>0){ allow = true; } if(!allow ){ //获取当前的链接 IConnection current = Red5.getConnectionLocal(); current.close(); System.out.println("关闭连接"); }else { System.out.println("不关闭连接"); } }
在播放器as内书写方法
var client1:Object=new Object(); client1.clientMethod=this.clientMethod; _connection.client =client1;
private function clientMethod(str:String,num:Number):String{ var str:String = ExternalInterface.call("window.top.location.href"); return str; }
还要修改BaseRTMPHandler.java中的方法,防止as方法出错了,仍然可以播放。
具体如下
protected void handlePendingCallResult(RTMPConnection conn, Notify invoke) { final IServiceCall call = invoke.getCall(); final IPendingServiceCall pendingCall = conn.retrievePendingCall(invoke.getInvokeId()); if (pendingCall != null) { // The client sent a response to a previously made call. Object[] args = call.getArguments(); if ((args != null) && (args.length > 0)) { // TODO: can a client return multiple results? pendingCall.setResult(args[0]); } Set<IPendingServiceCallback> callbacks = pendingCall.getCallbacks(); if (!callbacks.isEmpty()) { HashSet<IPendingServiceCallback> tmp = new HashSet<IPendingServiceCallback>(); tmp.addAll(callbacks); for (IPendingServiceCallback callback : tmp) { try { callback.resultReceived(pendingCall); } catch (Exception e) { log.error("Error while executing callback {} {}", callback, e); //关闭连接,添加下面两行即可 conn.close(); break; } } } } }
通过以上方法即可实现防止盗链
已经优化了,请看下一篇文章 red5(三) 防止盗链
相关推荐
Red5_0.9.1 + MyEclipse10.7 中单步调试Demo Publisher : 编译通过Red_091 后,调试参数设置如下 。 右键项目 - Debug As -- Debug Configurations --Environment : 设置 RED5_HOME 环境变量 "Main class...
red5 与 tomcat项目集成
二、Red5 项目部署: 1. 创建一个 Java 后台服务项目,添加 Dynamic web project(Red5Test),并添加相关文件,包括 Red5Test.java、web.xml、red5-web.xml 和 red5-web.properties。 2. 在 Red5Test.java 中,...
Red5 是一个采用 Java 开发的开源免费 Flash 流媒体服务器。Red5 基于 Java 和一些功能强大的开源框架,为企业级应用奠定了标准。它使用 RTMP,RTMPT,RTMPS 和 RTMPE 流媒体协议, 支持:将音频(MP3)和视频(FLV,...
Red5的0.9.1版本
red5 免安装版 red5 1.00 自己试过了!可以正常运行和启动
red5 1.0 final 与 tomcat 整合 ,导入myeclipse可以直接使用。
关于red5的一些学习文档,资料很齐全。 d5_demo 服务器端调用客户端as的方法 as3.0+red5 --- hello world FMS&Red5 RED5 – Project Roadmap Open Source Flash 等等文档
本资源是使用 Java servlets 将文件上传到 Red5 服务器的源代码。chapter2 是服务器 Red5 源文件,UploadToRed5Proj 是客户端 Flex3 源文件。 关于使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤,请...
red5 0.8 reference Red5 - Reference Documentation Red5 Open Source Flash Server
red5项目示例,简单配置使用RED5入门
第一二部分 Red5 核心技术之 脚本实现 ........................ 第一三部分 Red5 核心技术之集群 .................................. 第一四部分 Red5 核心技术之管理 .................................. 第一五...
red5入门,tomcat+red5+myeclipse集成,原创禁止转载,欢迎补充!
《使用Red5入门》 《red5入门》 《red5入门教程》 《RED5安装与配置》 《red5流媒体服务器入门基础》
red5-1.0.5免安装版,适用于window64位(需要先安装jdk1.7,注意是red5-1.0.5需要的是1.7,在这之前装了好几个最新的red5,比如1.0.8,需要的jdk是1.8),解压后,可以设置conf中的red5.properties,也可不设置。...
使用red5开发基于flex的视频会议系统, red5视频流的发布和使用。
Red5的Web视频、音频系统开发
1. 下载Red5:访问红5官方网站,下载最新版本的Red5安装包,可以选择ZIP或 TAR.GZ格式。 2. 解压Red5:将下载的安装包解压到指定的路径,例如D:\red5。 3. 运行Red5:在解压后的路径下,找到red5.bat文件,双击运行...
《red5配置.doc》,图文并茂,叙述详尽。讲述的是基于red5的0.7.0版本的安装、配置、使用、helloword。叙述比较简单,但仍可作为一入门教程作为初学者的参考。 内容预览: 最近要做一个流媒体服务器,在网上逗留了...