This commit is contained in:
dexter
2023-01-30 09:02:09 +08:00
parent ae7a3825cc
commit 14fd31f7c0
2 changed files with 13 additions and 9 deletions

View File

@@ -93,11 +93,11 @@ func (sub *HDLSubscriber) OnEvent(event any) {
} }
func (sub *HDLSubscriber) WriteFlvHeader() { func (sub *HDLSubscriber) WriteFlvHeader() {
at, vt := sub.Audio.Track, sub.Video.Track at, vt := sub.Audio, sub.Video
hasAudio, hasVideo := at != nil, vt != nil hasAudio, hasVideo := at != nil, vt != nil
var amf codec.AMF var amf util.AMF
amf.Marshal("onMetaData") amf.Marshal("onMetaData")
metaData := codec.EcmaArray{ metaData := util.EcmaArray{
"MetaDataCreator": "m7s" + Engine.Version, "MetaDataCreator": "m7s" + Engine.Version,
"hasVideo": hasVideo, "hasVideo": hasVideo,
"hasAudio": hasAudio, "hasAudio": hasAudio,
@@ -126,7 +126,7 @@ func (sub *HDLSubscriber) WriteFlvHeader() {
amf.Marshal(metaData) amf.Marshal(metaData)
// 写入FLV头 // 写入FLV头
sub.Write([]byte{'F', 'L', 'V', 0x01, flags, 0, 0, 0, 9, 0, 0, 0, 0}) 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) { func (c *HDLConfig) ServeHTTP(w http.ResponseWriter, r *http.Request) {

12
pull.go
View File

@@ -17,11 +17,13 @@ type HDLPuller struct {
Puller Puller
absTS uint32 //绝对时间戳 absTS uint32 //绝对时间戳
buf util.Buffer buf util.Buffer
pool util.BytesPool
} }
func NewHDLPuller() *HDLPuller { func NewHDLPuller() *HDLPuller {
return &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 startTs = timestamp
} }
tmp.ReadUint24() tmp.ReadUint24()
payload := make([]byte, dataSize) var frame util.BLL
_, err = io.ReadFull(puller, payload) mem := puller.pool.Get(int(dataSize))
frame.Push(mem)
_, err = io.ReadFull(puller, mem.Value)
if err != nil { if err != nil {
return return
} }
@@ -80,9 +84,9 @@ func (puller *HDLPuller) Pull() (err error) {
// println(t, puller.absTS) // println(t, puller.absTS)
switch t { switch t {
case codec.FLV_TAG_TYPE_AUDIO: case codec.FLV_TAG_TYPE_AUDIO:
puller.WriteAVCCAudio(puller.absTS, payload) puller.WriteAVCCAudio(puller.absTS, frame)
case codec.FLV_TAG_TYPE_VIDEO: case codec.FLV_TAG_TYPE_VIDEO:
puller.WriteAVCCVideo(puller.absTS, payload) puller.WriteAVCCVideo(puller.absTS, frame)
} }
} }
return return