上記のページの5くらいから開始。
そのページに書いているようにJarファイルの構成が変わっているので、ひとまず全部、
外部JARファイルに追加する。しかし、エラーが出るので、いくつか削除した。
(現時点では特にエラーが出てない。)
最終的にWEB-INFファイルをコピーすることになるので、そのページに書いてある
ディレクトリ構成にするのが良い。
上記のページの6にあるようにeclipseで以下のプログラムを入力。
この時、プロジェクト名はtestRed5としている。
package testRed5;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.scope.IScope;
public class sample01 extends ApplicationAdapter {
public boolean appStart(IScope scope)
{
System.out.println("appStart!!!!!!!!!!!!!!!!!!!!!!!!");
return super.appStart(scope);
}
public String printHello(String name){
return "Success : " + name + " " + getClients().size();
}
}
7にあるように、設定ファイルを書き換える。コピー先は参考ページの通り。
olfaDemosのファイルをコピーしてくる。
書き換えた結果は以下のよう。
re5-web.properties
webapp.contextPath=/testRed5
webapp.virtualHosts=*, localhost, localhost:8088, 127.0.0.1:8088
red5-web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd">
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="/WEB-INF/red5-web.properties" />
</bean>
<bean id="web.context" class="org.red5.server.Context" autowire="byType" />
<bean id="web.scope" class="org.red5.server.scope.WebScope" init-method="register">
<property name="server" ref="red5.server" />
<property name="parent" ref="global.scope" />
<property name="context" ref="web.context" />
<property name="handler" ref="web.handler" />
<property name="contextPath" value="${webapp.contextPath}" />
<property name="virtualHosts" value="${webapp.virtualHosts}" />
</bean>
<bean id="web.handler" class="testRed5.sample01" />
<!--
<bean id="web.handler" class="org.red5.server.script.rhino.RhinoScriptFactory">
<constructor-arg index="0" value="classpath: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>
<bean id="web.handler" class="org.springframework.scripting.jruby.JRubyScriptFactory">
<constructor-arg index="0" value="classpath: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>
<bean id="web.handler" class="org.red5.server.script.groovy.GroovyScriptFactory">
<constructor-arg index="0" value="classpath: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>
<bean id="web.handler" class="org.red5.server.script.jython.JythonScriptFactory">
<constructor-arg index="0" value="classpath: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>
-->
<!--
<bean id="demoService.service" class="org.red5.demos.oflaDemo.DemoService" />
-->
<!--
<bean id="demoService.service" class="org.red5.server.script.rhino.RhinoScriptFactory">
<constructor-arg index="0" value="classpath:demoservice.js"/>
<constructor-arg index="1">
<list>
<value>org.red5.demos.oflaDemo.IDemoService</value>
</list>
</constructor-arg>
<constructor-arg index="2">
<value>org.red5.demos.oflaDemo.DemoServiceImpl</value>
</constructor-arg>
</bean>
<bean id="demoService.service" class="org.springframework.scripting.jruby.JRubyScriptFactory">
<constructor-arg index="0" value="classpath:demoservice.rb"/>
<constructor-arg index="1">
<list>
<value>org.red5.demos.oflaDemo.IDemoService</value>
</list>
</constructor-arg>
</bean>
<bean id="demoService.service" class="org.red5.server.script.jython.JythonScriptFactory">
<constructor-arg index="0" value="classpath:demoservice.py"/>
<constructor-arg index="1">
<list>
<value>org.red5.demos.oflaDemo.IDemoService</value>
</list>
</constructor-arg>
<constructor-arg index="2" ref="web.handler"/>
</bean>
-->
<!-- Uncomment this if you are using scripting
<bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor"/>
-->
</beans>
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>testRed5</display-name>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/testRed5</param-value>
</context-param>
<listener>
<listener-class>org.red5.logging.ContextLoggingListener</listener-class>
</listener>
<filter>
<filter-name>LoggerContextFilter</filter-name>
<filter-class>org.red5.logging.LoggerContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoggerContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>rtmpt</servlet-name>
<servlet-class>org.red5.server.net.rtmpt.RTMPTServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!--
<servlet>
<display-name>SecurityTest</display-name>
<servlet-name>SecurityTest</servlet-name>
<servlet-class>org.red5.demos.oflaDemo.SecurityTest</servlet-class>
</servlet>
-->
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/fcs/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/open/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/close/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/send/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/idle/*</url-pattern>
</servlet-mapping>
<!--
<servlet-mapping>
<servlet-name>SecurityTest</servlet-name>
<url-pattern>/securitytest</url-pattern>
</servlet-mapping>
-->
<security-constraint>
<web-resource-collection>
<web-resource-name>Forbidden</web-resource-name>
<url-pattern>/streams/*</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
</web-app>
8のように、データをコピーし、再起動する。
cd (red5のインストール先)/red5/webapps
sudo cp -r ~/workspace/testRed5 .
cd ..
./red5-sutdown.sh
sudo ./red5.sh &
この段階でコマンドラインにJavaで書いたappStart!!!!!!!!!!!!!!!!!!!!!!!!が表示される。
デバッグの時は./red5.sh &として、ログを表示させたほうが良いように思う。
9について、action scriptをかく。
以下の内容をtest2.asに保存する。
package
{
import flash.display.Sprite;
import flash.events.NetStatusEvent;
import flash.geom.Matrix3D;
import flash.net.NetConnection;
import flash.net.Responder;
import flash.text.*;
public class test2 extends Sprite
{
private var nc:NetConnection;
private var textField:TextField;
public function test2()
{
// 接続
textField = new TextField();
addChild(textField);
textField.text = "Start\n";
nc=new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
nc.connect("rtmp://localhost/testRed5");
textField.appendText("End of init\n");
}
private function onStatus(evt:NetStatusEvent):void
{
// 接続結果の確認
switch(evt.info.code)
{
// 成功している場合は続行
case "NetConnection.Connect.Success":
var listener:Function=function(str:String):void{textField.appendText(str);}
textField.appendText("OK?\n");
nc.call("printHello", new Responder(listener), "sakef");
textField.appendText("OK?\n");
break;
// 他はエラーを表示
case "NetConnection.Connect.Closed":
textField.appendText("Closed");
break;
case "NetConnection.Connect.Failed":
textField.appendText("Failed");
break;
case "NetConnection.Connect.Rejected":
textField.appendText("Rejected");
break;
case "NetConnection.Connect.AppShutdown":
textField.appendText("SD\n");
break;
case "NetConnection.Connect.InvalidApp":
textField.appendText("IA\n");
break;
case "NetConnection.Connect.IdleTimeout":
textField.appendText("IT\n");
break;
case "NetConnection.Connect.NetworkChange":
textField.appendText("NC\n");
break;
default:
textField.appendText("Error!!!!" + nc.connected);
}
}
}
}
これをコンパイルして、実行する。
mxmlc test2.as
flashplayerdebugger test2.swf