Пример #1
0
		public Flv(FileInfo file, bool generateMetadata) {
			_file = file;
			_generateMetadata = generateMetadata;
			int count = 0;

			if (!_generateMetadata) {
				try {
					FlvReader reader = new FlvReader(_file);
					ITag tag = null;
					while (reader.HasMoreTags() && (++count < 5)) {
						tag = reader.ReadTag();
						if (tag.DataType == IOConstants.TYPE_METADATA) {
							if (_metaService == null)
								_metaService = new MetaService(_file);
							_metaData = _metaService.ReadMetaData(tag.Body);
						}
					}
					reader.Close();
				} catch (Exception ex) {
#if !SILVERLIGHT
					log.Error("An error occured looking for metadata:", ex);
#endif
				}
			}
		}
Пример #2
0
        public void ReadTag_WhenStateIsBeforeBackpointer_ThrowsInvalidOperationException()
        {
            // Arrange
            _flvReader = _flvReaderObjectMother.CreateFlvReaderWithBackpointer();

            // Act and assert.
            Assert.Throws <InvalidOperationException>(() => _flvReader.ReadTag());
        }
Пример #3
0
        public void ReadTag_WhenStateIsBeforeTag_ReturnsTag()
        {
            // Arrange
            _flvReader = _flvReaderObjectMother.CreateFlvReaderWithTag();

            // Act
            var tag = _flvReader.ReadTag();

            // Assert
            Assert.NotNull(tag);
        }
Пример #4
0
        public void ReadTag_ReachedEndOfStream_ReturnsNull()
        {
            // Arrange
            _flvReader = _flvReaderObjectMother.CreateEmptyFlvReader();
            _flvReader.MoveToBeforeTagState();

            // Act
            var tag = _flvReader.ReadTag();

            // Assert
            Assert.Null(tag);
        }
Пример #5
0
		/// <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();
		}
Пример #6
0
        public void ReadTag_WhenStateIsBeforeTag_ReturnsTag()
        {
            // Arrange
            _flvReader = _flvReaderObjectMother.CreateFlvReaderWithTag();

            // Act
            var tag = _flvReader.ReadTag();

            // Assert
            Assert.NotNull(tag);
        }
Пример #7
0
        public void ReadTag_WhenStateIsBeforeHeader_ThrowsInvalidOperationException()
        {
            // Arrange
            _flvReader = _flvReaderObjectMother.CreateFlvReaderWithHeader();

            // Act and assert.
            Assert.Throws<InvalidOperationException>(() => _flvReader.ReadTag());
        }
Пример #8
0
        public void ReadTag_ReachedEndOfStream_ReturnsNull()
        {
            // Arrange
            _flvReader = _flvReaderObjectMother.CreateEmptyFlvReader();
            _flvReader.MoveToBeforeTagState();

            // Act
            var tag = _flvReader.ReadTag();

            // Assert
            Assert.Null(tag);
        }