示例#1
0
        private OggPage ReadPage()
        {
            byte[] pageHeaderData;
            if (stream.ReadBytes (out pageHeaderData, 27) < 27)
                return null;

            string magic = System.Text.Encoding.UTF8.GetString (pageHeaderData, 0, 4);
            if (magic != "OggS")
                return null;

            byte version = pageHeaderData[4];

            OggPageType type = (OggPageType)pageHeaderData[5];

            byte[] granule = new byte[8];
            Array.Copy (pageHeaderData, 6, granule, 0, 8);
            //Buffer.BlockCopy (pageHeaderData, 6, granule, 0, 8);

            int streamSerialNumber = BitConverter.ToInt32 (pageHeaderData, 14);
            int pageSequenceNumber = BitConverter.ToInt32 (pageHeaderData, 18);

            int checksum = BitConverter.ToInt32 (pageHeaderData, 22);

            byte segments = pageHeaderData[26];

            byte[] segmentLengths = new byte[segments];
            if (stream.ReadBytes (out segmentLengths, segments) < segments)
                return null;

            byte[][] data = new byte[segmentLengths.Length][];
            for (int i = 0; i < segmentLengths.Length; ++i)
            {
                byte len = segmentLengths[i];
                byte[] segment;
                if (stream.ReadBytes (out segment, len) != len)
                    return null;

                data[i] = segment;
            }

            OggPage page = new OggPage (streamSerialNumber, pageSequenceNumber);
            page.Type = type;
            page.Version = version;
            page.Segments = data;
            page.Granule = granule;

            return page;
        }
示例#2
0
 public void Enqueue(OggPage page)
 {
     this.lastPages.Enqueue (page);
 }
示例#3
0
 public void Enqueue(OggPage page)
 {
     this.lastPages.Enqueue(page);
 }