mirror of
https://github.com/pion/webrtc.git
synced 2025-10-27 17:21:27 +08:00
Update gstreamer-receive to create pipelines for each input. Currently we don't allow the user to pass in what codecs they support and we don't take into account the offer. The API will need to be updated to catch both these signaling errors. The user will pass a slice of support codecs.
84 lines
2.2 KiB
Go
84 lines
2.2 KiB
Go
package sdp
|
|
|
|
import (
|
|
"math/rand"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// BaseSessionDescription generates a default SDP response that is ice-lite, initiates the DTLS session and supports VP8, VP9 and Opus
|
|
func BaseSessionDescription(iceUsername, icePassword, fingerprint string, candidates []string) *SessionDescription {
|
|
addMediaCandidates := func(m *MediaDescription) *MediaDescription {
|
|
m.Attributes = append(m.Attributes, candidates...)
|
|
m.Attributes = append(m.Attributes, "end-of-candidates")
|
|
return m
|
|
}
|
|
|
|
audioMediaDescription := &MediaDescription{
|
|
MediaName: "audio 9 RTP/SAVPF 111",
|
|
ConnectionData: "IN IP4 127.0.0.1",
|
|
Attributes: []string{
|
|
"setup:active",
|
|
"mid:audio",
|
|
"sendrecv",
|
|
"ice-ufrag:" + iceUsername,
|
|
"ice-pwd:" + icePassword,
|
|
"ice-lite",
|
|
"fingerprint:sha-256 " + fingerprint,
|
|
"rtcp-mux",
|
|
"rtcp-rsize",
|
|
"rtpmap:111 opus/48000/2",
|
|
"fmtp:111 minptime=10;useinbandfec=1",
|
|
},
|
|
}
|
|
|
|
videoMediaDescription := &MediaDescription{
|
|
MediaName: "video 9 RTP/SAVPF 96 98",
|
|
ConnectionData: "IN IP4 127.0.0.1",
|
|
Attributes: []string{
|
|
"setup:active",
|
|
"mid:video",
|
|
"sendrecv",
|
|
"ice-ufrag:" + iceUsername,
|
|
"ice-pwd:" + icePassword,
|
|
"ice-lite",
|
|
"fingerprint:sha-256 " + fingerprint,
|
|
"rtcp-mux",
|
|
"rtcp-rsize",
|
|
"rtpmap:96 VP8/90000",
|
|
"rtpmap:98 VP9/90000",
|
|
},
|
|
}
|
|
|
|
sessionID := strconv.FormatUint(uint64(rand.Uint32())<<32+uint64(rand.Uint32()), 10)
|
|
return &SessionDescription{
|
|
ProtocolVersion: 0,
|
|
Origin: "pion-webrtc " + sessionID + " 2 IN IP4 0.0.0.0",
|
|
SessionName: "-",
|
|
Timing: []string{"0 0"},
|
|
Attributes: []string{
|
|
"group:BUNDLE audio video",
|
|
"msid-semantic: WMS",
|
|
},
|
|
MediaDescriptions: []*MediaDescription{
|
|
addMediaCandidates(audioMediaDescription),
|
|
addMediaCandidates(videoMediaDescription),
|
|
},
|
|
}
|
|
}
|
|
|
|
func GetCodecForPayloadType(payloadType uint8, sd *SessionDescription) (ok bool, codec string) {
|
|
for _, m := range sd.MediaDescriptions {
|
|
for _, a := range m.Attributes {
|
|
if strings.Contains(a, "rtpmap:"+strconv.Itoa(int(payloadType))) {
|
|
split := strings.Split(a, " ")
|
|
if len(split) == 2 {
|
|
split := strings.Split(split[1], "/")
|
|
return true, split[0]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false, ""
|
|
}
|