Class: Ogg::Page
- Inherits:
-
Object
- Object
- Ogg::Page
- Defined in:
- lib/ogg/page.rb
Instance Attribute Summary collapse
-
#bitstream_serial_no ⇒ Object
Returns the value of attribute bitstream_serial_no.
-
#checksum ⇒ Object
readonly
Returns the value of attribute checksum.
-
#granule_pos ⇒ Object
Returns the value of attribute granule_pos.
-
#header ⇒ Object
Returns the value of attribute header.
-
#segments ⇒ Object
Returns the value of attribute segments.
-
#sequence_no ⇒ Object
Returns the value of attribute sequence_no.
Class Method Summary collapse
-
.read(io, options = {}) ⇒ Object
read an ogg frame from the
filefile must be positioned at end of frame after this loop options - :skip_body = seek to end of frame rather than reading in the data.
Instance Method Summary collapse
-
#initialize(bitstream_serial_no = 0, granule_pos = 0) ⇒ Page
constructor
A new instance of Page.
- #pack ⇒ Object
Constructor Details
#initialize(bitstream_serial_no = 0, granule_pos = 0) ⇒ Page
Returns a new instance of Page.
52 53 54 55 56 57 |
# File 'lib/ogg/page.rb', line 52 def initialize(bitstream_serial_no = 0, granule_pos = 0) @bitstream_serial_no = bitstream_serial_no @granule_pos = granule_pos @segments = [] @header = 0 end |
Instance Attribute Details
#bitstream_serial_no ⇒ Object
Returns the value of attribute bitstream_serial_no.
3 4 5 |
# File 'lib/ogg/page.rb', line 3 def bitstream_serial_no @bitstream_serial_no end |
#checksum ⇒ Object (readonly)
Returns the value of attribute checksum.
4 5 6 |
# File 'lib/ogg/page.rb', line 4 def checksum @checksum end |
#granule_pos ⇒ Object
Returns the value of attribute granule_pos.
3 4 5 |
# File 'lib/ogg/page.rb', line 3 def granule_pos @granule_pos end |
#header ⇒ Object
Returns the value of attribute header.
3 4 5 |
# File 'lib/ogg/page.rb', line 3 def header @header end |
#segments ⇒ Object
Returns the value of attribute segments.
3 4 5 |
# File 'lib/ogg/page.rb', line 3 def segments @segments end |
#sequence_no ⇒ Object
Returns the value of attribute sequence_no.
3 4 5 |
# File 'lib/ogg/page.rb', line 3 def sequence_no @sequence_no end |
Class Method Details
.read(io, options = {}) ⇒ Object
read an ogg frame from the file
file must be positioned at end of frame after this loop
options - :skip_body = seek to end of frame rather than reading in the data
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/ogg/page.rb', line 9 def self.read(io, = {}) return nil if io.eof? chunk = io.read(27) capture_pattern, _, # version header, granule_pos, bitstream_serial_no, sequence_no, @checksum, segments = chunk.unpack("a4CCQVVVC") #a4CCQNNNC if capture_pattern != "OggS" raise(StreamError, "bad magic number") end page = Page.new(bitstream_serial_no, granule_pos) page.header = header page.sequence_no = sequence_no unless io.eof? segment_sizes = io.read(segments).unpack("C*") if [:skip_body] body_size = segment_sizes.inject(0) { |sum, i| sum + i } io.seek(body_size, IO::SEEK_CUR) else segment_sizes.each do |size| break if io.eof? page.segments << io.read(size) end if [:checksum] if @checksum != Ogg.compute_checksum(page.pack) raise(StreamError, "bad checksum: expected #{ @checksum }, got #{ page.checksum }") end end end end page end |
Instance Method Details
#pack ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/ogg/page.rb', line 59 def pack packed = [ "OggS", 0, #version @header, @granule_pos, @bitstream_serial_no, @sequence_no, 0, #checksum @segments.length ].pack("a4CCQVVVC") packed << @segments.collect { |segment| segment.length }.pack("C*") packed << @segments.join crc = Ogg.compute_checksum(packed) packed[22..25] = [crc].pack("V") packed end |