From 57b49d735e2251418b209330d79b327574098c2a Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Sat, 11 Feb 2023 12:47:36 +0300 Subject: [PATCH] Add FmtpLine for DVRIP H264 codec --- pkg/dvrip/client.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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,