Exemple #1
0
        private void ParseMxf(Stream stream)
        {
            stream.Seek(0, SeekOrigin.Begin);
            ReadHeaderPartitionPack(stream);
            if (IsValid)
            {
                var  length = stream.Length;
                long next   = _startPosition;
                while (next + 20 < length)
                {
                    stream.Seek(next, SeekOrigin.Begin);
                    var klv = new KlvPacket(stream);

                    //Console.WriteLine();
                    //Console.WriteLine("Key: " + klv.DisplayKey);
                    //Console.WriteLine("Type: " + klv.IdentifyerType);
                    //Console.WriteLine("Total size: " + klv.TotalSize);
                    //Console.WriteLine("Data position: " + klv.DataPosition);
                    //if (klv.IdentifyerType == KeyIdentifier.PartitionPack)
                    //    Console.WriteLine("Partition status: " + klv.PartionStatus);

                    next += klv.TotalSize;

                    if (klv.IdentifierType == KeyIdentifier.EssenceElement &&
                        klv.DataSize < 500000)
                    {
                        stream.Seek(klv.DataPosition, SeekOrigin.Begin);
                        var buffer = new byte[klv.DataSize];
                        stream.Read(buffer, 0, buffer.Length);
                        string s = System.Text.Encoding.UTF8.GetString(buffer);
                        if (IsSubtitle(s))
                        {
                            _subtitleList.Add(s);
                        }
                    }
                }
            }
        }
        private void ParseMxf(Stream stream)
        {
            stream.Seek(0, SeekOrigin.Begin);
            this.ReadHeaderPartitionPack(stream);
            if (this.IsValid)
            {
                long length = stream.Length;
                long next = this._startPosition;
                while (next + 20 < length)
                {
                    stream.Seek(next, SeekOrigin.Begin);
                    KlvPacket klv = new KlvPacket(stream);

                    // Console.WriteLine();
                    // Console.WriteLine("Key: " + klv.DisplayKey);
                    // Console.WriteLine("Type: " + klv.IdentifyerType);
                    // Console.WriteLine("Total size: " + klv.TotalSize);
                    // Console.WriteLine("Data position: " + klv.DataPosition);
                    // if (klv.IdentifyerType == KeyIdentifier.PartitionPack)
                    // Console.WriteLine("Partition status: " + klv.PartionStatus);
                    next += klv.TotalSize;

                    if (klv.IdentifierType == KeyIdentifier.EssenceElement && klv.DataSize < 500000)
                    {
                        stream.Seek(klv.DataPosition, SeekOrigin.Begin);
                        byte[] buffer = new byte[klv.DataSize];
                        stream.Read(buffer, 0, buffer.Length);
                        string s = Encoding.UTF8.GetString(buffer);
                        if (this.IsSubtitle(s))
                        {
                            this._subtitleList.Add(s);
                        }
                    }
                }
            }
        }
        private void ParseMxf(Stream stream)
        {
            stream.Seek(0, SeekOrigin.Begin);
            ReadHeaderPartitionPack(stream);
            if (!IsValid)
            {
                return;
            }

            var length = stream.Length;
            long next = startPosition;
            while (next + 20 < length)
            {
                stream.Seek(next, SeekOrigin.Begin);
                var klv = new KlvPacket(stream);

                //Console.WriteLine();
                //Console.WriteLine("Key: " + klv.DisplayKey);
                //Console.WriteLine("Type: " + klv.IdentifyerType);
                //Console.WriteLine("Total size: " + klv.TotalSize);
                //Console.WriteLine("Data position: " + klv.DataPosition);
                //if (klv.IdentifyerType == KeyIdentifier.PartitionPack)
                //    Console.WriteLine("Partition status: " + klv.PartionStatus);

                next += klv.TotalSize;

                if (klv.IdentifierType != KeyIdentifier.EssenceElement || klv.DataSize >= 500000)
                {
                    continue;
                }

                stream.Seek(klv.DataPosition, SeekOrigin.Begin);
                var buffer = new byte[klv.DataSize];
                stream.Read(buffer, 0, buffer.Length);
                string s = System.Text.Encoding.UTF8.GetString(buffer);
                if (IsSubtitle(s))
                {
                    subtitleList.Add(s);
                }
            }
        }