fixed flv header without audio

This commit is contained in:
charlie
2022-03-28 07:45:27 +08:00
parent f2d09a17fc
commit afee12b067

20
main.go
View File

@@ -116,10 +116,12 @@ func HDLHandler(w http.ResponseWriter, r *http.Request) {
if _, err := amf.WriteString(&buffer, "onMetaData"); err != nil { if _, err := amf.WriteString(&buffer, "onMetaData"); err != nil {
return return
} }
hasVideo := vt != nil
hasAudio := at != nil
metaData := amf.Object{ metaData := amf.Object{
"MetaDataCreator": "m7s", "MetaDataCreator": "m7s",
"hasVideo": vt != nil, "hasVideo": hasVideo,
"hasAudio": at != nil, "hasAudio": hasAudio,
"hasMatadata": true, "hasMatadata": true,
"canSeekToEnd": false, "canSeekToEnd": false,
"duration": 0, "duration": 0,
@@ -129,25 +131,21 @@ func HDLHandler(w http.ResponseWriter, r *http.Request) {
"filesize": 0, "filesize": 0,
} }
var flags byte var flags byte
if vt != nil { if hasVideo {
flags |= 1 flags |= 1
metaData["videocodecid"] = int(vt.CodecID) metaData["videocodecid"] = int(vt.CodecID)
metaData["width"] = vt.SPSInfo.Width metaData["width"] = vt.SPSInfo.Width
metaData["height"] = vt.SPSInfo.Height metaData["height"] = vt.SPSInfo.Height
codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_VIDEO, 0, vt.ExtraData.Payload)
sub.OnVideo = func(ts uint32, pack *VideoPack) { sub.OnVideo = func(ts uint32, pack *VideoPack) {
codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_VIDEO, ts, pack.Payload) codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_VIDEO, ts, pack.Payload)
} }
} }
if at != nil { if hasAudio {
flags |= (1 << 2) flags |= (1 << 2)
metaData["audiocodecid"] = int(at.CodecID) metaData["audiocodecid"] = int(at.CodecID)
metaData["audiosamplerate"] = at.SoundRate metaData["audiosamplerate"] = at.SoundRate
metaData["audiosamplesize"] = int(at.SoundSize) metaData["audiosamplesize"] = int(at.SoundSize)
metaData["stereo"] = at.Channels == 2 metaData["stereo"] = at.Channels == 2
if at.CodecID == 10 {
codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_AUDIO, 0, at.ExtraData)
}
sub.OnAudio = func(ts uint32, pack *AudioPack) { sub.OnAudio = func(ts uint32, pack *AudioPack) {
codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_AUDIO, ts, pack.Payload) codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_AUDIO, ts, pack.Payload)
} }
@@ -156,6 +154,12 @@ func HDLHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
w.Write([]byte{'F', 'L', 'V', 0x01, flags, 0, 0, 0, 9, 0, 0, 0, 0}) w.Write([]byte{'F', 'L', 'V', 0x01, flags, 0, 0, 0, 9, 0, 0, 0, 0})
if hasVideo {
codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_VIDEO, 0, vt.ExtraData.Payload)
}
if hasAudio && at.CodecID == 10 {
codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_AUDIO, 0, at.ExtraData)
}
codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_SCRIPT, 0, buffer.Bytes()) codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_SCRIPT, 0, buffer.Bytes())
sub.Play(at, vt) sub.Play(at, vt)
} }