Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 25 additions & 24 deletions codecs/codecs.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package codecs
import (
"strings"

"github.com/livekit/protocol/codecs/mime"
"github.com/livekit/protocol/livekit"
"github.com/livekit/protocol/logger"
"github.com/pion/webrtc/v4"
Expand All @@ -25,7 +26,7 @@ import (
var (
OpusCodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeOpus.String(),
MimeType: mime.MimeTypeOpus.String(),
ClockRate: 48000,
Channels: 2,
SDPFmtpLine: "minptime=10;useinbandfec=1",
Expand All @@ -35,7 +36,7 @@ var (

RedCodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeRED.String(),
MimeType: mime.MimeTypeRED.String(),
ClockRate: 48000,
Channels: 2,
SDPFmtpLine: "111/111",
Expand All @@ -45,38 +46,38 @@ var (

PCMUCodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypePCMU.String(),
MimeType: mime.MimeTypePCMU.String(),
ClockRate: 8000,
},
PayloadType: 0,
}

PCMACodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypePCMA.String(),
MimeType: mime.MimeTypePCMA.String(),
ClockRate: 8000,
},
PayloadType: 8,
}

VideoRTXCodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeRTX.String(),
MimeType: mime.MimeTypeRTX.String(),
ClockRate: 90000,
},
}

VP8CodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeVP8.String(),
MimeType: mime.MimeTypeVP8.String(),
ClockRate: 90000,
},
PayloadType: 96,
}

VP9ProfileId0CodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeVP9.String(),
MimeType: mime.MimeTypeVP9.String(),
ClockRate: 90000,
SDPFmtpLine: "profile-id=0",
},
Expand All @@ -85,7 +86,7 @@ var (

VP9ProfileId1CodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeVP9.String(),
MimeType: mime.MimeTypeVP9.String(),
ClockRate: 90000,
SDPFmtpLine: "profile-id=1",
},
Expand All @@ -94,7 +95,7 @@ var (

H264ProfileLevelId42e01fPacketizationMode0CodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeH264.String(),
MimeType: mime.MimeTypeH264.String(),
ClockRate: 90000,
SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f",
},
Expand All @@ -103,7 +104,7 @@ var (

H264ProfileLevelId42e01fPacketizationMode1CodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeH264.String(),
MimeType: mime.MimeTypeH264.String(),
ClockRate: 90000,
SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f",
},
Expand All @@ -113,7 +114,7 @@ var (
H264HighProfileFmtp = "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032"
H264HighProfileCodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeH264.String(),
MimeType: mime.MimeTypeH264.String(),
ClockRate: 90000,
SDPFmtpLine: H264HighProfileFmtp,
},
Expand All @@ -122,15 +123,15 @@ var (

AV1CodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeAV1.String(),
MimeType: mime.MimeTypeAV1.String(),
ClockRate: 90000,
},
PayloadType: 35,
}

H265CodecParameters = webrtc.RTPCodecParameters{
RTPCodecCapability: webrtc.RTPCodecCapability{
MimeType: MimeTypeH265.String(),
MimeType: mime.MimeTypeH265.String(),
ClockRate: 90000,
},
PayloadType: 116,
Expand Down Expand Up @@ -176,36 +177,36 @@ func ToWebrtcCodecParameters(codec *livekit.Codec) webrtc.RTPCodecParameters {
fmtp := codec.GetFmtpLine()
var params webrtc.RTPCodecParameters

switch NormalizeMimeType(codec.GetMime()) {
case MimeTypeOpus:
switch mime.NormalizeMimeType(codec.GetMime()) {
case mime.MimeTypeOpus:
params = OpusCodecParameters
case MimeTypeRED:
case mime.MimeTypeRED:
params = RedCodecParameters
case MimeTypePCMU:
case mime.MimeTypePCMU:
params = PCMUCodecParameters
case MimeTypePCMA:
case mime.MimeTypePCMA:
params = PCMACodecParameters
case MimeTypeRTX:
case mime.MimeTypeRTX:
params = VideoRTXCodecParameters
case MimeTypeVP8:
case mime.MimeTypeVP8:
params = VP8CodecParameters
case MimeTypeVP9:
case mime.MimeTypeVP9:
if strings.Contains(fmtp, "profile-id=1") {
params = VP9ProfileId1CodecParameters
} else {
params = VP9ProfileId0CodecParameters
}
case MimeTypeAV1:
case mime.MimeTypeAV1:
params = AV1CodecParameters
case MimeTypeH264:
case mime.MimeTypeH264:
if strings.Contains(fmtp, "profile-level-id=640032") {
params = H264HighProfileCodecParameters
} else if strings.Contains(fmtp, "packetization-mode=0") {
params = H264ProfileLevelId42e01fPacketizationMode0CodecParameters
} else {
params = H264ProfileLevelId42e01fPacketizationMode1CodecParameters
}
case MimeTypeH265:
case mime.MimeTypeH265:
params = H265CodecParameters
default:
return webrtc.RTPCodecParameters{}
Expand Down
Loading
Loading