[Red5devs] [red5 commit] r3057 - in java/server/branches/paulg_mp4: . .settings conf src/org/red5/demos src/org/red5/demos...

codesite-noreply at google.com codesite-noreply at google.com
Wed Sep 10 11:41:58 PDT 2008


Author: mondain
Date: Wed Sep 10 11:40:20 2008
New Revision: 3057

Added:
    java/server/branches/paulg_mp4/src/org/red5/demos/
    java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/
     
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/Application.java
     
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/DemoService.java
     
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/DemoServiceImpl.java
     
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/IDemoService.java
Removed:
    java/server/branches/paulg_mp4/src/org/red5/samples/
    java/server/branches/paulg_mp4/webapps/oflaDemo/WEB-INF/src/org/
Modified:
    java/server/branches/paulg_mp4/   (props changed)
    java/server/branches/paulg_mp4/.classpath
    java/server/branches/paulg_mp4/.settings/org.eclipse.jdt.core.prefs
    java/server/branches/paulg_mp4/conf/logback.xml
    java/server/branches/paulg_mp4/conf/red5-common.xml
    java/server/branches/paulg_mp4/conf/red5-core.xml
    java/server/branches/paulg_mp4/red5.bat
    java/server/branches/paulg_mp4/src/org/red5/io/mp4/impl/MP4Reader.java
    java/server/branches/paulg_mp4/src/org/red5/server/Bootstrap.java
     
java/server/branches/paulg_mp4/src/org/red5/server/stream/provider/FileProvider.java
    java/server/branches/paulg_mp4/webapps/oflaDemo/WEB-INF/red5-web.xml
    java/server/branches/paulg_mp4/webapps/oflaDemo/WEB-INF/web.xml
    java/server/branches/paulg_mp4/webapps/root/demos/ofla_demo.swf

Log:
Debugging playback after merge from trunk

Modified: java/server/branches/paulg_mp4/.classpath
==============================================================================
--- java/server/branches/paulg_mp4/.classpath	(original)
+++ java/server/branches/paulg_mp4/.classpath	Wed Sep 10 11:40:20 2008
@@ -2,10 +2,10 @@
  <classpath>
  	<classpathentry kind="con"  
path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
  	<classpathentry kind="con"  
path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?ivyXmlPath=ivy.xml&amp;confs=java6%2Ceclipse&amp;ivySettingsPath=&amp;acceptedTypes=jar&amp;sourceTypes=source&amp;javadocTypes=javadoc&amp;sourceSuffixes=-source%2C-sources%2C-src&amp;javadocSuffixes=-javadoc%2C-javadocs%2C-doc%2C-docs&amp;doRetrieve=true&amp;retrievePattern=lib%2F%5Bartifact%5D-%5Brevision%5D.%5Bext%5D&amp;alphaOrder=true"/>
-	<classpathentry excluding=".svn/*" kind="src" path="test"/>
-	<classpathentry excluding=".svn/*" kind="src" path="conf"/>
-	<classpathentry excluding=".svn/*|org/red5/server/script/rhino/"  
kind="src" path="src"/>
-	<classpathentry excluding=".svn/*" kind="src"  
path="webapps/oflaDemo/WEB-INF/src"/>
+	<classpathentry excluding="**/.svn/*" kind="src" path="test"/>
+	<classpathentry excluding="**/.svn/*" kind="src" path="conf"/>
+	<classpathentry excluding="**/.svn/*|org/red5/server/script/rhino/"  
kind="src" path="src"/>
+	<classpathentry excluding="**/.svn/*" kind="src"  
path="webapps/oflaDemo/WEB-INF/src"/>
  	<classpathentry kind="con"  
path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
  	<classpathentry kind="output" path="bin"/>
  </classpath>

Modified:  
java/server/branches/paulg_mp4/.settings/org.eclipse.jdt.core.prefs
==============================================================================
--- java/server/branches/paulg_mp4/.settings/org.eclipse.jdt.core.prefs	 
(original)
+++ java/server/branches/paulg_mp4/.settings/org.eclipse.jdt.core.prefs	Wed  
Sep 10 11:40:20 2008
@@ -1,4 +1,4 @@
-#Tue Apr 15 14:42:59 PDT 2008
+#Wed Sep 10 09:36:32 PDT 2008
  eclipse.preferences.version=1
  org.eclipse.jdt.core.builder.cleanOutputFolder=clean
  org.eclipse.jdt.core.builder.duplicateResourceTask=warning

Modified: java/server/branches/paulg_mp4/conf/logback.xml
==============================================================================
--- java/server/branches/paulg_mp4/conf/logback.xml	(original)
+++ java/server/branches/paulg_mp4/conf/logback.xml	Wed Sep 10 11:40:20 2008
@@ -1,219 +1,232 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-	<consolePlugin/>
-	<appender name="CONSOLE"
-		class="ch.qos.logback.core.ConsoleAppender">
-		<layout class="ch.qos.logback.classic.PatternLayout">
-			<Pattern>[%p] [%thread] %logger - %msg%n</Pattern>
-		</layout>
-	</appender>
-	<appender name="FILE" class="ch.qos.logback.core.FileAppender">
-		<File>../log/red5.log</File>
-		<Append>false</Append>
-		<Encoding>UTF-8</Encoding>
-		<BufferedIO>false</BufferedIO>
-		<ImmediateFlush>true</ImmediateFlush>
-		<layout class="ch.qos.logback.classic.PatternLayout">
-			<Pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</Pattern>
-		</layout>
-	</appender>
-	<appender name="ERRORFILE" class="ch.qos.logback.core.FileAppender">
-		<File>../log/error.log</File>
-		<Append>false</Append>
-		<Encoding>UTF-8</Encoding>
-		<BufferedIO>false</BufferedIO>
-		<ImmediateFlush>true</ImmediateFlush>
-    	<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-      		<level>WARN</level>
-    	</filter>
-		<layout class="ch.qos.logback.classic.PatternLayout">
-			<Pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</Pattern>
-		</layout>
-	</appender>
-	<root>
-		<level value="DEBUG" />
-		<appender-ref ref="CONSOLE" />
-		<appender-ref ref="FILE" />
-		<appender-ref ref="ERRORFILE" />
-	</root>
-	<!-- Red5 -->
-	<logger name="org.red5.io">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.Client">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.jetty">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.Standalone">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.tomcat">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.api.stream.support">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.cache">
-		<level value="WARN" />
-	</logger>
-	<logger
-		name="org.red5.server.jetty.Red5WebPropertiesConfiguration">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.jmx">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.messaging.InMemoryPushPushPipe">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.net">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.net.servlet.RTMPTServlet">
-		<level value="WARN" />
-	</logger>	
-	<logger name="org.red5.server.net.servlet">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.net.proxy">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.net.remoting">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.net.rtmp">
-		<level value="WARN" />
-	</logger>	
-	<logger name="org.red5.server.net.rtmp.RTMPHandler">
-		<level value="OFF" />
-	</logger>
-	<logger name="org.red5.server.net.rtmp.BaseRTMPHandler">
-		<level value="OFF" />
-	</logger>
-	<logger name="org.red5.server.net.rtmp.codec">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.net.rtmp.RTMPMinaIoHandler">
-		<level value="OFF" />
-	</logger>
-	<logger name="org.red5.server.net.rtmp.RTMPMinaTransport">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.net.rtmp.status">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.net.rtmpt">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.persistence">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.pooling.ThreadObjectFactory">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.script">
-		<level value="WARN" />
-	</logger>	
-	<logger name="org.red5.server.service">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.so">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.stream">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.red5.server.stream.consumer">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.net.mrtmp">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.red5.server.net.mrtmp.codec">
-		<level value="WARN" />
-	</logger>
-	<!-- Mina -->			
-	<logger name="org.apache.mina">
-		<level value="WARN" />
-	</logger>	
-	<logger name="org.apache.mina.filter">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.apache.mina.filter.thread.ThreadPoolFilter">
-		<level value="WARN" />
-	</logger>
-	<!-- Apache commons -->
-	<logger name="org.apache.commons">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.apache.commons.modeler">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.apache.commons.beanutils">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.apache.commons.digester">
-		<level value="WARN" />
-	</logger>
-	<logger name="httpclient">
-		<level value="WARN" />
-	</logger>
-	<!-- Apache catalina / tomcat -->
-	<logger name="org.apache.catalina">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.apache.catalina.realm">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.apache.catalina.session">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.apache.jasper">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.apache.tomcat">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.apache.tomcat.util.net">
-		<level value="WARN" />
-	</logger>
-	<!-- Jetty -->
-	<logger name="org.mortbay">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.mortbay.log">
-		<level value="INFO" />
-	</logger>
-	<!-- Spring -->
-	<logger name="org.springframework">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.springframework.beans.factory">
-		<level value="INFO" />
-	</logger>	
-	<logger name="org.springframework.beans.factory.xml">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.springframework.ui.context.support">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.springframework.web.context">
-		<level value="INFO" />
-	</logger>
-	<logger name="org.springframework.web.context.support">
-		<level value="WARN" />
-	</logger>
-	<logger name="org.quartz">
-		<level value="WARN" />
-	</logger>
-	<!-- Caching -->
-	<logger name="net.sf.ehcache">
-		<level value="INFO" />
-	</logger>
-
-</configuration>
+<?xml version="1.0" encoding="UTF-8" ?>
+<configuration>
+	<consolePlugin/>
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<Pattern>[%p] [%thread] %logger - %msg%n</Pattern>
+		</layout>
+	</appender>
+	<appender name="FILE" class="ch.qos.logback.core.FileAppender">
+		<File>../log/red5.log</File>
+		<Append>false</Append>
+		<Encoding>UTF-8</Encoding>
+		<BufferedIO>false</BufferedIO>
+		<ImmediateFlush>true</ImmediateFlush>
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<Pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</Pattern>
+		</layout>
+	</appender>
+	<appender name="ERRORFILE" class="ch.qos.logback.core.FileAppender">
+		<File>../log/error.log</File>
+		<Append>false</Append>
+		<Encoding>UTF-8</Encoding>
+		<BufferedIO>false</BufferedIO>
+		<ImmediateFlush>true</ImmediateFlush>
+		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+			<level>WARN</level>
+		</filter>
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<Pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</Pattern>
+		</layout>
+	</appender>
+	<root>
+		<level value="DEBUG"/>
+		<appender-ref ref="CONSOLE"/>
+		<appender-ref ref="FILE"/>
+		<appender-ref ref="ERRORFILE"/>
+	</root>
+	<!-- Red5 -->
+	
+	<logger name="org.red5.io">
+		<level value="DEBUG"/>
+	</logger>
+	
+	<logger name="org.red5.io.object">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.Client">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.jetty">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.Standalone">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.tomcat">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.api.stream.support">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.cache">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.jetty.Red5WebPropertiesConfiguration">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.jmx">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.messaging.InMemoryPushPushPipe">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.net">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.net.servlet.RTMPTServlet">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.net.servlet">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.net.proxy">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.net.remoting">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.net.rtmp">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.net.rtmp.RTMPHandler">
+		<level value="OFF"/>
+	</logger>
+	<logger name="org.red5.server.net.rtmp.BaseRTMPHandler">
+		<level value="OFF"/>
+	</logger>
+	<logger name="org.red5.server.net.rtmp.codec">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.net.rtmp.RTMPMinaIoHandler">
+		<level value="OFF"/>
+	</logger>
+	<logger name="org.red5.server.net.rtmp.RTMPMinaTransport">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.net.rtmp.status">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.net.rtmpt">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.persistence">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.pooling.ThreadObjectFactory">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.script">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.service">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.red5.server.so">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.stream">
+		<level value="INFO"/>
+	</logger>
+
+	<logger name="org.red5.server.stream.ProviderService">
+		<level value="DEBUG"/>
+	</logger>
+	<logger name="org.red5.server.stream.provider">
+		<level value="DEBUG"/>
+	</logger>
+
+	<logger name="org.red5.server.stream.consumer">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.net.mrtmp">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.red5.server.net.mrtmp.codec">
+		<level value="WARN"/>
+	</logger>
+	<!-- Mina -->
+	<logger name="org.apache.mina">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.apache.mina.filter">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.apache.mina.filter.thread.ThreadPoolFilter">
+		<level value="WARN"/>
+	</logger>
+	<!-- Apache commons -->
+	<logger name="org.apache.commons">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.apache.commons.modeler">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.apache.commons.beanutils">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.apache.commons.digester">
+		<level value="WARN"/>
+	</logger>
+	<logger name="httpclient">
+		<level value="WARN"/>
+	</logger>
+	<!-- Apache catalina / tomcat -->
+	<logger name="org.apache.catalina">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.apache.catalina.authenticator">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.apache.catalina.realm">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.apache.catalina.session">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.apache.jasper">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.apache.tomcat">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.apache.tomcat.util.net">
+		<level value="WARN"/>
+	</logger>
+	<!-- Jetty -->
+	<logger name="org.mortbay">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.mortbay.log">
+		<level value="INFO"/>
+	</logger>
+	<!-- Spring -->
+	<logger name="org.springframework">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.springframework.beans.factory">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.springframework.beans.factory.xml">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.springframework.ui.context.support">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.springframework.web.context">
+		<level value="INFO"/>
+	</logger>
+	<logger name="org.springframework.web.context.support">
+		<level value="WARN"/>
+	</logger>
+	<logger name="org.quartz">
+		<level value="WARN"/>
+	</logger>
+	<!-- Caching -->
+	<logger name="net.sf.ehcache">
+		<level value="INFO"/>
+	</logger>
+</configuration>

Modified: java/server/branches/paulg_mp4/conf/red5-common.xml
==============================================================================
--- java/server/branches/paulg_mp4/conf/red5-common.xml	(original)
+++ java/server/branches/paulg_mp4/conf/red5-common.xml	Wed Sep 10 11:40:20  
2008
@@ -1,224 +1,233 @@
-<?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-2.0.xsd                             
http://www.springframework.org/schema/lang  
http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
-	<bean id="placeholderConfig"
-		 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
-		<property name="location" value="classpath:/red5.properties" />
-	</bean>
-	<!-- This context is shared between all child contexts. -->
-	<!-- Server bean -->
-	<bean id="red5.server" class="org.red5.server.Server"/>
-	<!-- JMX server -->
-	<bean id="jmxFactory" class="org.red5.server.jmx.JMXFactory">
-		<property name="domain" value="org.red5.server"/>
-	</bean>
-	<bean id="jmxAgent" class="org.red5.server.jmx.JMXAgent"  
init-method="init">
-		<!-- The RMI adapter allows remote connections to the MBeanServer -->
-		<property name="enableRmiAdapter" value="true"/>
+<?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-2.0.xsd                             
http://www.springframework.org/schema/lang  
http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
+	<bean id="placeholderConfig"  
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+		<property name="location" value="classpath:/red5.properties"/>
+	</bean>
+	<!-- This context is shared between all child contexts. -->
+	<!-- Server bean -->
+	<bean id="red5.server" class="org.red5.server.Server"/>
+	<!-- JMX server -->
+	<bean id="jmxFactory" class="org.red5.server.jmx.JMXFactory">
+		<property name="domain" value="org.red5.server"/>
+	</bean>
+	<bean id="jmxAgent" class="org.red5.server.jmx.JMXAgent"  
init-method="init">
+		<!-- The RMI adapter allows remote connections to the MBeanServer -->
+
+		<property name="enableRmiAdapter" value="true"/>
  		<property name="rmiAdapterPort" value="${jmx.rmi.port.registry}"/>
  		<property name="rmiAdapterRemotePort"  
value="${jmx.rmi.port.remoteobjects}"/>
-		<property name="rmiAdapterHost" value="${jmx.rmi.host}"/>
-		<property name="enableSsl" value="${jmx.rmi.ssl}"/>
-		<!-- Starts a registry if it doesnt exist -->
-		<property name="startRegistry" value="true"/>
-		<!-- Authentication -->
-		<property name="remoteAccessProperties"  
value="${red5.config_root}/access.properties"/>
+		<property name="rmiAdapterHost" value="${jmx.rmi.host}"/>
+		<property name="enableSsl" value="${jmx.rmi.ssl}"/>
+		<!-- Starts a registry if it doesnt exist -->
+		<property name="startRegistry" value="true"/>
+		<!-- Authentication -->
+		<property name="remoteAccessProperties"  
value="${red5.config_root}/access.properties"/>
  		<property name="remotePasswordProperties"  
value="${red5.config_root}/password.properties"/>
  		<property name="remoteSSLKeystore"  
value="${red5.config_root}/keystore.jmx"/>
-		<property name="remoteSSLKeystorePass" value="${rtmps.keystorepass}"/>
-		<!-- The HTML adapter allows connections to the MBeanServer via a web  
browser -->
-		<property name="enableHtmlAdapter" value="${jmx.http}"/>
-		<property name="htmlAdapterPort" value="${jmx.http.port}"/>
-		<!-- Mina offers its own Mbeans so you may integrate them here -->
-		<property name="enableMinaMonitor" value="true"/>
-	</bean>
-	<!-- Serializes objects to AMF binary -->
-	<bean id="serializer" class="org.red5.io.object.Serializer"/>
-	<!-- Deserializes objects from AMF binary -->
-	<bean id="deserializer" class="org.red5.io.object.Deserializer"/>
-	<!-- Deals with StatusObjects representing statuses like FMS  
NetConnection.Connect.Success status -->
-	<bean id="statusObjectService"  
class="org.red5.server.net.rtmp.status.StatusObjectService"
-		 autowire="byType" init-method="initialize"/>
-	<!-- RTMP codec factory -->
-	<bean id="rtmpCodecFactory"  
class="org.red5.server.net.rtmp.codec.RTMPMinaCodecFactory"
-		 autowire="byType" init-method="init">
-		<property name="minaEncoder">
-			<bean class="org.red5.server.net.rtmp.codec.RTMPMinaProtocolEncoder">
-				<property name="serializer">
-					<ref bean="serializer"/>
-				</property>
-			</bean>
-		</property>
-		<property name="minaDecoder">
-			<bean class="org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder">
-				<property name="deserializer">
-					<ref bean="deserializer"/>
-				</property>
-			</bean>
-		</property>
-	</bean>
-	<!-- Remoting calls codec factory -->
-	<bean id="remotingCodecFactory"  
class="org.red5.server.net.remoting.codec.RemotingCodecFactory"
-		 autowire="byType" init-method="init"/>
-	<!-- Video codec factory -->
-	<bean id="videoCodecFactory"  
class="org.red5.server.stream.VideoCodecFactory">
-		<property name="codecs">
-			<list>
-				<bean id="screenVideoCodec"  
class="org.red5.server.stream.codec.ScreenVideo"/>
-				<!--
-				<bean id="sorensonVideoCodec"  
class="org.red5.server.stream.codec.SorensonVideo"/>
-				-->
-			</list>
-		</property>
-	</bean>
-	<!-- Streamable file factory -->
-	<bean id="streamableFileFactory"  
class="org.red5.io.StreamableFileFactory">
-		<property name="services">
-			<list>
-				<bean id="flvFileService" class="org.red5.io.flv.impl.FLVService">
-					<property name="generateMetadata" value="true"/>
-				</bean>
-				<bean id="mp3FileService" class="org.red5.io.mp3.impl.MP3Service"/>
-			</list>
-		</property>
-	</bean>
-	<!-- Thread that writes modified objects to disk periodically -->
-	<bean id="filePersistenceThread"  
class="org.red5.server.persistence.FilePersistenceThread"/>
-	<!-- Handles creation / lookup of shared objects -->
-	<bean id="sharedObjectService"  
class="org.red5.server.so.SharedObjectService">
-		<property name="persistenceClassName">
-			<value>org.red5.server.persistence.FilePersistence</value>
-		</property>
-	</bean>
-	<!-- High level access to streams -->
-	<bean id="streamService" class="org.red5.server.stream.StreamService"/>
-	<!-- High level access to broadcasted streams -->
-	<bean id="providerService"  
class="org.red5.server.stream.ProviderService"/>
-	<!-- Provides output to consumers -->
-	<bean id="consumerService"  
class="org.red5.server.stream.ConsumerService"/>
-	<!-- Simple bandwidth control -->
-	<bean id="BWControlService"  
class="org.red5.server.stream.SimpleBWControlService" init-method="init"  
destroy-method="shutdown">
-		<property name="interval" value="100"/>
-		<property name="defaultCapacity" value="104857600"/>
-		<!-- 100MB -->
-	</bean>
-	<!-- Dummy bandwidth control that does nothing -->
-	<!--
-    <bean id="BWControlService"  
class="org.red5.server.stream.DummyBWControlService"/> -->
-	<!-- Scheduling service -->
-	<bean id="schedulingService"  
class="org.red5.server.scheduling.QuartzSchedulingService"  
destroy-method="shutdown"/>
-		
-    <!-- War deployer -->
-    <bean id="warDeployService"  
class="org.red5.server.service.WarDeployer" init-method="init"  
destroy-method="shutdown">
-        <property name="scheduler" ref="schedulingService"/>
-        <property name="checkInterval" value="600000"/>
-        <property name="deploymentDirectory" value="${red5.root}/webapps"/>
-    </bean>		
-		
-	<!-- Threadpool settings for the remoting clients -->
-	<bean id="remotingPool" class="org.red5.server.pooling.ThreadPool">
-		<property name="poolSize" value="8"/>
-	</bean>
-	<!-- Use injection to setup thread pool for remoting clients -->
-	<bean id="remotingClient"  
class="org.red5.server.net.remoting.RemotingClient">
-		<property name="threadPool" ref="remotingPool"/>
-	</bean>
-	<!--
-	Now we can load the cache engine, only one may be enabled at a time. If  
no-caching is required select the
-	NoCacheImpl. Three other implementations based on EhCache, WhirlyCache,  
and Red5Cache are also available.
-	-->
-	<bean id="object.cache" class="org.red5.server.cache.NoCacheImpl"/>
-	<!--
-	<bean id="object.cache" class="org.red5.server.cache.CacheImpl"  
init-method="init" autowire="byType">
-		<property name="maxEntries"><value>5</value></property>
-	</bean>
-
-	<bean id="object.cache" class="org.red5.server.cache.EhCacheImpl"  
init-method="init">
-		<property name="diskStore" value="java.io.tmpdir" />
-		<property name="memoryStoreEvictionPolicy" value="LFU" />
-		<property name="cacheManagerEventListener"><null/></property>
-		<property name="cacheConfigs">
-			<list>
-				<bean class="net.sf.ehcache.config.CacheConfiguration">
-					<property name="name" value="flv.cache" />
-					<property name="maxElementsInMemory" value="5" />
-					<property name="eternal" value="false" />
-					<property name="timeToIdleSeconds" value="0" />
-					<property name="timeToLiveSeconds" value="0" />
-					<property name="overflowToDisk" value="false" />
-					<property name="diskPersistent" value="false" />
-				</bean>
-			</list>
-		</property>
-	</bean>
--->
-	<!--
-	    Cache to use for keyframe metadata.
-	-->
-	<bean id="keyframe.cache"  
class="org.red5.io.CachingFileKeyFrameMetaCache">
-		<property name="maxCacheEntry" value="500" />
-	</bean>
-	<!--
-	    Represents FLV files
-	    Use injection to set the cache impl to be used with flvs
-	-->
-	<bean id="flv.impl" class="org.red5.io.flv.impl.FLV">
-		<property name="cache">
-			<ref bean="object.cache"/>
-		</property>
-	</bean>
-	<!-- Use injection to set the keyframe cache for FLV files -->
-	<bean id="flvreader.impl" class="org.red5.io.flv.impl.FLVReader">
-		<property name="keyFrameCache">
-			<ref bean="keyframe.cache"/>
-		</property>
-	</bean>
-	<!-- Use injection to set the keyframe cache for MP3 files -->
-	<bean id="mp3reader.impl" class="org.red5.io.mp3.impl.MP3Reader">
-		<property name="frameCache">
-			<ref bean="keyframe.cache"/>
-		</property>
-	</bean>
-	<!-- Use injection to set the buffer type for reading FLV files -->
-	<bean  
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
-		<property name="staticMethod">
-			<value>org.red5.io.flv.impl.FLVReader.setBufferType</value>
-		</property>
-		<!-- Three buffer types are available 'auto', 'heap', and 'direct' -->
-		<property name="arguments" value="auto"/>
-	</bean>
-	<!-- Use injection to set the buffer size for reading FLV files -->
-	<bean  
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
-		<property name="staticMethod">
-			<value>org.red5.io.flv.impl.FLVReader.setBufferSize</value>
-		</property>
-		<!-- Three buffer types are available 'auto', 'heap', and 'direct' -->
-		<property name="arguments" value="4096"/>
-	</bean>
-	<!-- Executor that will be used to schedule stream playback to keep
-		the client buffer filled.
-	-->
-	<bean id="streamExecutor"  
class="java.util.concurrent.ScheduledThreadPoolExecutor">
-		<constructor-arg value="4"/>
-		<property name="maximumPoolSize" value="32"/>
-	</bean>
-	<!-- ClientBroadcastStream and PlaylistSubscriberStream
-		that will be used by RTMPConnection and maybe other classes.
-		These beans are lazy-init because most likely server will need
-		to be up and running before we can get a smart implementation
-		of these streams
-	-->
-	<bean id="playlistSubscriberStream" scope="prototype" lazy-init="true"  
class="org.red5.server.stream.PlaylistSubscriberStream">
-		<property name="executor" ref="streamExecutor"/>
-		<!-- Check for buffer underruns every X ms and generate  
NetStream.Play.InsufficientBW accordingly.
-		     Set to 0 to disable. Be careful not to set this value too small to  
avoid network congestion.
-		  -->
-		<property name="bufferCheckInterval" value="5000"/>
-		<!-- A NetStream.Play.InsufficientBW message is generated if more than X  
messages are queued for sending on the connection.
-		     This value will also control the maximum pending messages on the  
server. To use a smaller value on slow connections
-		     to get smaller delay for downstream server commands.
-		  -->
-		<property name="underrunTrigger" value="10"/>
-	</bean>
-	<bean id="clientBroadcastStream" scope="prototype" lazy-init="true"  
class="org.red5.server.stream.ClientBroadcastStream"/>
-</beans>
+		<property name="remoteSSLKeystorePass" value="${rtmps.keystorepass}"/>
+		<!-- The HTML adapter allows connections to the MBeanServer via a web  
browser -->
+		<property name="enableHtmlAdapter" value="${jmx.http}"/>
+		<property name="htmlAdapterPort" value="${jmx.http.port}"/>
+		<!-- Mina offers its own Mbeans so you may integrate them here -->
+		<property name="enableMinaMonitor" value="true"/>
+	</bean>
+	<!-- Serializes objects to AMF binary -->
+	<bean id="serializer" class="org.red5.io.object.Serializer"/>
+	<!-- Deserializes objects from AMF binary -->
+	<bean id="deserializer" class="org.red5.io.object.Deserializer"/>
+	<!-- Deals with StatusObjects representing statuses like FMS  
NetConnection.Connect.Success status -->
+	<bean id="statusObjectService"  
class="org.red5.server.net.rtmp.status.StatusObjectService"
+		 autowire="byType" init-method="initialize"/>
+	<!-- RTMP codec factory -->
+	<bean id="rtmpCodecFactory"  
class="org.red5.server.net.rtmp.codec.RTMPMinaCodecFactory"
+		 autowire="byType" init-method="init">
+		<property name="minaEncoder">
+			<bean class="org.red5.server.net.rtmp.codec.RTMPMinaProtocolEncoder">
+				<property name="serializer">
+					<ref bean="serializer"/>
+				</property>
+			</bean>
+		</property>
+		<property name="minaDecoder">
+			<bean class="org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder">
+				<property name="deserializer">
+					<ref bean="deserializer"/>
+				</property>
+			</bean>
+		</property>
+	</bean>
+	<!-- Remoting calls codec factory -->
+	<bean id="remotingCodecFactory"  
class="org.red5.server.net.remoting.codec.RemotingCodecFactory"
+		 autowire="byType" init-method="init"/>
+	<!-- Video codec factory -->
+	<bean id="videoCodecFactory"  
class="org.red5.server.stream.VideoCodecFactory">
+		<property name="codecs">
+			<list>
+				<bean id="screenVideoCodec"  
class="org.red5.server.stream.codec.ScreenVideo"/>
+				<!--
+				<bean id="sorensonVideoCodec"  
class="org.red5.server.stream.codec.SorensonVideo"/>
+				-->
+			</list>
+		</property>
+	</bean>
+	<!-- Streamable file factory -->
+	<bean id="streamableFileFactory"  
class="org.red5.io.StreamableFileFactory">
+		<property name="services">
+			<list>
+				<bean id="flvFileService" class="org.red5.io.flv.impl.FLVService">
+					<property name="generateMetadata" value="true"/>
+				</bean>
+				<bean id="mp3FileService" class="org.red5.io.mp3.impl.MP3Service"/>
+				<bean id="mp4FileService" class="org.red5.io.mp4.impl.MP4Service"/>
+				<bean id="m4aFileService" class="org.red5.io.m4a.impl.M4AService"/>
+			</list>
+		</property>
+	</bean>
+	<!-- Thread that writes modified objects to disk periodically -->
+	<bean id="filePersistenceThread"  
class="org.red5.server.persistence.FilePersistenceThread"/>
+	<!-- Handles creation / lookup of shared objects -->
+	<bean id="sharedObjectService"  
class="org.red5.server.so.SharedObjectService">
+		<property name="persistenceClassName">
+			<value>org.red5.server.persistence.FilePersistence</value>
+		</property>
+	</bean>
+	<!-- High level access to streams -->
+	<bean id="streamService" class="org.red5.server.stream.StreamService"/>
+	<!-- High level access to broadcasted streams -->
+	<bean id="providerService"  
class="org.red5.server.stream.ProviderService"/>
+	<!-- Provides output to consumers -->
+	<bean id="consumerService"  
class="org.red5.server.stream.ConsumerService"/>
+	<!-- Simple bandwidth control -->
+	<bean id="BWControlService"  
class="org.red5.server.stream.SimpleBWControlService" init-method="init"
+		 destroy-method="shutdown">
+		<property name="interval" value="100"/>
+		<property name="defaultCapacity" value="104857600"/>
+		<!-- 100MB -->
+	</bean>
+	<!-- Dummy bandwidth control that does nothing -->
+	<!--
+    <bean id="BWControlService"  
class="org.red5.server.stream.DummyBWControlService"/> -->
+	<!-- Scheduling service -->
+	<bean id="schedulingService"  
class="org.red5.server.scheduling.QuartzSchedulingService"
+		 destroy-method="shutdown"/>
+	<!-- War deployer -->
+	<bean id="warDeployService" class="org.red5.server.service.WarDeployer"  
init-method="init"
+		 destroy-method="shutdown">
+		<property name="scheduler" ref="schedulingService"/>
+		<property name="checkInterval" value="600000"/>
+		<property name="deploymentDirectory" value="${red5.root}/webapps"/>
+	</bean>
+	<!-- Threadpool settings for the remoting clients -->
+	<bean id="remotingPool" class="org.red5.server.pooling.ThreadPool">
+		<property name="poolSize" value="8"/>
+	</bean>
+	<!-- Use injection to setup thread pool for remoting clients -->
+	<bean id="remotingClient"  
class="org.red5.server.net.remoting.RemotingClient">
+		<property name="threadPool" ref="remotingPool"/>
+	</bean>
+	<!--
+	Now we can load the cache engine, only one may be enabled at a time. If  
no-caching is required select the
+	NoCacheImpl. Three other implementations based on EhCache, WhirlyCache,  
and Red5Cache are also available.
+	-->
+	<bean id="object.cache" class="org.red5.server.cache.NoCacheImpl"/>
+	<!--
+	<bean id="object.cache" class="org.red5.server.cache.CacheImpl"  
init-method="init" autowire="byType">
+		<property name="maxEntries"><value>5</value></property>
+	</bean>
+
+	<bean id="object.cache" class="org.red5.server.cache.EhCacheImpl"  
init-method="init">
+		<property name="diskStore" value="java.io.tmpdir" />
+		<property name="memoryStoreEvictionPolicy" value="LFU" />
+		<property name="cacheManagerEventListener"><null/></property>
+		<property name="cacheConfigs">
+			<list>
+				<bean class="net.sf.ehcache.config.CacheConfiguration">
+					<property name="name" value="flv.cache" />
+					<property name="maxElementsInMemory" value="5" />
+					<property name="eternal" value="false" />
+					<property name="timeToIdleSeconds" value="0" />
+					<property name="timeToLiveSeconds" value="0" />
+					<property name="overflowToDisk" value="false" />
+					<property name="diskPersistent" value="false" />
+				</bean>
+			</list>
+		</property>
+	</bean>
+-->
+	<!--
+	    Cache to use for keyframe metadata.
+	-->
+	<bean id="keyframe.cache"  
class="org.red5.io.CachingFileKeyFrameMetaCache">
+		<property name="maxCacheEntry" value="500"/>
+	</bean>
+	<!--
+	    Represents FLV files
+	    Use injection to set the cache impl to be used with flvs
+	-->
+	<bean id="flv.impl" class="org.red5.io.flv.impl.FLV">
+		<property name="cache">
+			<ref bean="object.cache"/>
+		</property>
+	</bean>
+	<!-- Use injection to set the keyframe cache for FLV files -->
+	<bean id="flvreader.impl" class="org.red5.io.flv.impl.FLVReader">
+		<property name="keyFrameCache">
+			<ref bean="keyframe.cache"/>
+		</property>
+	</bean>
+	<!-- Use injection to set the keyframe cache for MP4 files -->
+	<bean id="mp4reader.impl" class="org.red5.io.mp4.impl.MP4Reader">
+		<property name="keyFrameCache">
+			<ref bean="keyframe.cache"/>
+		</property>
+	</bean>
+	<!-- Use injection to set the keyframe cache for MP3 files -->
+	<bean id="mp3reader.impl" class="org.red5.io.mp3.impl.MP3Reader">
+		<property name="frameCache">
+			<ref bean="keyframe.cache"/>
+		</property>
+	</bean>
+	<!-- Use injection to set the buffer type for reading FLV files -->
+	<bean  
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
+		<property name="staticMethod">
+			<value>org.red5.io.flv.impl.FLVReader.setBufferType</value>
+		</property>
+		<!-- Three buffer types are available 'auto', 'heap', and 'direct' -->
+		<property name="arguments" value="auto"/>
+	</bean>
+	<!-- Use injection to set the buffer size for reading FLV files -->
+	<bean  
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
+		<property name="staticMethod">
+			<value>org.red5.io.flv.impl.FLVReader.setBufferSize</value>
+		</property>
+		<!-- Three buffer types are available 'auto', 'heap', and 'direct' -->
+		<property name="arguments" value="4096"/>
+	</bean>
+	<!-- Executor that will be used to schedule stream playback to keep
+		the client buffer filled.
+	-->
+	<bean id="streamExecutor"  
class="java.util.concurrent.ScheduledThreadPoolExecutor">
+		<constructor-arg value="4"/>
+		<property name="maximumPoolSize" value="32"/>
+	</bean>
+	<!-- ClientBroadcastStream and PlaylistSubscriberStream
+		that will be used by RTMPConnection and maybe other classes.
+		These beans are lazy-init because most likely server will need
+		to be up and running before we can get a smart implementation
+		of these streams
+	-->
+	<bean id="playlistSubscriberStream" scope="prototype" lazy-init="true"  
class="org.red5.server.stream.PlaylistSubscriberStream">
+		<property name="executor" ref="streamExecutor"/>
+		<!-- Check for buffer underruns every X ms and generate  
NetStream.Play.InsufficientBW accordingly.
+		     Set to 0 to disable. Be careful not to set this value too small to  
avoid network congestion.
+		  -->
+		<property name="bufferCheckInterval" value="5000"/>
+		<!-- A NetStream.Play.InsufficientBW message is generated if more than X  
messages are queued for sending on the connection.
+		     This value will also control the maximum pending messages on the  
server. To use a smaller value on slow connections
+		     to get smaller delay for downstream server commands.
+		  -->
+		<property name="underrunTrigger" value="10"/>
+	</bean>
+	<bean id="clientBroadcastStream" scope="prototype" lazy-init="true"  
class="org.red5.server.stream.ClientBroadcastStream"/>
+</beans>

Modified: java/server/branches/paulg_mp4/conf/red5-core.xml
==============================================================================
--- java/server/branches/paulg_mp4/conf/red5-core.xml	(original)
+++ java/server/branches/paulg_mp4/conf/red5-core.xml	Wed Sep 10 11:40:20  
2008
@@ -144,6 +144,7 @@
  	</bean>
  	
  	<!-- RTMPS -->
+	<!--
  	<bean id="rtmps.server"  
class="org.red5.server.net.rtmps.TomcatRTMPSLoader" init-method="init"  
lazy-init="true">
  	
  		<property name="webappFolder" value="${red5.root}/webapps" />
@@ -196,20 +197,20 @@
  		</property>	

  		<property name="valves">
-      		<list>
-	    		<bean id="valve.access"  
class="org.apache.catalina.valves.AccessLogValve">
-	                <property name="directory" value="log" />
-	                <property name="prefix"  
value="${rtmps.host}_rtmps_access." />
-	                <property name="suffix" value=".log" />
-	                <property name="pattern" value="common" />
-	                <property name="resolveHosts" value="false" />
-	                <property name="rotatable" value="true" />
-	        	</bean>
-        	</list>
-        </property>			
+	      		<list>
+		    		<bean id="valve.access"  
class="org.apache.catalina.valves.AccessLogValve">
+					<property name="directory" value="log" />
+					<property name="prefix" value="${rtmps.host}_rtmps_access." />
+					<property name="suffix" value=".log" />
+					<property name="pattern" value="common" />
+					<property name="resolveHosts" value="false" />
+					<property name="rotatable" value="true" />
+				</bean>
+			</list>
+		</property>			
  	
  	</bean>	
-
+	-->
  	
  	<!-- Enable when you need it. - - >
  	<bean id="rtmpProxyTransport"  
class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start"  
destroy-method="stop">

Modified: java/server/branches/paulg_mp4/red5.bat
==============================================================================
--- java/server/branches/paulg_mp4/red5.bat	(original)
+++ java/server/branches/paulg_mp4/red5.bat	Wed Sep 10 11:40:20 2008
@@ -18,7 +18,7 @@
  :launchRed5
  echo Starting Red5 (%RED5_MAINCLASS%)
  "%JAVA_HOME%/bin/java" %JYTHON_OPTS% %JAVA_OPTS%  
-cp %RED5_CLASSPATH% %RED5_MAINCLASS% %RED5_OPTS%
-goto finaly
+goto finally

  :err
  echo JAVA_HOME environment variable not set! Take a look at the readme.

Added:  
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/Application.java
==============================================================================
--- (empty file)
+++  
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/Application.java	 
Wed Sep 10 11:40:20 2008
@@ -0,0 +1,68 @@
+package org.red5.demos.oflaDemo;
+
+import org.red5.server.adapter.ApplicationAdapter;
+import org.red5.server.api.IBandwidthConfigure;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.IScope;
+import org.red5.server.api.stream.IServerStream;
+import org.red5.server.api.stream.IStreamCapableConnection;
+import org.red5.server.api.stream.support.SimpleConnectionBWConfig;
+
+public class Application extends ApplicationAdapter {
+	private IScope appScope;
+
+	private IServerStream serverStream;
+
+	/** {@inheritDoc} */
+    @Override
+	public boolean appStart(IScope app) {
+		appScope = app;
+		return true;
+	}
+
+	/** {@inheritDoc} */
+    @Override
+	public boolean appConnect(IConnection conn, Object[] params) {
+		// Trigger calling of "onBWDone", required for some FLV players
+		measureBandwidth(conn);
+		if (conn instanceof IStreamCapableConnection) {
+			IStreamCapableConnection streamConn = (IStreamCapableConnection) conn;
+			SimpleConnectionBWConfig bwConfig = new SimpleConnectionBWConfig();
+			bwConfig.getChannelBandwidth()[IBandwidthConfigure.OVERALL_CHANNEL] =
+				1024 * 1024;
+			bwConfig.getChannelInitialBurst()[IBandwidthConfigure.OVERALL_CHANNEL] =
+				128 * 1024;
+			streamConn.setBandwidthConfigure(bwConfig);
+		}
+		
+//		if (appScope == conn.getScope()) {
+//			serverStream = StreamUtils.createServerStream(appScope, "live0");
+//			SimplePlayItem item = new SimplePlayItem();
+//			item.setStart(0);
+//			item.setLength(10000);
+//			item.setName("on2_flash8_w_audio");
+//			serverStream.addItem(item);
+//			item = new SimplePlayItem();
+//			item.setStart(20000);
+//			item.setLength(10000);
+//			item.setName("on2_flash8_w_audio");
+//			serverStream.addItem(item);
+//			serverStream.start();
+//			try {
+//				serverStream.saveAs("aaa", false);
+//				serverStream.saveAs("bbb", false);
+//			} catch (Exception e) {}
+//		}
+		
+		return super.appConnect(conn, params);
+	}
+
+	/** {@inheritDoc} */
+    @Override
+	public void appDisconnect(IConnection conn) {
+		if (appScope == conn.getScope() && serverStream != null) {
+			serverStream.close();
+		}
+		super.appDisconnect(conn);
+	}
+}

Added:  
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/DemoService.java
==============================================================================
--- (empty file)
+++  
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/DemoService.java	 
Wed Sep 10 11:40:20 2008
@@ -0,0 +1,82 @@
+package org.red5.demos.oflaDemo;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.red5.server.api.IScope;
+import org.red5.server.api.Red5;
+import org.springframework.core.io.Resource;
+
+public class DemoService {
+
+	protected static Logger log = LoggerFactory.getLogger(DemoService.class);
+
+	private String formatDate(Date date) {
+		SimpleDateFormat formatter;
+		String pattern = "dd/MM/yy H:mm:ss";
+		Locale locale = new Locale("en", "US");
+		formatter = new SimpleDateFormat(pattern, locale);
+		return formatter.format(date);
+	}
+
+	/**
+	 * Getter for property 'listOfAvailableFLVs'.
+	 *
+	 * @return Value for property 'listOfAvailableFLVs'.
+	 */
+	public Map getListOfAvailableFLVs() {
+		IScope scope = Red5.getConnectionLocal().getScope();
+		Map<String, Map> filesMap = new HashMap<String, Map>();
+		try {
+			log.debug("getting the FLV files");
+			Resource[] flvs = scope.getResources("streams/*.flv");
+			addToMap(filesMap, flvs);
+
+			Resource[] mp3s = scope.getResources("streams/*.mp3");
+			addToMap(filesMap, mp3s);
+			
+			Resource[] mp4s = scope.getResources("streams/*.mp4");
+			addToMap(filesMap, mp4s);
+
+			Resource[] m4as = scope.getResources("streams/*.m4a");
+			addToMap(filesMap, m4as);
+			
+		} catch (IOException e) {
+			log.error("{}", e);
+		}
+		return filesMap;
+	}
+
+	private void addToMap(Map<String, Map> filesMap, Resource[] files)
+			throws IOException {
+		if (files != null) {
+			for (Resource flv : files) {
+				File file = flv.getFile();
+				Date lastModifiedDate = new Date(file.lastModified());
+				String lastModified = formatDate(lastModifiedDate);
+				String flvName = flv.getFile().getName();
+				String flvBytes = Long.toString(file.length());
+				if (log.isDebugEnabled()) {
+					log.debug("flvName: {}", flvName);
+					log.debug("lastModified date: {}", lastModified);
+					log.debug("flvBytes: {}", flvBytes);
+					log.debug("-------");
+				}
+				Map<String, Object> fileInfo = new HashMap<String, Object>();
+				fileInfo.put("name", flvName);
+				fileInfo.put("lastModified", lastModified);
+				fileInfo.put("size", flvBytes);
+				filesMap.put(flvName, fileInfo);
+			}
+		}
+	}
+
+}

Added:  
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/DemoServiceImpl.java
==============================================================================
--- (empty file)
+++  
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/DemoServiceImpl.java	 
Wed Sep 10 11:40:20 2008
@@ -0,0 +1,23 @@
+package org.red5.demos.oflaDemo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DemoServiceImpl implements IDemoService {
+	/**
+     * Getter for property 'listOfAvailableFLVs'.
+     *
+     * @return Value for property 'listOfAvailableFLVs'.
+     */
+    public Map getListOfAvailableFLVs() {
+    	System.out.println("getListOfAvailableFLVs empty");
+		return new HashMap(1);
+	}
+
+    public Map getListOfAvailableFLVs(String string) {
+    	System.out.println("getListOfAvailableFLVs, Got a string: " + string);
+    	return getListOfAvailableFLVs();
+    }
+
+}
+

Added:  
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/IDemoService.java
==============================================================================
--- (empty file)
+++  
java/server/branches/paulg_mp4/src/org/red5/demos/oflaDemo/IDemoService.java	 
Wed Sep 10 11:40:20 2008
@@ -0,0 +1,16 @@
+package org.red5.demos.oflaDemo;
+
+import java.util.Map;
+
+public interface IDemoService {
+
+	/**
+     * Getter for property 'listOfAvailableFLVs'.
+     *
+     * @return Value for property 'listOfAvailableFLVs'.
+     */
+    public Map getListOfAvailableFLVs();
+
+    public Map getListOfAvailableFLVs(String string);
+
+}

Modified:  
java/server/branches/paulg_mp4/src/org/red5/io/mp4/impl/MP4Reader.java
==============================================================================
--- java/server/branches/paulg_mp4/src/org/red5/io/mp4/impl/MP4Reader.java	 
(original)
+++ java/server/branches/paulg_mp4/src/org/red5/io/mp4/impl/MP4Reader.java	 
Wed Sep 10 11:40:20 2008
@@ -737,7 +737,7 @@
       * @return         Metadata event tag
       */
      ITag createFileMeta() {
-    	log.debug("Creating onMetaData notify");
+    	log.debug("Creating onMetaData");
  		// Create tag for onMetaData event
  		ByteBuffer buf = ByteBuffer.allocate(1024);
  		buf.setAutoExpand(true);
@@ -816,10 +816,10 @@
  	 * af 00 13 90 56 e5 a5 48 00 = HE-AAC
  	 */
      private void createPreStreamingTags() {
+    	log.debug("Creating pre-streaming tags");
      	//video tag #1
      	ITag tag = new Tag(IoConstants.TYPE_VIDEO, 0, 2, null, 0);
  		ByteBuffer body = ByteBuffer.allocate(tag.getBodySize());
-		body.setAutoExpand(true);
  		body.put(new byte[]{(byte) 0x52, (byte) 0});
  		body.flip();
  		tag.setBody(body);
@@ -827,10 +827,11 @@
  		//add tag
  		firstTags.add(tag);
  		//clear body for re-use
-		body.clear();
+		//body.clear();
  		
  		//video tag #2
  		tag = new Tag(IoConstants.TYPE_VIDEO, 0, 5, null, tag.getBodySize());
+		body = ByteBuffer.allocate(tag.getBodySize());
  		body.put(new byte[]{(byte) 0x17, (byte) 0x02, (byte) 00, (byte) 00,  
(byte) 00});
  		body.flip();
  		tag.setBody(body);
@@ -838,10 +839,11 @@
  		//add tag
  		firstTags.add(tag);
  		//clear body for re-use
-		body.clear();
+		//body.clear();
  		
      	//video tag #3
  		tag = new Tag(IoConstants.TYPE_VIDEO, 0, 2, null, tag.getBodySize());
+		body = ByteBuffer.allocate(tag.getBodySize());
  		body.put(new byte[]{(byte) 0x52, (byte) 0x01});
  		body.flip();
  		tag.setBody(body);				
@@ -849,10 +851,11 @@
  		//add tag
  		firstTags.add(tag);
  		//clear body for re-use
-		body.clear();
+		//body.clear();
  		
  		//audio tag #1
  		tag = new Tag(IoConstants.TYPE_AUDIO, 0, 4, null, tag.getBodySize());
+		body = ByteBuffer.allocate(tag.getBodySize());
  		body.put(new byte[]{(byte) 0xaf, (byte) 00, (byte) 0x12, (byte) 0x10});
  		body.flip();
  		tag.setBody(body);
@@ -860,10 +863,11 @@
  		//add tag
  		firstTags.add(tag);
  		//clear body for re-use
-		body.clear();
+		//body.clear();
  		
  		//audio tag #2
  		tag = new Tag(IoConstants.TYPE_AUDIO, 0, 9, null, tag.getBodySize());
+		body = ByteBuffer.allocate(tag.getBodySize());
  		body.put(new byte[]{(byte) 0xaf, (byte) 0x01, (byte) 0x20, (byte) 00,  
(byte) 00, (byte) 00, (byte) 00, (byte) 00, (byte) 0x0e});
  		body.flip();
  		tag.setBody(body);    	
@@ -871,9 +875,9 @@
  		//add tag
  		firstTags.add(tag);
  		//clear body for release
-		body.clear();
+		//body.clear();
  		
-		body.release();
+		//body.release();
      }

      private int prevFrameSize = 0;
@@ -885,13 +889,15 @@
  		log.debug("Read tag - currentSample {}, prevFrameSize {}", new  
Object[]{currentSample, prevFrameSize});
  		//empty-out the pre-streaming tags first
  		if (!firstTags.isEmpty()) {
+			log.debug("Returning pre-tag");
  			// Return first tags before media data
  			return firstTags.removeFirst();
  		}		

  		int sampleSize = (Integer) videoSamples.get(currentSample) + 5;
  		int ts = videoSampleDuration * currentSample;  
//Math.round((currentSample * timeScale) / videoSampleDuration);
-		log.debug("Read tag - sample dur / scale {}", new  
Object[]{((currentSample * timeScale) / videoSampleDuration)});				
+		log.debug("Read tag - sample dur / scale {}", new  
Object[]{((currentSample * timeScale) / videoSampleDuration)});		
+		log.debug("Sample position map: {}", samplePosMap);
  		long samplePos = samplePosMap.get(currentSample);
  		log.debug("Read tag - sampleSize {} ts {}", new Object[]{sampleSize,  
ts});

@@ -910,6 +916,7 @@
  			body.put(PREFIX_VIDEO_FRAME);
  		}
  		try {
+			//do we need to add the mdat offset to the sample position?
  			channel.position(samplePos);
  			channel.read(body.buf());
  		} catch (IOException e) {
@@ -921,7 +928,7 @@
  		
  		prevFrameSize = tag.getBodySize();
  	
-		log.debug("Tag: {}", tag);
+		//log.debug("Tag: {}", tag);
  		return tag;
  	}

@@ -936,6 +943,7 @@
  			log.debug("Key frame meta already generated");
  			return keyframeMeta;
  		}
+		log.debug("Analyzing key frames");
  			
  		//key frame sample numbers are stored in the syncSamples collection
  		int keyframeCount = syncSamples.size();

Modified: java/server/branches/paulg_mp4/src/org/red5/server/Bootstrap.java
==============================================================================
--- java/server/branches/paulg_mp4/src/org/red5/server/Bootstrap.java	 
(original)
+++ java/server/branches/paulg_mp4/src/org/red5/server/Bootstrap.java	Wed  
Sep 10 11:40:20 2008
@@ -44,6 +44,7 @@
  public class Bootstrap {

      protected static Logger log = LoggerFactory.getLogger(Bootstrap.class);
+
  	public static void launch(URLClassLoader loader) {
  		System.setProperty("red5.deployment.type", "bootstrap");
  		try {				
@@ -110,7 +111,6 @@
  		
  		//set conf sysprop
  		System.setProperty("red5.config_root", conf);
-
  		System.out.println("Configuation root: " + conf);
  		
  		// expect a conf/red5.xml or we fail!
@@ -129,11 +129,23 @@
  		List<URL> urls = new ArrayList<URL>(57); //use prime
  		// add red5.jar
  		urls.add(new File(root, "red5.jar").toURI().toURL());
-		// add all other libs
-		for (File lib : new File(root, "lib").listFiles()) {
-			URL url = lib.toURI().toURL();
-			urls.add(url);
+
+		// look for lib dir
+		String libDirectory = System.getProperty("red5.lib");		
+		if (libDirectory == null) {	
+    		// add all other libs
+    		for (File lib : new File(root, "lib").listFiles()) {
+    			URL url = lib.toURI().toURL();
+    			urls.add(url);
+    		}
+		} else {			
+			System.out.println("Library directory: " + libDirectory);
+    		for (File lib : new File(libDirectory).listFiles()) {
+    			URL url = lib.toURI().toURL();
+    			urls.add(url);
+    		}
  		}
+		
  		//look over the libraries and remove the old versions
  		scrubList(urls);
  		// add config dir

Modified:  
java/server/branches/paulg_mp4/src/org/red5/server/stream/provider/FileProvider.java
==============================================================================
---  
java/server/branches/paulg_mp4/src/org/red5/server/stream/provider/FileProvider.java	 
(original)
+++  
java/server/branches/paulg_mp4/src/org/red5/server/stream/provider/FileProvider.java	 
Wed Sep 10 11:40:20 2008
@@ -217,6 +217,7 @@
       * Initializes file provider. Creates streamable file factory and  
service, seeks to start position
       */
      private void init() throws IOException {
+    	log.debug("Initialize");    	
  		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
  				.getScopeService(scope, IStreamableFileFactory.class,
  						StreamableFileFactory.class);
@@ -227,6 +228,8 @@
  		}
  		IStreamableFile streamFile = service.getStreamableFile(file);
  		reader = streamFile.getReader();
+    	log.debug("Reader: {}", reader.getClass().getName());
+    	//TODO: may want to do init of readers here
  		if (start > 0) {
  			seek(start);
  		}
@@ -244,6 +247,7 @@

  	/** {@inheritDoc} */
      public synchronized int seek(int ts) {
+    	log.debug("Seek ts: {}", ts);
  		if (keyFrameMeta == null) {
  			if (!(reader instanceof IKeyFrameDataAnalyzer)) {
  				// Seeking not supported

Modified:  
java/server/branches/paulg_mp4/webapps/oflaDemo/WEB-INF/red5-web.xml
==============================================================================
--- java/server/branches/paulg_mp4/webapps/oflaDemo/WEB-INF/red5-web.xml	 
(original)
+++ java/server/branches/paulg_mp4/webapps/oflaDemo/WEB-INF/red5-web.xml	 
Wed Sep 10 11:40:20 2008
@@ -23,7 +23,7 @@
  	</bean>

  	<bean id="web.handler"
-	    class="org.red5.server.webapp.oflaDemo.Application" />
+	    class="org.red5.demos.oflaDemo.Application" />
  <!--
  	<bean id="web.handler"  
class="org.red5.server.script.rhino.RhinoScriptFactory">
  		<constructor-arg index="0" value="classpath:applications/main.js"/>
@@ -76,7 +76,7 @@
  	</bean>
  -->
      <bean id="demoService.service"
-	    class="org.red5.server.webapp.oflaDemo.DemoService" />
+	    class="org.red5.demos.oflaDemo.DemoService" />
  <!--
  	<bean id="demoService.service"  
class="org.red5.server.script.rhino.RhinoScriptFactory">
  		<constructor-arg index="0"  
value="classpath:applications/demoservice.js"/>

Modified: java/server/branches/paulg_mp4/webapps/oflaDemo/WEB-INF/web.xml
==============================================================================
--- java/server/branches/paulg_mp4/webapps/oflaDemo/WEB-INF/web.xml	 
(original)
+++ java/server/branches/paulg_mp4/webapps/oflaDemo/WEB-INF/web.xml	Wed Sep  
10 11:40:20 2008
@@ -5,36 +5,13 @@
     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>Red5 oflaDemo Test App</display-name>
+	<display-name>oflaDemo</display-name>

  	<context-param>
-	    <param-name>globalScope</param-name>
-	    <param-value>default</param-value>
-	</context-param>
-
-	<context-param>
-	    <param-name>contextConfigLocation</param-name>
-	    <param-value>/WEB-INF/red5-*.xml</param-value>
-	</context-param>
-
-	<context-param>
-		<param-name>locatorFactorySelector</param-name>
-		<param-value>red5.xml</param-value>
-	</context-param>
-
-	<context-param>
-		<param-name>parentContextKey</param-name>
-		<param-value>default.context</param-value>
-	</context-param>
-	
-	<context-param>
  		<param-name>webAppRootKey</param-name>
  		<param-value>/oflaDemo</param-value>
  	</context-param>
  	
-	<listener>
-	     
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-	</listener>

      <security-constraint>
          <web-resource-collection>

Modified: java/server/branches/paulg_mp4/webapps/root/demos/ofla_demo.swf
==============================================================================
Binary files. No diff available.



More information about the Red5devs mailing list