slice

package
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 10, 2025 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultPktCount 默认bufqueue缓存pkt个数
	DefaultPktCount     = 10000 //10MB
	DefaultCacheTimeMax = 20000 //20s
)
View Source
const (
	SLICE_TYPE_FLV_HEADER  = 0
	SLICE_TYPE_SCRIPT_DATA = 1
	SLICE_TYPE_AUDIO       = 2
	SLICE_TYPE_VIDEO       = 3
)

切片类型: (00 flv header;01 script data;02 audio;03 video)

View Source
const (
	SLICE_FRAME_TYPE_AUDIO = 0
	SLICE_FRAME_TYPE_IDR   = 1
	SLICE_FRAME_TYPE_REF   = 2
	SLICE_FRAME_TYPE_NOREF = 3
)

帧类型: 00 非视频帧,音频或头部,01 IDR;02 有参考性帧;03无参考性帧;

View Source
const (
	SLICE_POSFLAG_MIDDLE   = 0
	SLICE_POSFLAG_START    = 1
	SLICE_POSFLAG_END      = 2
	SLICE_POSFLAG_STARTEND = 3
)

当前切片在当前数据段的位 置,一共两个bits,最后一 个 bit=1 代表起始,第一个 bit=1 代表结束 (eg: 00 中间; 01 起始非结束;10: 结束非起始;11 起始且结束)

View Source
const (
	SLICE_ID_AVC_HEADER = 1
	SLICE_ID_AAC_HEADER = 2
)

flv header 切片ID

View Source
const KSliceDefaultSizeMax = 1280
View Source
const KSliceExtendFlag = 0
View Source
const KSliceExtendHeaderLen = 2
View Source
const (
	KSliceExtendKeyTimeStamp = 1
)

extend key define

View Source
const KSliceHeaderSize = 15
View Source
const KSliceSizeThreshold = 3 << 10

Variables

This section is empty.

Functions

This section is empty.

Types

type Buf

type Buf struct {
	Head, Tail BufPos

	Size  int
	Count int
	// contains filtered or unexported fields
}

func NewBuf

func NewBuf() *Buf

func (*Buf) Get

func (self *Buf) Get(pos BufPos) Packet

func (*Buf) IsValidPos

func (self *Buf) IsValidPos(pos BufPos) bool

func (*Buf) Pop

func (self *Buf) Pop() Packet

func (*Buf) Push

func (self *Buf) Push(pkt Packet)

type BufPos

type BufPos int

func (BufPos) GE

func (self BufPos) GE(pos BufPos) bool

func (BufPos) GT

func (self BufPos) GT(pos BufPos) bool

func (BufPos) LT

func (self BufPos) LT(pos BufPos) bool

type DataSliceInfo

type DataSliceInfo struct {
	SliceId      uint64 // slice id
	FrameId      uint32 // frame id
	SliceSizeMax int
}

func NewDataSliceInfo

func NewDataSliceInfo() *DataSliceInfo

func (*DataSliceInfo) GenerateSlice

func (s *DataSliceInfo) GenerateSlice(data []byte, avPkt *av.Packet) []Packet

func (DataSliceInfo) SetSliceSizeMax

func (s DataSliceInfo) SetSliceSizeMax(sliceSizeMax int)

type DemuxCloser

type DemuxCloser interface {
	Demuxer
	Close() error
}

DemuxCloser Demuxer with Close() method

type Demuxer

type Demuxer interface {
	PacketReader                // read slice packets
	Headers() ([]Packet, error) // reads the file header, contains flv header infomations
}

type Extend

type Extend map[uint8]uint32

func NewExtend

func NewExtend() Extend

func (Extend) Decode

func (e Extend) Decode(data []byte) error

func (Extend) Encode

func (e Extend) Encode() []byte
type Header struct {
	Datas   []Packet
	BeginAt BufPos
}

Header header info of stream

type MuxCloser

type MuxCloser interface {
	Muxer
	Close() error
}

MuxCloser Muxer with Close() method

type Muxer

type Muxer interface {
	WriteHeader(pkt []Packet) error // write the file header
	PacketWriter                    // write slice packets
	WriteTrailer() error            // finish writing file, this func can be called only once
}

type Option

type Option func(*Options)

func WithAfterReadSliceHeaders

func WithAfterReadSliceHeaders(f func([]Packet) error) Option

func WithAfterReadSlicePacket

func WithAfterReadSlicePacket(f func(*Packet) error) Option

func WithAfterWriteSliceHeaders

func WithAfterWriteSliceHeaders(f func([]Packet) error) Option

func WithAfterWriteSlicePacket

func WithAfterWriteSlicePacket(f func(*Packet) error) Option

func WithConnectedTimestamp

func WithConnectedTimestamp(t time.Time) Option

WithConnectedTimestamp 设置Options的ConnectedTimestamp选项

func WithHandlerName

func WithHandlerName(name string) Option

WithHandlerName 设置Options的HandlerName选项

func WithSID

func WithSID(id string) Option

WithSID 设置Options的sid选项

type Options

type Options struct {
	SID                    string
	HandlerName            string
	ConnectedTimestamp     time.Time
	AfterReadSlicePacket   func(*Packet) error
	AfterWriteSlicePacket  func(*Packet) error
	AfterReadSliceHeaders  func([]Packet) error
	AfterWriteSliceHeaders func([]Packet) error
}

type Packet

type Packet struct {
	Size       uint16 // slice size
	SliceType  uint8  // slice type
	SliceId    uint64 // slice id
	FrameId    uint32 // frame id
	PosFlag    uint8
	FrameType  uint8
	Reserved   uint8
	ExtendFlag uint8
	Extend     Extend
	Data       []byte // slice data

	// no encode, for p2p quickOffset
	FrameDts      int32 // frame dts
	HeaderBeginAt int   // header pos in queue
	HeaderChanged bool  // indicates if the sps/pps info changed
}

Packet 切片数据包结构 |SliceLen|SliceType|SliceSeq|FrameId|posFlag|frameType|reserved|extended|data | |UB12 |UB4 |Uint64 |Uint32 |UB2 |UB2 |UB3 |UB1 |string|

func GenerateHeaderSlice

func GenerateHeaderSlice(data []byte, tag flvio.Tag) Packet

func ParseSliceHeader

func ParseSliceHeader(data []byte) (pkt Packet, len uint16, err error)

func (*Packet) IsHeader

func (p *Packet) IsHeader() bool

type PacketReader

type PacketReader interface {
	ReadPacket() (Packet, error)
}

type PacketWriter

type PacketWriter interface {
	WritePacket(Packet) error
}

type Queue

type Queue struct {
	// contains filtered or unexported fields
}

Queue buffer queue

func NewQueue

func NewQueue() *Queue

NewQueue new a queue

func (*Queue) Close

func (q *Queue) Close() (err error)

Close After Close() called, all QueueCursor's ReadPacket will return io.EOF.

func (*Queue) CursorBySliceReq

func (q *Queue) CursorBySliceReq(id, sid string, sliceStartId uint64, sliceSubstreamId []uint8, sliceStreamBase uint8) *QueueCursor

CursorBySliceReq 按切片请求参数,找到对应的位置

func (*Queue) GetBySliceID

func (q *Queue) GetBySliceID(sliceID uint64) (Packet, error)

GetBySliceID for slice range

func (*Queue) GetPktCount

func (q *Queue) GetPktCount() int

GetPktCount

func (*Queue) IsClosed

func (q *Queue) IsClosed() bool

func (*Queue) SetMaxCacheTime

func (q *Queue) SetMaxCacheTime(n int)

SetMaxCacheTime setMaxCacheTime

func (*Queue) SetMaxPktCount

func (q *Queue) SetMaxPktCount(n int)

SetMaxPktCount set MaxPktCount

func (*Queue) SetSID

func (q *Queue) SetSID(id string)

SetSID 设置流ID

func (*Queue) Stat

func (q *Queue) Stat() *Stat

func (*Queue) WriteHeader

func (q *Queue) WriteHeader(datas []Packet) error

func (*Queue) WritePacket

func (q *Queue) WritePacket(pkt Packet) error

WritePacket Put packet into buffer, old packets will be discared.

func (*Queue) WriteTrailer

func (q *Queue) WriteTrailer() error

WriteTrailer write trailer

type QueueCursor

type QueueCursor struct {

	// P2P quickTime req
	TimeOffset int

	// slice req
	SliceStartId     uint64
	SliceSubstreamId []uint8
	SliceStreamBase  uint8
	// contains filtered or unexported fields
}

QueueCursor Cursor of queue

func (*QueueCursor) Close

func (qc *QueueCursor) Close() error

func (*QueueCursor) Format

func (qc *QueueCursor) Format() string

func (*QueueCursor) Headers

func (q *QueueCursor) Headers() (cdata []Packet, err error)

Headers 返回队列中缓存的音视频header

func (*QueueCursor) IsReqSubStreamId

func (q *QueueCursor) IsReqSubStreamId(sliceId uint64) bool

func (*QueueCursor) ReadPacket

func (q *QueueCursor) ReadPacket() (pkt Packet, err error)

ReadPacket will not consume packets in Queue, it's just a cursor.

func (*QueueCursor) SetTimeOffset

func (q *QueueCursor) SetTimeOffset(timeOffset int)

type Stat

type Stat struct {
	PktCount     uint32 `json:"pkt_count"`
	GopCount     uint32 `json:"gop_count"`
	PktDuration  int32  `json:"pkt_duration"`
	LossPktCount uint32 `json:"loss_pkt_count"`
	HeadPos      int    `json:"head_pos"`
	TailPos      int    `json:"tail_pos"`
	Closed       bool   `json:"closed"`
	MaxSliceId   uint64 `json:"max_slice_id"`
}

Stat ...

type Transport

type Transport struct {
	// contains filtered or unexported fields
}

Transport 从高层次封装了slice传输

func NewTransport

func NewTransport(opt ...Option) *Transport

NewTransport 创建Transport实例

func (*Transport) CopyHeaders

func (t *Transport) CopyHeaders(ctx context.Context, dst Muxer, src Demuxer) (err error)

CopyHeaders ...

func (*Transport) CopyPackets

func (t *Transport) CopyPackets(ctx context.Context, dst Muxer, src Demuxer) (err error)

CopyPackets ...

func (*Transport) CopySlice

func (t *Transport) CopySlice(ctx context.Context, dst Muxer, src Demuxer) error

CopyAV ...

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL