httpflv

package
v0.24.28 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2021 License: MIT Imports: 14 Imported by: 0

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.24.1

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

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

Types

type FlvFilePump added in v0.24.1

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

func NewFileFilePump added in v0.24.1

func NewFileFilePump(modOptions ...ModFlvFilePumpOption) *FlvFilePump

func (*FlvFilePump) Pump added in v0.24.1

func (f *FlvFilePump) Pump(filename string, onFlvTag OnPumpFlvTag) error

@param onFlvTag 如果回调中返回false,则停止Pump

func (*FlvFilePump) PumpWithTags added in v0.24.1

func (f *FlvFilePump) PumpWithTags(tags []Tag, onFlvTag OnPumpFlvTag) error

@return error 暂时只做预留,目前只会返回nil

type FlvFilePumpOption added in v0.24.1

type FlvFilePumpOption struct {
	IsRecursive bool // 如果为true,则循环返回文件内容(类似于ffmpeg的-stream_loop -1)
}

type FlvFileReader added in v0.24.1

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

func (*FlvFileReader) Dispose added in v0.24.1

func (ffr *FlvFileReader) Dispose()

func (*FlvFileReader) Open added in v0.24.1

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

func (*FlvFileReader) ReadFlvHeader added in v0.24.1

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

func (*FlvFileReader) ReadTag added in v0.24.1

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

type FlvFileWriter added in v0.24.1

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

func (*FlvFileWriter) Dispose added in v0.24.1

func (ffw *FlvFileWriter) Dispose() error

func (*FlvFileWriter) Name added in v0.24.1

func (ffw *FlvFileWriter) Name() string

func (*FlvFileWriter) Open added in v0.24.1

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

func (*FlvFileWriter) WriteFlvHeader added in v0.24.1

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

func (*FlvFileWriter) WriteRaw added in v0.24.1

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

func (*FlvFileWriter) WriteTag added in v0.24.1

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

type ModFlvFilePumpOption added in v0.24.1

type ModFlvFilePumpOption func(option *FlvFilePumpOption)

type ModPullSessionOption

type ModPullSessionOption func(option *PullSessionOption)

type OnPumpFlvTag added in v0.24.1

type OnPumpFlvTag func(tag Tag) bool

type OnReadFlvTag added in v0.24.1

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

func (session *PullSession) AppName() string

文档请参考: interface ISessionUrlContext

func (*PullSession) Dispose

func (session *PullSession) Dispose() error

Dispose 文档请参考: IClientSessionLifecycle interface

func (*PullSession) GetStat

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

文档请参考: interface ISessionStat

func (*PullSession) IsAlive

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

文档请参考: interface ISessionStat

func (*PullSession) Pull

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

Pull 阻塞直到和对端完成拉流前,握手部分的工作,或者发生错误

注意,握手指的是发送完HTTP Request,不包含接收任何数据,因为有的httpflv服务端,如果流不存在不会发送任何内容,此时我们也应该认为是握手完成了

@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

func (session *PullSession) RawQuery() string

文档请参考: interface ISessionUrlContext

func (*PullSession) StreamName

func (session *PullSession) StreamName() string

文档请参考: interface ISessionUrlContext

func (*PullSession) UniqueKey

func (session *PullSession) UniqueKey() string

文档请参考: interface IObject

func (*PullSession) UpdateStat

func (session *PullSession) UpdateStat(intervalSec uint32)

文档请参考: interface ISessionStat

func (*PullSession) Url added in v0.24.1

func (session *PullSession) Url() string

文档请参考: interface ISessionUrlContext

func (*PullSession) WaitChan added in v0.19.12

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

WaitChan 文档请参考: IClientSessionLifecycle interface

type PullSessionOption

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 added in v0.24.1

func (session *SubSession) WriteFlvHeader()

func (*SubSession) WriteHttpResponseHeader added in v0.24.1

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.24.1

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

func (*Tag) IsAacSeqHeader added in v0.24.1

func (tag *Tag) IsAacSeqHeader() bool

func (*Tag) IsAvc added in v0.24.1

func (tag *Tag) IsAvc() bool

func (*Tag) IsAvcKeyNalu added in v0.24.1

func (tag *Tag) IsAvcKeyNalu() bool

func (*Tag) IsAvcKeySeqHeader added in v0.24.1

func (tag *Tag) IsAvcKeySeqHeader() bool

func (*Tag) IsHevc added in v0.24.1

func (tag *Tag) IsHevc() bool

func (*Tag) IsHevcKeyNalu added in v0.24.1

func (tag *Tag) IsHevcKeyNalu() bool

func (*Tag) IsHevcKeySeqHeader added in v0.24.1

func (tag *Tag) IsHevcKeySeqHeader() bool

func (*Tag) IsMetadata

func (tag *Tag) IsMetadata() bool

func (*Tag) IsVideoKeyNalu added in v0.24.1

func (tag *Tag) IsVideoKeyNalu() bool

AVC或HEVC的关键帧

func (*Tag) IsVideoKeySeqHeader

func (tag *Tag) IsVideoKeySeqHeader() bool

AVC或HEVC的seq header

func (*Tag) ModTagTimestamp

func (tag *Tag) ModTagTimestamp(timestamp uint32)

func (*Tag) Payload

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

只包含数据部分,去除了前面11字节的tag header和后面4字节的prev tag size

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