httpflv

package
v0.23.0 Latest Latest
Warning

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

Go to latest
Published: Jun 6, 2021 License: MIT Imports: 12 Imported by: 10

Documentation

Index

Constants

View Source
const (
	TagHeaderSize        int = 11
	PrevTagSizeFieldSize int = 4
)
View Source
const (
	TagTypeMetadata uint8 = 18
	TagTypeVideo    uint8 = 9
	TagTypeAudio    uint8 = 8
)
View Source
const (
	AvcKeyFrame   = frameTypeKey<<4 | codecIdAvc
	AvcInterFrame = frameTypeInter<<4 | codecIdAvc

	HevcKeyFrame   = frameTypeKey<<4 | codecIdHevc
	HevcInterFrame = frameTypeInter<<4 | codecIdHevc
)
View Source
const (
	AvcPacketTypeSeqHeader uint8 = 0
	AvcPacketTypeNalu      uint8 = 1

	HevcPacketTypeSeqHeader uint8 = 0
	HevcPacketTypeNalu      uint8 = 1

	AacPacketTypeSeqHeader uint8 = 0
	AacPacketTypeRaw       uint8 = 1
)
View Source
const (
	SoundFormatAac uint8 = 10
)

Variables

View Source
var (
	SubSessionWriteChanSize  = 1024 // SubSession发送数据时channel的大小
	SubSessionWriteTimeoutMs = 10000
	FlvHeader                = []byte{0x46, 0x4c, 0x56, 0x01, 0x05, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00}
)
View Source
var ErrHttpflv = errors.New("lal.httpflv: fxxk")

Functions

func PackHttpflvTag added in v0.23.0

func PackHttpflvTag(t uint8, timestamp uint32, in []byte) []byte

打包一个序列化后的 tag 二进制buffer,包含 tag header,body,prev tag size

Types

type FlvFileReader

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

func (*FlvFileReader) Dispose

func (ffr *FlvFileReader) Dispose()

func (*FlvFileReader) Open

func (ffr *FlvFileReader) Open(filename string) (err error)

func (*FlvFileReader) ReadFlvHeader

func (ffr *FlvFileReader) ReadFlvHeader() ([]byte, error)

func (*FlvFileReader) ReadTag

func (ffr *FlvFileReader) ReadTag() (Tag, error)

type FlvFileWriter

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

func (*FlvFileWriter) Dispose

func (ffw *FlvFileWriter) Dispose() error

func (*FlvFileWriter) Name added in v0.23.0

func (ffw *FlvFileWriter) Name() string

func (*FlvFileWriter) Open

func (ffw *FlvFileWriter) Open(filename string) (err error)

func (*FlvFileWriter) WriteFlvHeader added in v0.23.0

func (ffw *FlvFileWriter) WriteFlvHeader() (err error)

func (*FlvFileWriter) WriteRaw

func (ffw *FlvFileWriter) WriteRaw(b []byte) (err error)

func (*FlvFileWriter) WriteTag

func (ffw *FlvFileWriter) WriteTag(tag Tag) (err error)

type ModPullSessionOption added in v0.5.0

type ModPullSessionOption func(option *PullSessionOption)

type OnReadFlvTag added in v0.23.0

type OnReadFlvTag func(tag Tag)

@param tag: 底层保证回调上来的Raw数据长度是完整的(但是不会分析Raw内部的编码数据)

type PullSession

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

func NewPullSession

func NewPullSession(modOptions ...ModPullSessionOption) *PullSession

func (*PullSession) AppName added in v0.18.0

func (session *PullSession) AppName() string

文档请参考: interface ISessionUrlContext

func (*PullSession) Dispose

func (session *PullSession) Dispose() error

文档请参考: interface IClientSessionLifecycle

func (*PullSession) GetStat added in v0.18.0

func (session *PullSession) GetStat() base.StatSession

文档请参考: interface ISessionStat

func (*PullSession) IsAlive added in v0.18.0

func (session *PullSession) IsAlive() (readAlive, writeAlive bool)

文档请参考: interface ISessionStat

func (*PullSession) Pull

func (session *PullSession) Pull(rawUrl string, onReadFlvTag OnReadFlvTag) error

阻塞直到和对端完成拉流前,握手部分的工作(也即发送完HTTP Request),或者发生错误

@param rawUrl 支持如下两种格式。(当然,关键点是对端支持)

http://{domain}/{app_name}/{stream_name}.flv
http://{ip}/{domain}/{app_name}/{stream_name}.flv

@param onReadFlvTag 读取到 flv tag 数据时回调。回调结束后,PullSession 不会再使用这块 <tag> 数据。

func (*PullSession) RawQuery added in v0.18.0

func (session *PullSession) RawQuery() string

文档请参考: interface ISessionUrlContext

func (*PullSession) StreamName added in v0.18.0

func (session *PullSession) StreamName() string

文档请参考: interface ISessionUrlContext

func (*PullSession) UniqueKey

func (session *PullSession) UniqueKey() string

文档请参考: interface IObject

func (*PullSession) UpdateStat added in v0.18.0

func (session *PullSession) UpdateStat(intervalSec uint32)

文档请参考: interface ISessionStat

func (*PullSession) Url added in v0.23.0

func (session *PullSession) Url() string

文档请参考: interface ISessionUrlContext

func (*PullSession) WaitChan added in v0.20.0

func (session *PullSession) WaitChan() <-chan error

文档请参考: interface IClientSessionLifecycle

type PullSessionOption added in v0.5.0

type PullSessionOption struct {
	// 从调用Pull函数,到接收音视频数据的前一步,也即发送完HTTP请求的超时时间
	// 如果为0,则没有超时时间
	PullTimeoutMs int

	ReadTimeoutMs int // 接收数据超时,单位毫秒,如果为0,则不设置超时
}

type SubSession

type SubSession struct {
	*base.HttpSubSession    // 直接使用它提供的函数
	IsFresh                 bool
	ShouldWaitVideoKeyFrame bool
}

func NewSubSession

func NewSubSession(conn net.Conn, urlCtx base.UrlContext, isWebSocket bool, websocketKey string) *SubSession

func (*SubSession) Dispose

func (session *SubSession) Dispose() error

func (*SubSession) WriteFlvHeader

func (session *SubSession) WriteFlvHeader()

func (*SubSession) WriteHttpResponseHeader added in v0.23.0

func (session *SubSession) WriteHttpResponseHeader()

func (*SubSession) WriteTag

func (session *SubSession) WriteTag(tag *Tag)

type Tag

type Tag struct {
	Header TagHeader
	Raw    []byte // 结构为 (11字节的 tag header) + (body) + (4字节的 prev tag size)
}

func ReadAllTagsFromFlvFile added in v0.23.0

func ReadAllTagsFromFlvFile(filename string) ([]Tag, error)

func (*Tag) IsAacSeqHeader added in v0.23.0

func (tag *Tag) IsAacSeqHeader() bool

func (*Tag) IsAvc added in v0.23.0

func (tag *Tag) IsAvc() bool

func (*Tag) IsAvcKeyNalu added in v0.23.0

func (tag *Tag) IsAvcKeyNalu() bool

func (*Tag) IsAvcKeySeqHeader added in v0.23.0

func (tag *Tag) IsAvcKeySeqHeader() bool

func (*Tag) IsHevc added in v0.23.0

func (tag *Tag) IsHevc() bool

func (*Tag) IsHevcKeyNalu added in v0.23.0

func (tag *Tag) IsHevcKeyNalu() bool

func (*Tag) IsHevcKeySeqHeader added in v0.23.0

func (tag *Tag) IsHevcKeySeqHeader() bool

func (*Tag) IsMetadata

func (tag *Tag) IsMetadata() bool

func (*Tag) IsVideoKeyNalu added in v0.8.0

func (tag *Tag) IsVideoKeyNalu() bool

AVC或HEVC的关键帧

func (*Tag) IsVideoKeySeqHeader added in v0.8.0

func (tag *Tag) IsVideoKeySeqHeader() bool

AVC或HEVC的seq header

func (*Tag) ModTagTimestamp added in v0.5.0

func (tag *Tag) ModTagTimestamp(timestamp uint32)

func (*Tag) Payload

func (tag *Tag) Payload() []byte

type TagHeader

type TagHeader struct {
	Type      uint8  // type
	DataSize  uint32 // body大小,不包含 header 和 prev tag size 字段
	Timestamp uint32 // 绝对时间戳,单位毫秒
	StreamId  uint32 // always 0
}

Jump to

Keyboard shortcuts

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