diff --git a/main.go b/main.go index 68e2059..ea1d02d 100644 --- a/main.go +++ b/main.go @@ -93,11 +93,11 @@ func (sub *HDLSubscriber) OnEvent(event any) { } func (sub *HDLSubscriber) WriteFlvHeader() { - at, vt := sub.Audio.Track, sub.Video.Track + at, vt := sub.Audio, sub.Video hasAudio, hasVideo := at != nil, vt != nil - var amf codec.AMF + var amf util.AMF amf.Marshal("onMetaData") - metaData := codec.EcmaArray{ + metaData := util.EcmaArray{ "MetaDataCreator": "m7s" + Engine.Version, "hasVideo": hasVideo, "hasAudio": hasAudio, @@ -126,7 +126,7 @@ func (sub *HDLSubscriber) WriteFlvHeader() { amf.Marshal(metaData) // 写入FLV头 sub.Write([]byte{'F', 'L', 'V', 0x01, flags, 0, 0, 0, 9, 0, 0, 0, 0}) - codec.WriteFLVTag(sub, codec.FLV_TAG_TYPE_SCRIPT, 0, net.Buffers{amf.Buffer}) + codec.WriteFLVTag(sub, codec.FLV_TAG_TYPE_SCRIPT, 0, amf.Buffer) } func (c *HDLConfig) ServeHTTP(w http.ResponseWriter, r *http.Request) { diff --git a/pull.go b/pull.go index 29c929f..f8d0ee8 100644 --- a/pull.go +++ b/pull.go @@ -17,11 +17,13 @@ type HDLPuller struct { Puller absTS uint32 //绝对时间戳 buf util.Buffer + pool util.BytesPool } func NewHDLPuller() *HDLPuller { return &HDLPuller{ - buf: util.Buffer(make([]byte, len(codec.FLVHeader))), + buf: util.Buffer(make([]byte, len(codec.FLVHeader))), + pool: make(util.BytesPool, 17), } } @@ -71,8 +73,10 @@ func (puller *HDLPuller) Pull() (err error) { startTs = timestamp } tmp.ReadUint24() - payload := make([]byte, dataSize) - _, err = io.ReadFull(puller, payload) + var frame util.BLL + mem := puller.pool.Get(int(dataSize)) + frame.Push(mem) + _, err = io.ReadFull(puller, mem.Value) if err != nil { return } @@ -80,9 +84,9 @@ func (puller *HDLPuller) Pull() (err error) { // println(t, puller.absTS) switch t { case codec.FLV_TAG_TYPE_AUDIO: - puller.WriteAVCCAudio(puller.absTS, payload) + puller.WriteAVCCAudio(puller.absTS, frame) case codec.FLV_TAG_TYPE_VIDEO: - puller.WriteAVCCVideo(puller.absTS, payload) + puller.WriteAVCCVideo(puller.absTS, frame) } } return