@@ -12,7 +12,6 @@ import (
1212
1313 "github.com/notedit/gst"
1414 "github.com/pion/rtp"
15- "github.com/pion/rtp/codecs"
1615 "github.com/pion/webrtc/v3"
1716 "go.uber.org/zap"
1817)
@@ -66,52 +65,15 @@ func PipelineString(trCodec webrtc.RTPCodecParameters, encodingStr string) (stri
6665 return "" , fmt .Errorf ("unsupported codec %s" , trCodec .MimeType )
6766}
6867
69- func EncodingPipelineStr (mimeType string ) (string , error ) {
70- switch mimeType {
71- case webrtc .MimeTypeH264 , "" /* default */ :
72- return "x264enc speed-preset=ultrafast tune=zerolatency key-int-max=20" , nil
73- case webrtc .MimeTypeVP8 :
74- return "vp8enc deadline=1" , nil
75- case webrtc .MimeTypeOpus :
76- return "opusenc" , nil
77- }
78- return "" , fmt .Errorf ("unsupported codec %s" , mimeType )
79- }
80-
81- func TargetCodec (mimeType string ) (* webrtc.RTPCodecCapability , rtp.Payloader , error ) {
82- switch mimeType {
83- case webrtc .MimeTypeH264 , "" /* default */ :
84- return & webrtc.RTPCodecCapability {MimeType : webrtc .MimeTypeH264 , ClockRate : 90000 }, & codecs.H264Payloader {}, nil
85- case webrtc .MimeTypeVP8 :
86- return & webrtc.RTPCodecCapability {MimeType : webrtc .MimeTypeVP8 , ClockRate : 90000 }, & codecs.VP8Payloader {}, nil
87- case webrtc .MimeTypeOpus :
88- return & webrtc.RTPCodecCapability {MimeType : webrtc .MimeTypeOpus , ClockRate : 48000 }, & codecs.OpusPayloader {}, nil
89- }
90- return nil , nil , fmt .Errorf ("unsupported codec %s" , mimeType )
91- }
68+ func TranscodeTrackRemote (parent * gst.Pipeline , tr * webrtc.TrackRemote , outputCodec * OutputCodec ) (webrtc.TrackLocal , error ) {
69+ packetizer := NewTSPacketizer (1200 , outputCodec .Payloader , rtp .NewRandomSequencer ())
9270
93-
94- func TranscodeTrackRemote (parent * gst.Pipeline , tr * webrtc.TrackRemote , pipelineStr , mimeType string ) (webrtc.TrackLocal , error ) {
95- targetCodec , payloader , err := TargetCodec (mimeType )
71+ tl , err := webrtc .NewTrackLocalStaticRTP (outputCodec .RTPCodecCapability , tr .ID (), tr .StreamID ())
9672 if err != nil {
9773 return nil , err
9874 }
9975
100- packetizer := NewTSPacketizer (1200 , payloader , rtp .NewRandomSequencer ())
101-
102- tl , err := webrtc .NewTrackLocalStaticRTP (* targetCodec , tr .ID (), tr .StreamID ())
103- if err != nil {
104- return nil , err
105- }
106-
107- if pipelineStr == "" {
108- pipelineStr , err = EncodingPipelineStr (mimeType )
109- if err != nil {
110- return nil , err
111- }
112- }
113-
114- transcodingPipelineStr , err := PipelineString (tr .Codec (), pipelineStr )
76+ transcodingPipelineStr , err := PipelineString (tr .Codec (), outputCodec .GStreamerEncoder )
11577 if err != nil {
11678 return nil , err
11779 }
@@ -161,7 +123,7 @@ func TranscodeTrackRemote(parent *gst.Pipeline, tr *webrtc.TrackRemote, pipeline
161123
162124 // GStreamer doesn't set the buffer duration for RTP packets, so we compute the timestamp
163125 // based on the dts.
164- rtpts := uint32 (uint64 (sample .Dts ) / 1000 * (uint64 (targetCodec .ClockRate ) / 1000 ) / 1000 )
126+ rtpts := uint32 (uint64 (sample .Dts ) / 1000 * (uint64 (outputCodec .ClockRate ) / 1000 ) / 1000 )
165127 for _ , p := range packetizer .Packetize (sample .Data , rtpts ) {
166128 if err := tl .WriteRTP (p ); err != nil {
167129 zap .L ().Error ("could not write rtp" , zap .Error (err ))
0 commit comments