[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