mirror of
https://github.com/Monibuca/plugin-hdl.git
synced 2025-10-05 16:56:55 +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() {
|
||||
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) {
|
||||
|
14
pull.go
14
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
|
||||
|
Reference in New Issue
Block a user