[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&confs=java6%2Ceclipse&ivySettingsPath=&acceptedTypes=jar&sourceTypes=source&javadocTypes=javadoc&sourceSuffixes=-source%2C-sources%2C-src&javadocSuffixes=-javadoc%2C-javadocs%2C-doc%2C-docs&doRetrieve=true&retrievePattern=lib%2F%5Bartifact%5D-%5Brevision%5D.%5Bext%5D&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