mirror of
https://github.com/Monibuca/plugin-hdl.git
synced 2025-10-06 01:07:04 +08:00
dev
This commit is contained in:
8
main.go
8
main.go
@@ -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) {
|
||||||
|
14
pull.go
14
pull.go
@@ -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
|
||||||
|
Reference in New Issue
Block a user