flv

package
v0.0.0-...-83c4208 Latest Latest
Warning

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

Go to latest
Published: Mar 8, 2026 License: MIT Imports: 14 Imported by: 0

README

FLV 格式支持

实现 FLV (Flash Video) 容器格式的复用与解复用。

核心 API

类型/函数 说明
Muxer / NewMuxer(w) FLV 复用器,写入 io.Writer
Demuxer / NewDemuxer(r) FLV 解复用器,读取 io.Reader
Prober 流探测器,自动识别编码格式
CodecDataToTag(stream) 将 CodecData 转换为 FLV Tag
PacketToTag(pkt, stream) 将 Packet 转换为 FLV Tag
Handler avutil 注册函数

编码支持说明

  • 视频:H264H265(Enhanced RTMP)AV1(Enhanced RTMP)VP9(Enhanced RTMP)
  • 音频:AACSpeexPCM A-lawPCM μ-law
  • 不支持:G726(FLV 无原生 SoundFormat,禁止伪映射)

快速开始

解复用
import "cnb.cool/svn/vdk/format/flv"

demuxer := flv.NewDemuxer(reader)
streams, _ := demuxer.Streams()
for {
    pkt, err := demuxer.ReadPacket()
    if err != nil {
        break
    }
    // 处理数据包
}
复用
muxer := flv.NewMuxer(writer)
muxer.WriteHeader(streams)
muxer.WritePacket(pkt)
muxer.WriteTrailer()

Handler 注册

本包提供 Handler 函数,可通过 format.RegisterAll() 自动注册到 avutil。

代码风格

  • AMF0 序列化层已统一使用 any 替代 interface{}(Go 1.18+)。

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CodecTypes = []av.CodecType{av.H264, av.H265, av.AV1, av.VP9, av.AAC, av.SPEEX, av.PCM_ALAW, av.PCM_MULAW}
View Source
var MaxProbePacketCount = 20

Functions

func CodecDataToTag

func CodecDataToTag(stream av.CodecData) (_tag flvio.Tag, ok bool, err error)

func Handler

func Handler(h *avutil.RegisterHandler)

func NewMetadataByStreams

func NewMetadataByStreams(streams []av.CodecData) (metadata flvio.AMFMap, err error)

func PacketToTag

func PacketToTag(pkt av.Packet, stream av.CodecData) (tag flvio.Tag, timestamp int32)

Types

type Demuxer

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

func NewDemuxer

func NewDemuxer(r io.Reader) *Demuxer

func (*Demuxer) ReadPacket

func (self *Demuxer) ReadPacket() (pkt av.Packet, err error)

func (*Demuxer) Streams

func (self *Demuxer) Streams() (streams []av.CodecData, err error)

type Muxer

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

func NewMuxer

func NewMuxer(w io.Writer) *Muxer

func NewMuxerWriteFlusher

func NewMuxerWriteFlusher(w writeFlusher) *Muxer

func (*Muxer) WriteHeader

func (self *Muxer) WriteHeader(streams []av.CodecData) (err error)

func (*Muxer) WritePacket

func (self *Muxer) WritePacket(pkt av.Packet) (err error)

func (*Muxer) WriteTrailer

func (self *Muxer) WriteTrailer() (err error)

type Prober

type Prober struct {
	HasAudio, HasVideo             bool
	GotAudio, GotVideo             bool
	VideoStreamIdx, AudioStreamIdx int
	PushedCount                    int
	Streams                        []av.CodecData
	CachedPkts                     []av.Packet
}

func (*Prober) CacheTag

func (self *Prober) CacheTag(_tag flvio.Tag, timestamp int32)

func (*Prober) Empty

func (self *Prober) Empty() bool

func (*Prober) PopPacket

func (self *Prober) PopPacket() av.Packet

func (*Prober) Probed

func (self *Prober) Probed() (ok bool)

func (*Prober) PushTag

func (self *Prober) PushTag(tag flvio.Tag, timestamp int32) (err error)

func (*Prober) TagToPacket

func (self *Prober) TagToPacket(tag flvio.Tag, timestamp int32) (pkt av.Packet, ok bool)

Source Files

  • flv.go
  • flv_mux_demux.go

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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