diff --git a/pkg/dvrip/client.go b/pkg/dvrip/client.go index c2ae584a..64153042 100644 --- a/pkg/dvrip/client.go +++ b/pkg/dvrip/client.go @@ -5,6 +5,7 @@ import ( "crypto/md5" "encoding/base64" "encoding/binary" + "encoding/hex" "encoding/json" "errors" "fmt" @@ -335,7 +336,27 @@ func (c *Client) AddVideoTrack(mediaCode byte, payload []byte) { Name: streamer.CodecH264, ClockRate: 90000, PayloadType: streamer.PayloadTypeRAW, + FmtpLine: "packetization-mode=1", } + + for { + size := 4 + int(binary.BigEndian.Uint32(payload)) + + switch h264.NALUType(payload) { + case h264.NALUTypeSPS: + codec.FmtpLine += ";profile-level-id=" + hex.EncodeToString(payload[5:8]) + codec.FmtpLine += ";sprop-parameter-sets=" + base64.StdEncoding.EncodeToString(payload[4:size]) + case h264.NALUTypePPS: + codec.FmtpLine += "," + base64.StdEncoding.EncodeToString(payload[4:size]) + } + + if size < len(payload) { + payload = payload[size:] + } else { + break + } + } + case 3: codec = &streamer.Codec{ Name: streamer.CodecH265,