public void Write(MetaData meta) { MetaCue[] metaCue = meta.MetaCue; FlvReader reader = new FlvReader(this._file, false); FlvWriter writer = new FlvWriter(this._output, false); ITag tag = null; if (reader.HasMoreTags()) { tag = reader.ReadTag(); if ((tag.DataType == IOConstants.TYPE_METADATA) && !reader.HasMoreTags()) { throw new IOException("File we're writing is metadata only?"); } } meta.Duration = ((double)reader.Duration) / 1000.0; meta.VideoCodecId = reader.VideoCodecId; meta.AudioCodecId = reader.AudioCodecId; ITag tag2 = this.InjectMetaData(meta, tag); tag2.PreviousTagSize = 0; tag.PreviousTagSize = tag2.BodySize; writer.WriteHeader(); writer.WriteTag(tag2); writer.WriteTag(tag); int timeInMilliseconds = 0; int index = 0; if (metaCue != null) { Array.Sort <MetaCue>(metaCue); timeInMilliseconds = this.GetTimeInMilliseconds(metaCue[0]); } while (reader.HasMoreTags()) { tag = reader.ReadTag(); if (index < metaCue.Length) { while (tag.Timestamp > timeInMilliseconds) { tag2 = this.InjectMetaCue(metaCue[index], tag); writer.WriteTag(tag2); tag.PreviousTagSize = tag2.BodySize; index++; if (index > (metaCue.Length - 1)) { break; } timeInMilliseconds = this.GetTimeInMilliseconds(metaCue[index]); } } if (tag.DataType != IOConstants.TYPE_METADATA) { writer.WriteTag(tag); } } writer.Close(); }
public ITagWriter GetWriter() { if (this._file.Exists) { this._file.Delete(); } ITagWriter writer = new FlvWriter(this._file.Create(), false); writer.WriteHeader(); return(writer); }
public ITagWriter GetWriter() { if (_file.Exists) { _file.Delete(); } FileStream stream = _file.Create(); ITagWriter writer = new FlvWriter(stream, false); writer.WriteHeader(); return(writer); }
/// <summary> /// Initiates writing of the Metadata. /// </summary> /// <param name="meta">Metadata to write.</param> public void Write(MetaData meta) { // Get cue points, FLV reader and writer MetaCue[] metaArr = meta.MetaCue; FlvReader reader = new FlvReader(_file, false); FlvWriter writer = new FlvWriter(_output, false); ITag tag = null; // Read first tag if (reader.HasMoreTags()) { tag = reader.ReadTag(); if (tag.DataType == IOConstants.TYPE_METADATA) { if (!reader.HasMoreTags()) { throw new IOException("File we're writing is metadata only?"); } } } meta.Duration = (double)reader.Duration / 1000; meta.VideoCodecId = reader.VideoCodecId; meta.AudioCodecId = reader.AudioCodecId; ITag injectedTag = InjectMetaData(meta, tag); injectedTag.PreviousTagSize = 0; tag.PreviousTagSize = injectedTag.BodySize; writer.WriteHeader(); writer.WriteTag(injectedTag); writer.WriteTag(tag); int cuePointTimeStamp = 0; int counter = 0; if (metaArr != null) { Array.Sort(metaArr); cuePointTimeStamp = GetTimeInMilliseconds(metaArr[0]); } while (reader.HasMoreTags()) { tag = reader.ReadTag(); // if there are cuePoints in the array if (counter < metaArr.Length) { // If the tag has a greater timestamp than the // cuePointTimeStamp, then inject the tag while (tag.Timestamp > cuePointTimeStamp) { injectedTag = InjectMetaCue(metaArr[counter], tag); writer.WriteTag(injectedTag); tag.PreviousTagSize = injectedTag.BodySize; // Advance to the next CuePoint counter++; if (counter > (metaArr.Length - 1)) { break; } cuePointTimeStamp = GetTimeInMilliseconds(metaArr[counter]); } } if (tag.DataType != IOConstants.TYPE_METADATA) { writer.WriteTag(tag); } } writer.Close(); }
public ITagWriter GetWriter() { if (_file.Exists) _file.Delete(); FileStream stream = _file.Create(); ITagWriter writer = new FlvWriter(stream, false); writer.WriteHeader(); return writer; }
/// <summary> /// Initiates writing of the Metadata. /// </summary> /// <param name="meta">Metadata to write.</param> public void Write(MetaData meta) { // Get cue points, FLV reader and writer MetaCue[] metaArr = meta.MetaCue; FlvReader reader = new FlvReader(_file, false); FlvWriter writer = new FlvWriter(_output, false); ITag tag = null; // Read first tag if (reader.HasMoreTags()) { tag = reader.ReadTag(); if (tag.DataType == IOConstants.TYPE_METADATA) { if (!reader.HasMoreTags()) throw new IOException("File we're writing is metadata only?"); } } meta.Duration = (double)reader.Duration / 1000; meta.VideoCodecId = reader.VideoCodecId; meta.AudioCodecId = reader.AudioCodecId; ITag injectedTag = InjectMetaData(meta, tag); injectedTag.PreviousTagSize = 0; tag.PreviousTagSize = injectedTag.BodySize; writer.WriteHeader(); writer.WriteTag(injectedTag); writer.WriteTag(tag); int cuePointTimeStamp = 0; int counter = 0; if (metaArr != null) { Array.Sort(metaArr); cuePointTimeStamp = GetTimeInMilliseconds(metaArr[0]); } while (reader.HasMoreTags()) { tag = reader.ReadTag(); // if there are cuePoints in the array if (counter < metaArr.Length) { // If the tag has a greater timestamp than the // cuePointTimeStamp, then inject the tag while (tag.Timestamp > cuePointTimeStamp) { injectedTag = InjectMetaCue(metaArr[counter], tag); writer.WriteTag(injectedTag); tag.PreviousTagSize = injectedTag.BodySize; // Advance to the next CuePoint counter++; if (counter > (metaArr.Length - 1)) { break; } cuePointTimeStamp = GetTimeInMilliseconds(metaArr[counter]); } } if (tag.DataType != IOConstants.TYPE_METADATA) { writer.WriteTag(tag); } } writer.Close(); }