[Red5commits] [583] daccattato
luke@codegent.com
luke at codegent.com
Wed Mar 22 08:30:06 EST 2006
Working on MetaData? API
Working on CuePoint? API
Building tests
Timestamp: 03/22/06 23:12:38 (less than one hour ago)
Change: 583
Author: daccattato
Files (see diff or trac for details):
java/io/trunk/src/org/red5/io/flv/meta/IMetaData.java
java/io/trunk/src/org/red5/io/flv/meta/IMetaService.java
java/io/trunk/src/org/red5/io/flv/meta/IResolver.java
java/io/trunk/src/org/red5/io/flv/meta/MetaData.java
java/io/trunk/src/org/red5/io/flv/meta/MetaService.java
java/io/trunk/src/org/red5/io/flv/meta/Resolver.java
Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/583
Index: /java/io/trunk/src/org/red5/io/flv/meta/IMetaService.java
===================================================================
--- /java/io/trunk/src/org/red5/io/flv/meta/IMetaService.java (revision 582)
+++ /java/io/trunk/src/org/red5/io/flv/meta/IMetaService.java (revision 583)
@@ -3,4 +3,5 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.IOException;
import org.apache.mina.common.ByteBuffer;
@@ -57,6 +58,7 @@
* @param meta
* @return void
+ * @throws IOException
*/
- public void write(IMetaData meta);
+ public void write(IMetaData meta) throws IOException;
/**
Index: /java/io/trunk/src/org/red5/io/flv/meta/MetaData.java
===================================================================
--- /java/io/trunk/src/org/red5/io/flv/meta/MetaData.java (revision 581)
+++ /java/io/trunk/src/org/red5/io/flv/meta/MetaData.java (revision 583)
@@ -26,5 +26,9 @@
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
@@ -173,15 +177,49 @@
/**
- * @return Returns the cuePoints.
- */
- public IMetaCue[] getCuePoints() {
- return cuePoints;
- }
-
- /**
+ * Sets the MetaCue Points
* @param cuePoints The cuePoints to set.
*/
- public void setCuePoints(IMetaCue[] cuePoints) {
+ public void setMetaCue(IMetaCue[] cuePoints) {
this.cuePoints = cuePoints;
+
+ MetaCue cuePointData = new MetaCue();
+
+ // Place in TreeSet for sorting
+ TreeSet ts = new TreeSet();
+
+ for(int i=0; i<cuePoints.length; i++) {
+ ts.add(cuePoints[i]);
+ }
+
+ int j = 0;
+ while(!ts.isEmpty()) {
+ cuePointData.put(""+j+"", ts.first());
+ ts.remove(ts.first());
+ }
+
+// "CuePoints", cuePointData
+// "0", MetaCue
+// name, "test"
+// type, "event"
+// time, "0.1"
+// "1", MetaCue
+// name, "test1"
+// type, "event1"
+// time, "0.5"
+
+ this.put("CuePoints", cuePointData);
+
+ }
+
+ /**
+ * Return array of MetaCue
+ * @return IMetaCue[] metaCue
+ */
+ public IMetaCue[] getMetaCue() {
+
+ MetaCue cue = (MetaCue) this.get("CuePoints");
+ Set s = cue.entrySet();
+
+ return (IMetaCue[]) s.toArray();
}
Index: /java/io/trunk/src/org/red5/io/flv/meta/Resolver.java
===================================================================
--- /java/io/trunk/src/org/red5/io/flv/meta/Resolver.java (revision 583)
+++ /java/io/trunk/src/org/red5/io/flv/meta/Resolver.java (revision 583)
@@ -0,0 +1,37 @@
+/**
+ *
+ */
+package org.red5.io.flv.meta;
+
+/**
+ * @author The Red5 Project (red5 at osflash.org)
+ * @author daccattato(daccattato at gmail.com)
+ * @version 0.3
+ */
+public class Resolver implements IResolver {
+
+ /**
+ *
+ */
+ public Resolver() {
+ super();
+ // TODO Auto-generated constructor stub
+ }
+
+ /* (non-Javadoc)
+ * @see org.red5.io.flv.meta.IResolver#resolve(org.red5.io.flv.meta.IMeta, org.red5.io.flv.meta.IMeta)
+ */
+ public IMeta resolve(IMeta m1, IMeta m2) {
+ // TODO Auto-generated method stub
+ return m2;
+ }
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Index: /java/io/trunk/src/org/red5/io/flv/meta/MetaService.java
===================================================================
--- /java/io/trunk/src/org/red5/io/flv/meta/MetaService.java (revision 582)
+++ /java/io/trunk/src/org/red5/io/flv/meta/MetaService.java (revision 583)
@@ -61,5 +61,20 @@
private Serializer serializer;
private Deserializer deserializer;
-
+ private Resolver resolver;
+
+ /**
+ * @return Returns the resolver.
+ */
+ public Resolver getResolver() {
+ return resolver;
+ }
+
+ /**
+ * @param resolver The resolver to set.
+ */
+ public void setResolver(Resolver resolver) {
+ this.resolver = resolver;
+ }
+
/**
* @return Returns the deserializer.
@@ -104,25 +119,75 @@
* @see org.red5.io.flv.meta.IMetaService#write()
*/
- public void write(IMetaData meta) {
-
- FileChannel channel = fos.getChannel();
- try {
- mappedFile = channel.map(FileChannel.MapMode.PRIVATE, 0, channel.size());
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- out = ByteBuffer.wrap(mappedFile);
-
+ public void write(IMetaData meta) throws IOException {
+ // This will all be done before hand
+ IMetaCue metaCue[] = new MetaCue[2];
+
+ IMetaCue cp = new MetaCue();
+ cp.setName("cue_1");
+ cp.setTime(0.01);
+ cp.setType(ICueType.EVENT);
+
+ IMetaCue cp1 = new MetaCue();
+ cp1.setName("cue_1");
+ cp1.setTime(2.01);
+ cp1.setType(ICueType.EVENT);
+
+ // add cuepoints to array
+ metaCue[0] = cp;
+ metaCue[1] = cp1;
+
+ MetaData md = new MetaData();
+ md.setMetaCue(metaCue);
+
+ //this will happen here
+ MetaCue[] metaArr = (MetaCue[]) md.getMetaCue();
+
Reader reader = new Reader(fis);
+ Writer writer = new Writer(fos);
+ writer.writeHeader();
+
IMetaData metaData = null;
-
+ ITag tag = null;
// Read first tag
if(reader.hasMoreTags()) {
- ITag tag = reader.readTag();
+ tag = reader.readTag();
if(tag.getDataType() == ITag.TYPE_METADATA) {
metaData = this.readMetaData(tag.getBody());
}
+ }
+
+ IMeta mergedMeta = mergeMeta(metaData, md);
+ ITag injectedTag = injectMetaData(mergedMeta, tag);
+ writer.writeTag(injectedTag);
+
+ int cuePointTimeStamp = getTimeInMilliseconds(metaArr[0]);
+ int counter = 0;
+ while(reader.hasMoreTags()) {
+ tag = reader.readTag();
+
+ // if there are cuePoints in the TreeSet
+ if(counter < metaArr.length) {
+
+ // If the tag has a greater timestamp than the
+ // cuePointTimeStamp, then inject the tag
+ while(tag.getTimestamp() > cuePointTimeStamp) {
+
+ injectedTag = (ITag) injectMetaData(metaArr[0], tag);
+ writer.writeTag(injectedTag);
+ tag.setPreviousTagSize((injectedTag.getBodySize() + 11));
+
+ // Advance to the next CuePoint
+ counter++;
+
+// if(ts.isEmpty()) {
+// break;
+// }
+
+ cuePointTimeStamp = getTimeInMilliseconds(metaArr[counter]);
+ }
+ }
+
+ writer.writeTag(tag);
+
}
@@ -140,80 +205,14 @@
}
-
-
- public void write2(IMetaData meta) throws IOException {
-
- IMetaCue cp = new MetaCue();
- cp.setName("cue_1");
- cp.setTime(0.01);
- cp.setType(ICueType.EVENT);
-
- IMetaCue cp1 = new MetaCue();
- cp1.setName("cue_1");
- cp1.setTime(2.01);
- cp1.setType(ICueType.EVENT);
-
- // Place in TreeSet for sorting
- TreeSet ts = new TreeSet();
- ts.add(cp);
- ts.add(cp1);
-
-// FileChannel channel = fos.getChannel();
-// try {
-// mappedFile = channel.map(FileChannel.MapMode.PRIVATE, 0, channel.size());
-// } catch (IOException e) {
-// // TODO Auto-generated catch block
-// e.printStackTrace();
-// }
-//
-// out = ByteBuffer.wrap(mappedFile);
-
- Reader reader = new Reader(fis);
- Writer writer = new Writer(fos);
-
- IMetaData metaData = null;
-
- int cuePointTimeStamp = getTimeInMilliseconds(ts.first());
-
- ITag tag = null;
- ITag injectedTag = null;
-
-
- while(reader.hasMoreTags()) {
- tag = reader.readTag();
- writer.writeHeader();
-
- if(tag.getDataType() != Tag.TYPE_METADATA) {
- metaData = this.readMetaData(tag.getBody());
-
- }
-
- // if there are cuePoints in the TreeSet
- if(!ts.isEmpty()) {
-
- // If the tag has a greater timestamp than the
- // cuePointTimeStamp, then inject the tag
- while(tag.getTimestamp() > cuePointTimeStamp) {
-
- injectedTag = (ITag) injectMetaData(ts.first(), tag);
- writer.writeTag(injectedTag);
- tag.setPreviousTagSize((injectedTag.getBodySize() + 11));
-
- // Advance to the next CuePoint
- ts.remove(ts.first());
-
- if(ts.isEmpty()) {
- break;
- }
-
- cuePointTimeStamp = getTimeInMilliseconds(ts.first());
- }
- }
-
- writer.writeTag(tag);
-
- }
- }
-
+ /**
+ * Merges the two Meta objects according to user
+ * @param metaData
+ * @param md
+ * @return
+ */
+ private IMeta mergeMeta(IMetaData metaData, MetaData md) {
+ return resolver.resolve(metaData, md);
+ }
+
/**
* Injects metadata (Cue Points) into a tag
@@ -223,11 +222,11 @@
* @return ITag tag
*/
- private ITag injectMetaData(Object cue, ITag tag) {
-
- IMetaCue cp = (MetaCue) cue;
+ private ITag injectMetaData(IMeta meta, ITag tag) {
+
+// IMeta meta = (MetaCue) cue;
Output out = new Output(ByteBuffer.allocate(1000));
Serializer ser = new Serializer();
ser.serialize(out,"onCuePoint");
- ser.serialize(out,cp);
+ ser.serialize(out,meta);
ByteBuffer tmpBody = out.buf().flip();
@@ -235,5 +234,5 @@
int tmpPreviousTagSize = tag.getPreviousTagSize();
byte tmpDataType = ((byte)(ITag.TYPE_METADATA));
- int tmpTimestamp = getTimeInMilliseconds(cp);
+ int tmpTimestamp = getTimeInMilliseconds(meta);
return new Tag(tmpDataType, tmpTimestamp, tmpBodySize, tmpBody, tmpPreviousTagSize);
@@ -276,5 +275,10 @@
public static void main(String[] args) {
MetaService service = new MetaService();
- service.write(new MetaData());
+ try {
+ service.write(new MetaData());
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
Index: /java/io/trunk/src/org/red5/io/flv/meta/IMetaData.java
===================================================================
--- /java/io/trunk/src/org/red5/io/flv/meta/IMetaData.java (revision 581)
+++ /java/io/trunk/src/org/red5/io/flv/meta/IMetaData.java (revision 583)
@@ -133,3 +133,14 @@
public void setDuration(double d);
+ /**
+ * Sets the cue points
+ * @param metaCue
+ */
+ public void setMetaCue(IMetaCue[] metaCue);
+
+ /**
+ * Gets the cue points
+ * @return IMetaCue[]
+ */
+ public IMetaCue[] getMetaCue();
}
Index: /java/io/trunk/src/org/red5/io/flv/meta/IResolver.java
===================================================================
--- /java/io/trunk/src/org/red5/io/flv/meta/IResolver.java (revision 583)
+++ /java/io/trunk/src/org/red5/io/flv/meta/IResolver.java (revision 583)
@@ -0,0 +1,20 @@
+/**
+ *
+ */
+package org.red5.io.flv.meta;
+
+/**
+ * @author The Red5 Project (red5 at osflash.org)
+ * @author daccattato(daccattato at gmail.com)
+ * @version 0.3
+ */
+public interface IResolver {
+
+ /**
+ * Merges the two Meta objects
+ * @param m1
+ * @param m2
+ * @return IMeta Meta
+ */
+ public IMeta resolve(IMeta m1, IMeta m2);
+}
More information about the Red5commits
mailing list