func (r *Reader) parseClusters(elmts *ebml.Element) { var err error for err == nil { var c Cluster var e *ebml.Element e, err = elmts.Next() if err == nil { err = e.Unmarshal(&c) } if err != nil && err.Error() == "Reached payload" { r.index.append(seekEntry{time.Millisecond * time.Duration(c.Timecode), e.Offset}) r.sendCluster(err.(ebml.ReachedPayloadError).Element, time.Millisecond*time.Duration(c.Timecode)) err = nil } seek := BadTC for len(r.seek) != 0 { seek = <-r.seek } if err == io.EOF { var eofpkt Packet eofpkt.Timecode = BadTC r.send(&eofpkt) seek = <-r.seek if seek != BadTC { err = nil } } if seek != BadTC { entry := r.index.search(seek) elmts.Seek(entry.offset, 0) var seekpkt Packet seekpkt.Timecode = seek r.send(&seekpkt) } if seek == shutdown { err = io.EOF } } close(r.Chan) }