Ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows to read, publish, proxy, record and playback video and audio streams.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

47 lines
1023 B

package chunk
import (
"io"
)
// Chunk2 is a type 2 chunk.
// Neither the stream ID nor the
// message length is included; this chunk has the same stream ID and
// message length as the preceding chunk.
type Chunk2 struct {
ChunkStreamID byte
TimestampDelta uint32
Body []byte
}
// Read reads the chunk.
func (c *Chunk2) Read(r io.Reader, chunkBodyLen int) error {
header := make([]byte, 4)
_, err := r.Read(header)
if err != nil {
return err
}
c.ChunkStreamID = header[0] & 0x3F
c.TimestampDelta = uint32(header[1])<<16 | uint32(header[2])<<8 | uint32(header[3])
c.Body = make([]byte, chunkBodyLen)
_, err = r.Read(c.Body)
return err
}
// Write writes the chunk.
func (c Chunk2) Write(w io.Writer) error {
header := make([]byte, 4)
header[0] = 1<<6 | c.ChunkStreamID
header[1] = byte(c.TimestampDelta >> 16)
header[2] = byte(c.TimestampDelta >> 8)
header[3] = byte(c.TimestampDelta)
_, err := w.Write(header)
if err != nil {
return err
}
_, err = w.Write(c.Body)
return err
}