Skip to content

Commit 731cb86

Browse files
committed
cleanup.
1 parent 913b621 commit 731cb86

File tree

1 file changed

+78
-118
lines changed

1 file changed

+78
-118
lines changed

examples/b2bua/b2bua/udp.go

Lines changed: 78 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@ import (
77
"sync"
88
"time"
99

10-
"github.com/cloudwebrtc/go-sip-ua/examples/b2bua/b2bua/buffer"
1110
"github.com/cloudwebrtc/go-sip-ua/pkg/utils"
1211
"github.com/ghettovoice/gosip/util"
1312
"github.com/pion/rtcp"
1413
"github.com/pion/rtp"
15-
"github.com/pion/webrtc/v3"
1614
"github.com/pixelbender/go-sdp/sdp"
1715
)
1816

@@ -31,32 +29,13 @@ type UdpTansport struct {
3129
closed utils.AtomicBool
3230
ctx context.Context
3331
cancel context.CancelFunc
34-
35-
sequencer *sequencer
36-
videoPool *sync.Pool
37-
audioPool *sync.Pool
38-
buff *buffer.Buffer
39-
bmu sync.Mutex
4032
}
4133

4234
func NewUdpTansport(trackInfos []*TrackInfo) *UdpTansport {
4335
t := &UdpTansport{
4436
trackInfos: trackInfos,
4537
ports: make(map[TrackType]*UdpPort),
4638
videoSSRC: 0,
47-
sequencer: newSequencer(MaxPacketTrack),
48-
videoPool: &sync.Pool{
49-
New: func() interface{} {
50-
b := make([]byte, MaxPacketTrack*maxPktSize)
51-
return &b
52-
},
53-
},
54-
audioPool: &sync.Pool{
55-
New: func() interface{} {
56-
b := make([]byte, maxPktSize*25)
57-
return &b
58-
},
59-
},
6039
}
6140

6241
t.ctx, t.cancel = context.WithCancel(context.TODO())
@@ -82,7 +61,7 @@ func (c *UdpTansport) Init(config CallConfig) error {
8261
SessionVersion: time.Now().UnixNano() / 1e6,
8362
},
8463
Timing: &sdp.Timing{Start: time.Time{}, Stop: time.Time{}},
85-
//Name: "Example",
64+
//Name: "play", // Session Name ("s=")
8665
Connection: &sdp.Connection{
8766
Address: host,
8867
},
@@ -181,16 +160,6 @@ func (c *UdpTansport) onRtpPacket(trackType TrackType, packet []byte, raddr net.
181160

182161
if trackType == TrackTypeVideo && c.videoSSRC == 0 {
183162
c.videoSSRC = p.SSRC
184-
185-
c.bmu.Lock()
186-
if c.buff == nil {
187-
c.buff = buffer.NewBuffer(uint32(p.SSRC), c.videoPool, c.audioPool, buffer.Logger)
188-
c.buff.Bind(webrtc.RTPParameters{}, buffer.Options{
189-
MaxBitRate: 1500,
190-
})
191-
c.buff.OnFeedback(func(fb []rtcp.Packet) {})
192-
}
193-
c.bmu.Unlock()
194163
//c.sendPLI(c.videoSSRC)
195164
}
196165

@@ -211,69 +180,6 @@ func (c *UdpTansport) onRtpPacket(trackType TrackType, packet []byte, raddr net.
211180

212181
func (c *UdpTansport) onRtcpPacket(trackType TrackType, packet []byte, raddr net.Addr) error {
213182
logger.Debugf("UdpTansport::OnRtcpPacketReceived: %v read %d bytes, raddr %v", trackType, len(packet), raddr)
214-
215-
pkts, err := rtcp.Unmarshal(packet)
216-
if err != nil {
217-
logger.Errorf("Unmarshal rtcp receiver packets err %v", err)
218-
}
219-
var fwdPkts []rtcp.Packet
220-
pliOnce := true
221-
firOnce := true
222-
var (
223-
maxRatePacketLoss uint8
224-
expectedMinBitrate uint64
225-
)
226-
for _, pkt := range pkts {
227-
switch p := pkt.(type) {
228-
case *rtcp.PictureLossIndication:
229-
if pliOnce {
230-
fwdPkts = append(fwdPkts, p)
231-
logger.Infof("Picture Loss Indication")
232-
if c.requestKeyFrameHandler != nil {
233-
c.requestKeyFrameHandler()
234-
}
235-
pliOnce = false
236-
}
237-
case *rtcp.FullIntraRequest:
238-
if firOnce {
239-
fwdPkts = append(fwdPkts, p)
240-
logger.Infof("FullIntraRequest")
241-
if c.requestKeyFrameHandler != nil {
242-
c.requestKeyFrameHandler()
243-
}
244-
firOnce = false
245-
}
246-
case *rtcp.ReceiverEstimatedMaximumBitrate:
247-
if expectedMinBitrate == 0 || expectedMinBitrate > uint64(p.Bitrate) {
248-
expectedMinBitrate = uint64(p.Bitrate)
249-
//hi.CameraUpdateBitrate(uint32(expectedMinBitrate / 1024))
250-
logger.Debugf(" ReceiverEstimatedMaximumBitrate %d", expectedMinBitrate/1024)
251-
}
252-
case *rtcp.ReceiverReport:
253-
for _, r := range p.Reports {
254-
if maxRatePacketLoss == 0 || maxRatePacketLoss < r.FractionLost {
255-
maxRatePacketLoss = r.FractionLost
256-
logger.Infof("maxRatePacketLoss %d", maxRatePacketLoss)
257-
}
258-
}
259-
case *rtcp.TransportLayerNack:
260-
logger.Infof("Nack %v", p)
261-
if c.sequencer != nil {
262-
var nackedPackets []packetMeta
263-
for _, pair := range p.Nacks {
264-
nackedPackets = append(nackedPackets, c.sequencer.getSeqNoPairs(pair.PacketList())...)
265-
}
266-
if len(nackedPackets) > 0 {
267-
//if err = c.RetransmitPackets(nackedPackets); err == nil {
268-
// logger.Infof("Nack pair %v", nackedPackets)
269-
//}
270-
} else {
271-
//buf, _ := p.Marshal()
272-
//c.onRtcpPacket(TrackTypeVideo, packet)
273-
}
274-
}
275-
}
276-
}
277183
c.mu.RLock()
278184
defer c.mu.RUnlock()
279185
if c.rtcpHandler != nil {
@@ -283,18 +189,19 @@ func (c *UdpTansport) onRtcpPacket(trackType TrackType, packet []byte, raddr net
283189
}
284190

285191
func (c *UdpTansport) WriteRTP(trackType TrackType, packet []byte) (int, error) {
192+
/*
193+
p := &rtp.Packet{}
194+
if err := p.Unmarshal(packet); err != nil {
195+
logger.Errorf("tp.Packet Unmarshal: e %v", err)
196+
}
197+
logger.Debugf("UdpTansport::WriteRTP: %v, write %d bytes, seq %d, ts %d", trackType, len(packet), p.SequenceNumber, p.Timestamp)
286198
287-
p := &rtp.Packet{}
288-
if err := p.Unmarshal(packet); err != nil {
289-
logger.Errorf("tp.Packet Unmarshal: e %v", err)
290-
}
291-
logger.Debugf("UdpTansport::WriteRTP: %v, write %d bytes, seq %d, ts %d", trackType, len(packet), p.SequenceNumber, p.Timestamp)
292-
293-
pktbuf, err := p.Marshal()
199+
pktbuf, err := p.Marshal()
294200
295-
if err != nil {
296-
logger.Errorf("UdpTansport::WriteRTP: Marshal rtp receiver packets err %v", err)
297-
}
201+
if err != nil {
202+
logger.Errorf("UdpTansport::WriteRTP: Marshal rtp receiver packets err %v", err)
203+
}
204+
*/
298205

299206
port := c.ports[trackType]
300207

@@ -303,25 +210,24 @@ func (c *UdpTansport) WriteRTP(trackType TrackType, packet []byte) (int, error)
303210
return 0, nil
304211
}
305212

306-
return port.WriteRtp(pktbuf)
213+
return port.WriteRtp(packet)
307214
}
308215

309216
func (c *UdpTansport) WriteRTCP(trackType TrackType, packet []byte) (int, error) {
217+
/*
218+
pkts, err := rtcp.Unmarshal(packet)
219+
if err != nil {
220+
logger.Errorf("UdpTansport::WriteRTP: Unmarshal rtcp receiver packets err %v", err)
221+
}
310222
311-
pkts, err := rtcp.Unmarshal(packet)
312-
if err != nil {
313-
logger.Errorf("UdpTansport::WriteRTP: Unmarshal rtcp receiver packets err %v", err)
314-
}
315-
316-
logger.Debugf("UdpTansport::WriteRTCP: %v read %d packets", trackType, len(pkts))
317-
223+
logger.Debugf("UdpTansport::WriteRTCP: %v read %d packets", trackType, len(pkts))
224+
*/
318225
port := c.ports[trackType]
319226

320227
if port == nil {
321228
logger.Errorf("UdpTansport::WriteRTCP: port is nil")
322229
return 0, nil
323230
}
324-
325231
return port.WriteRtcp(packet)
326232
}
327233

@@ -392,7 +298,11 @@ func (c *UdpTansport) RequestKeyFrame() error {
392298
if c.videoSSRC == 0 {
393299
return fmt.Errorf("video ssrc is 0")
394300
}
395-
pli := rtcp.PictureLossIndication{MediaSSRC: uint32(c.videoSSRC)}
301+
return c.sendPLI(c.videoSSRC)
302+
}
303+
304+
func (c *UdpTansport) sendPLI(ssrc uint32) error {
305+
pli := rtcp.PictureLossIndication{MediaSSRC: uint32(ssrc)}
396306
buf, err := pli.Marshal()
397307
if err != nil {
398308
logger.Error(err)
@@ -401,13 +311,13 @@ func (c *UdpTansport) RequestKeyFrame() error {
401311
_, errSend := c.WriteRTCP(TrackTypeVideo, buf)
402312
if errSend != nil {
403313
logger.Error(errSend)
404-
return errSend
314+
return err
405315
}
406-
logger.Infof("RequestKeyFrame: Sent PLI %v", pli)
316+
logger.Infof("Sent PLI %v", pli)
407317
return nil
408318
}
409319

410-
func (c *UdpTansport) sendPLI(ssrc uint32) error {
320+
func (c *UdpTansport) sendTntervalPlic(ssrc uint32) error {
411321
go func() {
412322
ticker := time.NewTicker(time.Second * 1)
413323
for range ticker.C {
@@ -431,3 +341,53 @@ func (c *UdpTansport) sendPLI(ssrc uint32) error {
431341
}()
432342
return nil
433343
}
344+
345+
func (c *UdpTansport) handleRtcpFeedback(packet []byte) {
346+
pkts, err := rtcp.Unmarshal(packet)
347+
if err != nil {
348+
logger.Errorf("Unmarshal rtcp receiver packets err %v", err)
349+
}
350+
var fwdPkts []rtcp.Packet
351+
pliOnce := true
352+
firOnce := true
353+
var (
354+
maxRatePacketLoss uint8
355+
expectedMinBitrate uint64
356+
)
357+
for _, pkt := range pkts {
358+
switch p := pkt.(type) {
359+
case *rtcp.PictureLossIndication:
360+
if pliOnce {
361+
fwdPkts = append(fwdPkts, p)
362+
logger.Infof("Picture Loss Indication")
363+
if c.requestKeyFrameHandler != nil {
364+
c.requestKeyFrameHandler()
365+
}
366+
pliOnce = false
367+
}
368+
case *rtcp.FullIntraRequest:
369+
if firOnce {
370+
fwdPkts = append(fwdPkts, p)
371+
logger.Infof("FullIntraRequest")
372+
if c.requestKeyFrameHandler != nil {
373+
c.requestKeyFrameHandler()
374+
}
375+
firOnce = false
376+
}
377+
case *rtcp.ReceiverEstimatedMaximumBitrate:
378+
if expectedMinBitrate == 0 || expectedMinBitrate > uint64(p.Bitrate) {
379+
expectedMinBitrate = uint64(p.Bitrate)
380+
logger.Debugf(" ReceiverEstimatedMaximumBitrate %d", expectedMinBitrate/1024)
381+
}
382+
case *rtcp.ReceiverReport:
383+
for _, r := range p.Reports {
384+
if maxRatePacketLoss == 0 || maxRatePacketLoss < r.FractionLost {
385+
maxRatePacketLoss = r.FractionLost
386+
logger.Infof("maxRatePacketLoss %d", maxRatePacketLoss)
387+
}
388+
}
389+
case *rtcp.TransportLayerNack:
390+
logger.Infof("Nack %v", p)
391+
}
392+
}
393+
}

0 commit comments

Comments
 (0)