2020-01-19 12:30:09 +13:00
|
|
|
package webrtc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"math/rand"
|
|
|
|
|
|
|
|
"github.com/pion/webrtc/v2"
|
2020-02-14 16:51:41 +13:00
|
|
|
"n.eko.moe/neko/internal/gst"
|
2020-01-19 12:30:09 +13:00
|
|
|
)
|
|
|
|
|
2020-02-14 16:51:41 +13:00
|
|
|
func (m *WebRTCManager) createTrack(codecName string, pipelineDevice string, pipelineSrc string) (*gst.Pipeline, *webrtc.Track, error) {
|
|
|
|
pipeline, err := gst.CreatePipeline(
|
|
|
|
codecName,
|
|
|
|
pipelineDevice,
|
|
|
|
pipelineSrc,
|
|
|
|
)
|
2020-01-19 12:30:09 +13:00
|
|
|
|
2020-02-14 16:51:41 +13:00
|
|
|
if err != nil {
|
|
|
|
return nil, nil, err
|
2020-01-19 12:30:09 +13:00
|
|
|
}
|
|
|
|
|
|
|
|
var codec *webrtc.RTPCodec
|
2020-02-14 16:51:41 +13:00
|
|
|
switch codecName {
|
|
|
|
case webrtc.VP8:
|
|
|
|
codec = webrtc.NewRTPVP8Codec(webrtc.DefaultPayloadTypeVP8, 90000)
|
|
|
|
case webrtc.VP9:
|
|
|
|
codec = webrtc.NewRTPVP9Codec(webrtc.DefaultPayloadTypeVP9, 90000)
|
|
|
|
case webrtc.H264:
|
|
|
|
codec = webrtc.NewRTPH264Codec(webrtc.DefaultPayloadTypeH264, 90000)
|
|
|
|
case webrtc.Opus:
|
|
|
|
codec = webrtc.NewRTPOpusCodec(webrtc.DefaultPayloadTypeOpus, 48000)
|
|
|
|
case webrtc.G722:
|
|
|
|
codec = webrtc.NewRTPG722Codec(webrtc.DefaultPayloadTypeG722, 8000)
|
|
|
|
case webrtc.PCMU:
|
|
|
|
codec = webrtc.NewRTPPCMUCodec(webrtc.DefaultPayloadTypePCMU, 8000)
|
|
|
|
case webrtc.PCMA:
|
|
|
|
codec = webrtc.NewRTPPCMACodec(webrtc.DefaultPayloadTypePCMA, 8000)
|
|
|
|
default:
|
|
|
|
return nil, nil, fmt.Errorf("unknown codec %s", codecName)
|
2020-01-19 12:30:09 +13:00
|
|
|
}
|
|
|
|
|
2020-02-14 16:51:41 +13:00
|
|
|
m.engine.RegisterCodec(codec)
|
|
|
|
track, err := webrtc.NewTrack(codec.PayloadType, rand.Uint32(), "stream", "stream", codec)
|
|
|
|
if err != nil {
|
|
|
|
return nil, nil, err
|
2020-01-19 12:30:09 +13:00
|
|
|
}
|
|
|
|
|
2020-02-14 16:51:41 +13:00
|
|
|
return pipeline, track, nil
|
2020-01-19 12:30:09 +13:00
|
|
|
}
|