steep-balloon-41261
07/07/2023, 7:54 PMdry-farmer-50272
07/10/2023, 10:12 AMconst stream = await navigator.mediaDevices.getUserMedia({
audio: {
sampleRate: 48000,
deviceId: deviceId,
echoCancellation: true,
noiseSuppression: true,
suppressLocalAudioPlayback: true,
autoGainControl: false
}
})
micTrack = stream.getAudioTracks()[0]
await this.room.localParticipant.publishTrack(micTrack, {
source: Track.Source.Microphone,
red: true,
dtx: true,
audioPreset: AudioPresets.musicHighQualityStereo,
forceStereo: true,
})dry-farmer-50272
07/10/2023, 10:13 AMconst stream = await navigator.mediaDevices.getUserMedia({
video: {
facingMode: {ideal: "user"},
frameRate: {
ideal: 15,
},
width: {
ideal: 300,
},
height: {
ideal: 300,
},
aspectRatio: {ideal: 1}
}
})
await this.room.localParticipant.publishTrack(stream.getVideoTracks()[0], {
source: Track.Source.Camera, videoEncoding: {maxBitrate: 32 * 8 * 1000, maxFramerate: 15}
})dry-farmer-50272
07/10/2023, 10:13 AMconst stream = await navigator.mediaDevices.getDisplayMedia({
video: {
frameRate: {ideal: 15},
}
})
await this.room.localParticipant.publishTrack(screenShareTrack, {
source: Track.Source.ScreenShare,
videoEncoding: {maxBitrate: 32 * 8 * 1000, maxFramerate: 15},
screenShareEncoding: {maxBitrate: 32 * 8 * 1000, maxFramerate: 15}
})dry-farmer-50272
07/10/2023, 10:13 AMdry-farmer-50272
07/10/2023, 10:15 AMfunc NewTrackWriter(track *webrtc.TrackRemote, pliWriter lksdk.PLIWriter, fileName string) (*TrackWriter, error) {
var (
sb *samplebuilder.SampleBuilder
writer media.Writer
err error
)
switch {
case strings.EqualFold(track.Codec().MimeType, "video/h264"):
sb = samplebuilder.New(maxVideoLate, &codecs.H264Packet{}, track.Codec().ClockRate, samplebuilder.WithPacketDroppedHandler(func() {
pliWriter(track.SSRC())
}))
writer, err = h264writer.New(fileName + ".h264")
case strings.EqualFold(track.Codec().MimeType, "audio/opus"):
sb = samplebuilder.New(maxAudioLate, &codecs.OpusPacket{}, 48000)
writer, err = oggwriter.New(fileName+".ogg", 48000, track.Codec().Channels)
default:
return nil, errors.New("unsupported codec type")
}
if err != nil {
return nil, err
}
t := &TrackWriter{
path: fileName,
sb: sb,
writer: writer,
track: track,
room: s,
}
go t.start()
return t, nil
}
func (t *TrackWriter) start() {
for {
if !t.room.IsRecording {
break
}
pkt, _, err := t.track.ReadRTP()
if err != nil {
break
}
t.sb.Push(pkt)
for _, p := range t.sb.PopPackets() {
t.writer.WriteRTP(p)
}
}
}dry-farmer-50272
07/10/2023, 10:16 AM