Create GetFmtpLine func for H264
This commit is contained in:
+1
-20
@@ -5,7 +5,6 @@ import (
|
|||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"encoding/hex"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -336,25 +335,7 @@ func (c *Client) AddVideoTrack(mediaCode byte, payload []byte) {
|
|||||||
Name: streamer.CodecH264,
|
Name: streamer.CodecH264,
|
||||||
ClockRate: 90000,
|
ClockRate: 90000,
|
||||||
PayloadType: streamer.PayloadTypeRAW,
|
PayloadType: streamer.PayloadTypeRAW,
|
||||||
FmtpLine: "packetization-mode=1",
|
FmtpLine: h264.GetFmtpLine(payload),
|
||||||
}
|
|
||||||
|
|
||||||
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 0x03, 0x13:
|
case 0x03, 0x13:
|
||||||
|
|||||||
@@ -104,3 +104,26 @@ func GetParameterSet(fmtp string) (sps, pps []byte) {
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetFmtpLine from SPS+PPS+IFrame in AVC format
|
||||||
|
func GetFmtpLine(avc []byte) string {
|
||||||
|
s := "packetization-mode=1"
|
||||||
|
|
||||||
|
for {
|
||||||
|
size := 4 + int(binary.BigEndian.Uint32(avc))
|
||||||
|
|
||||||
|
switch NALUType(avc) {
|
||||||
|
case NALUTypeSPS:
|
||||||
|
s += ";profile-level-id=" + hex.EncodeToString(avc[5:8])
|
||||||
|
s += ";sprop-parameter-sets=" + base64.StdEncoding.EncodeToString(avc[4:size])
|
||||||
|
case NALUTypePPS:
|
||||||
|
s += "," + base64.StdEncoding.EncodeToString(avc[4:size])
|
||||||
|
}
|
||||||
|
|
||||||
|
if size < len(avc) {
|
||||||
|
avc = avc[size:]
|
||||||
|
} else {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user