Update FLV muxer
This commit is contained in:
@@ -199,6 +199,8 @@ func (a *AMF) writeKV(obj map[string]any) {
|
|||||||
a.WriteString(v)
|
a.WriteString(v)
|
||||||
case int:
|
case int:
|
||||||
a.WriteNumber(float64(v))
|
a.WriteNumber(float64(v))
|
||||||
|
case uint16:
|
||||||
|
a.WriteNumber(float64(v))
|
||||||
case uint32:
|
case uint32:
|
||||||
a.WriteNumber(float64(v))
|
a.WriteNumber(float64(v))
|
||||||
case float64:
|
case float64:
|
||||||
@@ -214,3 +216,24 @@ func (a *AMF) writeKV(obj map[string]any) {
|
|||||||
func (a *AMF) WriteNull() {
|
func (a *AMF) WriteNull() {
|
||||||
a.buf = append(a.buf, TypeNull)
|
a.buf = append(a.buf, TypeNull)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func EncodeItems(items ...any) []byte {
|
||||||
|
a := &AMF{}
|
||||||
|
for _, item := range items {
|
||||||
|
switch v := item.(type) {
|
||||||
|
case float64:
|
||||||
|
a.WriteNumber(v)
|
||||||
|
case int:
|
||||||
|
a.WriteNumber(float64(v))
|
||||||
|
case string:
|
||||||
|
a.WriteString(v)
|
||||||
|
case map[string]any:
|
||||||
|
a.WriteObject(v)
|
||||||
|
case nil:
|
||||||
|
a.WriteNull()
|
||||||
|
default:
|
||||||
|
panic(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return a.Bytes()
|
||||||
|
}
|
||||||
|
|||||||
+9
-13
@@ -45,10 +45,8 @@ func (m *Muxer) GetInit() []byte {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wr := amf.NewWriter()
|
data := amf.EncodeItems("@setDataFrame", "onMetaData", obj)
|
||||||
wr.WriteString("onMetaData")
|
b = append(b, EncodeTag(TagData, 0, data)...)
|
||||||
wr.WriteEcmaArray(obj)
|
|
||||||
b = append(b, EncodePacket(TagData, 0, wr.Bytes())...)
|
|
||||||
|
|
||||||
for _, codec := range m.codecs {
|
for _, codec := range m.codecs {
|
||||||
switch codec.Name {
|
switch codec.Name {
|
||||||
@@ -62,16 +60,14 @@ func (m *Muxer) GetInit() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
config := h264.EncodeConfig(sps, pps)
|
config := h264.EncodeConfig(sps, pps)
|
||||||
payload := append(encodeAVData(codec, 0), config...)
|
video := append(encodeAVData(codec, 0), config...)
|
||||||
b = append(b, EncodePacket(TagVideo, 0, payload)...)
|
b = append(b, EncodeTag(TagVideo, 0, video)...)
|
||||||
|
|
||||||
case core.CodecAAC:
|
case core.CodecAAC:
|
||||||
s := core.Between(codec.FmtpLine, "config=", ";")
|
s := core.Between(codec.FmtpLine, "config=", ";")
|
||||||
config, _ := hex.DecodeString(s)
|
config, _ := hex.DecodeString(s)
|
||||||
payload := append(
|
audio := append(encodeAVData(codec, 0), config...)
|
||||||
encodeAVData(codec, 0), config...,
|
b = append(b, EncodeTag(TagAudio, 0, audio)...)
|
||||||
)
|
|
||||||
b = append(b, EncodePacket(TagAudio, 0, payload)...)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +98,7 @@ func (m *Muxer) GetPayloader(codec *core.Codec) func(packet *rtp.Packet) []byte
|
|||||||
}
|
}
|
||||||
|
|
||||||
timeMS := (packet.Timestamp - ts0) / k
|
timeMS := (packet.Timestamp - ts0) / k
|
||||||
return EncodePacket(TagVideo, timeMS, buf)
|
return EncodeTag(TagVideo, timeMS, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
case core.CodecAAC:
|
case core.CodecAAC:
|
||||||
@@ -116,14 +112,14 @@ func (m *Muxer) GetPayloader(codec *core.Codec) func(packet *rtp.Packet) []byte
|
|||||||
}
|
}
|
||||||
|
|
||||||
timeMS := (packet.Timestamp - ts0) / k
|
timeMS := (packet.Timestamp - ts0) / k
|
||||||
return EncodePacket(TagAudio, timeMS, buf)
|
return EncodeTag(TagAudio, timeMS, buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func EncodePacket(tagType byte, timeMS uint32, payload []byte) []byte {
|
func EncodeTag(tagType byte, timeMS uint32, payload []byte) []byte {
|
||||||
payloadSize := uint32(len(payload))
|
payloadSize := uint32(len(payload))
|
||||||
tagSize := payloadSize + 11
|
tagSize := payloadSize + 11
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user