[Red5commits] [1682] First draft of scripting howto
pgregoire
luke at codegent.com
Fri Feb 2 17:40:07 EST 2007
First draft of scripting howto
Timestamp: 02/02/07 17:25:22 EST (less than one hour ago)
Change: 1682
Author: pgregoire
Files (see diff or trac for details):
doc/trunk/HOWTO-Scripting.txt
Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/1682
Index: /doc/trunk/HOWTO-Scripting.txt
===================================================================
--- /doc/trunk/HOWTO-Scripting.txt (revision 1682)
+++ /doc/trunk/HOWTO-Scripting.txt (revision 1682)
@@ -0,0 +1,218 @@
+
+How to script for Red5
+By: Paul Gregoire
+Date: 2 Feb 2007
+
+I. Select a scripting implementation
+Level: Beginner
+
+Red5 includes interpreters for the following scripting languages:
+ - Javascript - version 1.6 (Mozilla Rhino version 1.6.2)
+ - JRuby - version 1.9.2 (Ruby version 1.8.2)
+ - Jython - version xxx (Python version xxx)
+ - Groovy - version 1.0
+ - Beanshell - version 2.0b4
+
+Future versions may include:
+ - JudoScript
+ - Scala
+ - PHP
+ - Actionscript (Not SSAS)
+
+
+
+II. Configuring Spring
+Level: Intermediate
+
+Step one is to locate your web applications red5-web.xml file. Within the xml config file the web.scope bean definition must supply a web.handler, this handler is your Red5 application (An application must extend the org.red5.server.adapter.ApplicationAdapter class).
+The application provides access to the Red5 server and any service instances that are created. The service instances and the application itself may be scripted.
+Bean definitions in Spring config files may not have the same id, here are some web handler definition examples:
+
+Java class implementation -
+<bean id="web.handler" class="org.red5.server.webapp.oflaDemo.Application" />
+
+Javascript implementation -
+<bean id="web.handler" class="org.red5.server.script.rhino.RhinoScriptFactory">
+ <constructor-arg index="0" value="classpath:applications/main.js"/>
+ <constructor-arg index="1">
+ <list>
+ <value>org.red5.server.api.IScopeHandler</value>
+ <value>org.red5.server.adapter.IApplication</value>
+ </list>
+ </constructor-arg>
+ <constructor-arg index="2">
+ <value>org.red5.server.adapter.ApplicationAdapter</value>
+ </constructor-arg>
+</bean>
+
+Ruby implementation -
+<bean id="web.handler" class="org.springframework.scripting.jruby.JRubyScriptFactory">
+ <constructor-arg index="0" value="classpath:applications/main.rb"/>
+ <constructor-arg index="1">
+ <list>
+ <value>org.red5.server.api.IScopeHandler</value>
+ <value>org.red5.server.adapter.IApplication</value>
+ </list>
+ </constructor-arg>
+</bean>
+
+Groovy implementation -
+<bean id="web.handler" class="org.red5.server.script.groovy.GroovyScriptFactory">
+ <constructor-arg index="0" value="classpath:applications/main.groovy"/>
+ <constructor-arg index="1">
+ <list>
+ <value>org.red5.server.api.IScopeHandler</value>
+ <value>org.red5.server.adapter.IApplication</value>
+ </list>
+ </constructor-arg>
+</bean>
+
+Python implementation -
+<bean id="web.handler" class="org.red5.server.script.jython.JythonScriptFactory">
+ <constructor-arg index="0" value="classpath:applications/main.py"/>
+ <constructor-arg index="1">
+ <list>
+ <value>org.red5.server.api.IScopeHandler</value>
+ <value>org.red5.server.adapter.IApplication</value>
+ </list>
+ </constructor-arg>
+ <constructor-arg index="2">
+ <list>
+ <value>One</value>
+ <value>2</value>
+ <value>III</value>
+ </list>
+ </constructor-arg>
+</bean>
+
+In general the configuration using scripted classes is defined using the constructor arguments (see interpreter section) in the following order:
+ Argument 1 - Location of the script source file
+ Argument 2 - Java interfaces implemented by the script
+ Argument 3 - Java classes extended by the script
+
+The example location starts with classpath:applications which in physical disk terms for the oflaDemo application equates to webapps/oflaDemo/WEB-INF/applications
+
+
+
+
+III. Creating an application script
+Level: Intermediate
+
+JRuby application adapter implementation -
+
+# JRuby
+require 'java'
+module RedFive
+ include_package "org.red5.server.api"
+ include_package "org.red5.server.api.stream"
+ include_package "org.red5.server.api.stream.support"
+ include_package "org.red5.server.adapter"
+ include_package "org.red5.server.stream"
+end
+
+#
+# application.js - a translation into Ruby of the olfa demo application, a red5 example.
+#
+# @author Paul Gregoire
+#
+class Application < RedFive::ApplicationAdapter
+
+ attr_reader :appScope, :serverStream
+ attr_writer :appScope, :serverStream
+
+ def initialize
+ #call super to init the superclass, in this case a Java class
+ super
+ puts "Initializing ruby application"
+ end
+
+ def appStart(app)
+ puts "Ruby appStart"
+ @appScope = app
+ return true
+ end
+
+ def appConnect(conn, params)
+ puts "Ruby appConnect"
+ measureBandwidth(conn)
+ puts "Ruby appConnect 2"
+ if conn.instance_of?(RedFive::IStreamCapableConnection)
+ puts "Got stream capable connection"
+ sbc = RedFive::SimpleBandwidthConfigure.new
+ sbc.setMaxBurst(8388608)
+ sbc.setBurst(8388608)
+ sbc.setOverallBandwidth(8388608)
+ conn.setBandwidthConfigure(sbc)
+ end
+ return super
+ end
+
+ def appDisconnect(conn)
+ puts "Ruby appDisconnect"
+ if appScope == conn.getScope && @serverStream != nil
+ @serverStream.close
+ end
+ super
+ end
+
+ def toString
+ return "Ruby toString"
+ end
+
+ def setScriptContext(scriptContext)
+ puts "Ruby application setScriptContext"
+ end
+
+ def method_missing(m, *args)
+ super unless @value.respond_to?(m)
+ return @value.send(m, *args)
+ end
+
+end
+
+
+
+
+IV. Creating your own interpreter
+Level: Advanced
+
+
+
+V. Links with scripting information
+Spring scripting -
+http://static.springframework.org/spring/docs/2.0.x/reference/dynamic-language.html
+http://rhinoinspring.sourceforge.net/
+
+Java scripting -
+http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/
+http://blogs.sun.com/sundararajan/
+https://scripting.dev.java.net/
+http://today.java.net/pub/a/today/2006/04/11/scripting-for-java-platform.html
+http://www.javaworld.com/javaworld/jw-03-2005/jw-0314-scripting_p.html
+http://www.oreillynet.com/onjava/blog/2004/01/java_scripting_half_the_size_h.html
+http://www.robert-tolksdorf.de/vmlanguages.html
+
+Javascript -
+http://www.mozilla.org/rhino/
+http://www.mozilla.org/rhino/ScriptingJava.html
+
+Ruby -
+http://jruby.codehaus.org/
+
+BeanShell -
+http://www.beanshell.org/
+
+Python -
+http://www.jython.org/Project/
+http://www.onjava.com/pub/a/onjava/2002/03/27/jython.html
+http://jepp.sourceforge.net/
+http://jpe.sourceforge.net/
+http://jpype.sourceforge.net/
+
+Groovy -
+http://groovy.codehaus.org/
+
+
+
+
+
Note:
Diffs are chopped if more than 25k.
This is to get past the limit on the mailing list.
More information about the Red5commits
mailing list