`
01jiangwei01
  • 浏览: 540933 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

red5(二) 防止盗链

 
阅读更多

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(三) 防止盗链

 

分享到:
评论

相关推荐

    RED二次开发-Node-RED与AI技术结合.docxRED二次开发-Node-RED与HTTP协议集成.docx

    RED二次开发_Node-RED与AI技术结合.docx RED二次开发_Node-RED与HTTP协议集成.docx RED二次开发_Node-RED与MQTT协议集成.docx RED二次开发_Node-RED与Websocket通信.docx RED二次开发_Node-RED与云平台集成.docx RED...

    Red5 1.0 Final Web版

    Red5 1.0 Final是该软件的一个稳定版本,为用户提供了一个可靠的平台来处理多媒体数据。 在整合Red5 1.0 Final与Apache Tomcat时,我们首先要理解这两个组件的角色。Red5作为一个流媒体服务器,负责处理和分发...

    red5入门,tomcat+red5+myeclipse集成,原创禁止转载

    Red5是一款开源的流媒体服务器,它支持实时流传输协议(RTMP),并提供录制、播放、存储等功能,广泛应用于在线视频直播、VoIP、互动游戏等场景。本教程将介绍如何进行Red5的入门学习,并结合Tomcat和MyEclipse进行...

    red5 与 tomcat项目集成

    1. **Red5 服务器**:Red5 是一个开源的流媒体服务器,支持 RTMP(Real Time Messaging Protocol)、RTMPT、RTMPE、RTMPTE、RTMPS 协议,用于实时音频、视频传输,以及数据共享。它允许开发者创建互动的媒体应用程序...

    Red5-0.9.1

    Red5是一款开源的流媒体服务器,它允许开发者创建实时的、交互式的富因特网应用程序(Rich Internet Applications,简称RIA)。0.9.1是Red5的一个特定版本,旨在提供稳定性和性能改进,以及可能的新功能。在这个版本...

    red5 windows版本

    Red5是一款开源的Java流媒体服务器,它支持实时流传输协议(RTSP)、实时传输协议(RTP)、实时控制协议(RTCP)以及互联网群组管理协议(IGMP),能够处理视频、音频流以及数据应用。Windows版本的Red5允许在Windows操作...

    red5入门详细教程

    二、Flash开发与Red5结合 1. RTMP协议:Flash与Red5之间的通信主要基于RTMP协议,它允许客户端向服务器发送音频、视频数据流。理解RTMP协议的工作原理对于实现Flash与Red5的交互至关重要。 2. ActionScript 3.0接口...

    red5-server.zip

    Red5 Server是一款开源的流媒体服务器,主要用于处理和分发实时数据流,如视频、音频和其他类型的数据。这个"red5-server.zip"压缩包提供了一个免安装版本,使得用户可以在本地快速搭建起一个流媒体服务器,无需复杂...

    red5 1.0 web版 myeclipse工程

    Red5是一款开源的流媒体服务器,它支持实时流传输协议(RTMP)、RTMPT、RTMPE、RTMPF、RTMPS等,能够处理音视频的直播、点播和录制等多种应用场景。在本项目中,我们关注的是Red5 1.0的Web版本,该版本特别适合在Web...

    red5 免安装版 red5 1.00

    Red5是一款开源的流媒体服务器,它支持实时流传输协议(RTMP)、H.264、Flash视频(FLV)以及其他多种媒体格式。免安装版的Red5是指无需通过传统安装过程,可以直接运行的版本,这对于开发者进行快速测试或者在不同...

    red5.jar

    《Red5服务器详解及其核心组件——以red5-war-0.8.0.zip中的red5.jar为例》 在IT行业中,尤其是在线媒体流服务领域,Red5是一个非常重要的开源服务器平台。它支持实时流传输协议(RTMP),使得开发者能够构建实时...

    red5-1.0.0-webapps-demos.zip

    标题中的"red5-1.0.0-webapps-demos.zip"表明这是一个关于Red5服务器的Web应用程序示例的压缩包。Red5是一款开源的流媒体服务器,它支持实时流传输协议(RTMP)、文件录制、播放以及直播等功能。1.0.0是其版本号,...

    利用red5和ffmpeg搭建rtmp流媒体服务器

    根据提供的文档信息,本文将详细阐述如何使用FFmpeg和Red5搭建一个RTMP流媒体服务器,以及相关的配置和测试步骤。 首先,了解RTMP(Real Time Messaging Protocol)是一种网络协议,它被广泛用于在线直播和流媒体...

    基于 Red5 的流媒体服务器的搭建和应用

    ### 基于Red5的流媒体服务器搭建与应用详解 #### 一、Red5概述 **Red5**是一款基于Java开发的开源免费Flash流媒体服务器。它利用Java语言及一系列强大开源框架构建而成,为企业的各类应用提供了坚实的基础。Red5...

    Red5的Web视频、音频系统开发

    #### 二、Red5服务器的主要特点 1. **开源免费**:Red5是基于Java语言编写的开源软件,可以自由地下载、使用和修改。 2. **高度可扩展性**:通过插件机制,开发者可以根据自己的需求定制Red5的功能,满足不同的应用...

    Red5手册详细教程

    Red5的手册中详细介绍了Red5的配置文件,包括jetty.xml、keystore、log4j.properties、realm.properties、tomcat-users.xml、red5.globals、red5.properties、red5.xml、red5-common.xml等。这些配置文件用于配置...

    red5聊天建议系统

    这个"Red5聊天建议系统"显然是基于Red5搭建的一个用于实时聊天的应用示例,对于初学者来说,它是学习如何利用Red5实现类似即时通讯功能的一个很好的起点。 首先,我们需要了解Red5的基本架构。Red5服务器的核心是...

    RED5流媒体服务器

    对于开发人员来说,RED5提供了丰富的API和接口,可以使用Java、ActionScript或Flex进行二次开发。例如,你可以创建自定义的流处理服务,实现用户权限控制、内容加密解密等功能。 总结一下,RED5流媒体服务器是一个...

Global site tag (gtag.js) - Google Analytics