Skip to content

Commit 7969942

Browse files
authored
Revert "Use RTPConverter from protocol/utils. (#779)" (#780)
This reverts commit 8a3c802.
1 parent 8a3c802 commit 7969942

File tree

4 files changed

+84
-44
lines changed

4 files changed

+84
-44
lines changed

go.mod

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,27 @@ require (
1010
github.com/livekit/mageutil v0.0.0-20250511045019-0f1ff63f7731
1111
github.com/livekit/media-sdk v0.0.0-20250927154350-bd99739b439b
1212
github.com/livekit/mediatransportutil v0.0.0-20250825135402-7bc31f107ade
13-
github.com/livekit/protocol v1.42.3-0.20251022070801-a1e0e55a5c55
13+
github.com/livekit/protocol v1.42.2-0.20251016024155-8cf58ff15ac6
1414
github.com/magefile/mage v1.15.0
1515
github.com/pion/dtls/v3 v3.0.7
1616
github.com/pion/interceptor v0.1.41
17-
github.com/pion/rtcp v1.2.16
18-
github.com/pion/rtp v1.8.24
17+
github.com/pion/rtcp v1.2.15
18+
github.com/pion/rtp v1.8.23
1919
github.com/pion/sdp/v3 v3.0.16
2020
github.com/pion/webrtc/v4 v4.1.6
2121
github.com/stretchr/testify v1.11.1
2222
github.com/twitchtv/twirp v8.1.3+incompatible
2323
go.uber.org/atomic v1.11.0
2424
golang.org/x/crypto v0.43.0
25-
golang.org/x/exp v0.0.0-20251017212417-90e834f514db
25+
golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b
2626
google.golang.org/protobuf v1.36.10
2727
)
2828

2929
require (
3030
github.com/moby/buildkit v0.25.1
3131
github.com/moby/patternmatcher v0.6.0
32+
github.com/pelletier/go-toml v1.9.5
33+
github.com/schollz/progressbar/v3 v3.18.0
3234
golang.org/x/mod v0.29.0
3335
)
3436

@@ -58,6 +60,7 @@ require (
5860
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 // indirect
5961
github.com/in-toto/in-toto-golang v0.9.0 // indirect
6062
github.com/maxbrunsfeld/counterfeiter/v6 v6.11.3 // indirect
63+
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
6164
github.com/moby/locker v1.0.1 // indirect
6265
github.com/moby/sys/signal v0.7.1 // indirect
6366
github.com/morikuni/aec v1.0.0 // indirect
@@ -66,6 +69,7 @@ require (
6669
github.com/opencontainers/runc v1.2.3 // indirect
6770
github.com/pkg/errors v0.9.1 // indirect
6871
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
72+
github.com/rivo/uniseg v0.4.7 // indirect
6973
github.com/secure-systems-lab/go-securesystemslib v0.6.0 // indirect
7074
github.com/shibumi/go-pathspec v1.3.0 // indirect
7175
github.com/sirupsen/logrus v1.9.3 // indirect
@@ -83,6 +87,7 @@ require (
8387
go.opentelemetry.io/otel/sdk v1.37.0 // indirect
8488
go.opentelemetry.io/otel/trace v1.37.0 // indirect
8589
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
90+
golang.org/x/term v0.36.0 // indirect
8691
golang.org/x/time v0.12.0 // indirect
8792
golang.org/x/tools v0.38.0 // indirect
8893
)
@@ -109,7 +114,7 @@ require (
109114
github.com/jfreymuth/vorbis v1.0.2 // indirect
110115
github.com/joho/godotenv v1.5.1
111116
github.com/jxskiss/base62 v1.1.0 // indirect
112-
github.com/klauspost/compress v1.18.1 // indirect
117+
github.com/klauspost/compress v1.18.0 // indirect
113118
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
114119
github.com/lithammer/shortuuid/v4 v4.2.0 // indirect
115120
github.com/livekit/psrpc v0.7.0 // indirect
@@ -128,7 +133,7 @@ require (
128133
github.com/pion/turn/v4 v4.1.1 // indirect
129134
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
130135
github.com/puzpuzpuz/xsync/v3 v3.5.1 // indirect
131-
github.com/redis/go-redis/v9 v9.14.1 // indirect
136+
github.com/redis/go-redis/v9 v9.14.0 // indirect
132137
github.com/stoewer/go-strcase v1.3.1 // indirect
133138
github.com/wlynxg/anet v0.0.5 // indirect
134139
github.com/zeebo/xxh3 v1.0.2 // indirect
@@ -139,8 +144,8 @@ require (
139144
golang.org/x/sync v0.17.0
140145
golang.org/x/sys v0.37.0 // indirect
141146
golang.org/x/text v0.30.0 // indirect
142-
google.golang.org/genproto/googleapis/api v0.0.0-20251020155222-88f65dc88635 // indirect
143-
google.golang.org/genproto/googleapis/rpc v0.0.0-20251020155222-88f65dc88635 // indirect
147+
google.golang.org/genproto/googleapis/api v0.0.0-20251014184007-4626949a642f // indirect
148+
google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f // indirect
144149
google.golang.org/grpc v1.76.0 // indirect
145150
gopkg.in/hraban/opus.v2 v2.0.0-20230925203106-0188a62cb302 // indirect
146151
gopkg.in/yaml.v3 v3.0.1 // indirect

go.sum

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
3636
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
3737
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
3838
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
39+
github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM=
40+
github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY=
3941
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
4042
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
4143
github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo=
@@ -139,8 +141,8 @@ github.com/jxskiss/base62 v1.1.0 h1:A5zbF8v8WXx2xixnAKD2w+abC+sIzYJX+nxmhA6HWFw=
139141
github.com/jxskiss/base62 v1.1.0/go.mod h1:HhWAlUXvxKThfOlZbcuFzsqwtF5TcqS9ru3y5GfjWAc=
140142
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
141143
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
142-
github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co=
143-
github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0=
144+
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
145+
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
144146
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
145147
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
146148
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
@@ -155,14 +157,18 @@ github.com/livekit/media-sdk v0.0.0-20250927154350-bd99739b439b h1:dPf9i0JPyf0Sg
155157
github.com/livekit/media-sdk v0.0.0-20250927154350-bd99739b439b/go.mod h1:7ssWiG+U4xnbvLih9WiZbhQP6zIKMjgXdUtIE1bm/E8=
156158
github.com/livekit/mediatransportutil v0.0.0-20250825135402-7bc31f107ade h1:lpxPcglwzUWNB4J0S2qZuyMehzmR7vW9whzSwV4IGoI=
157159
github.com/livekit/mediatransportutil v0.0.0-20250825135402-7bc31f107ade/go.mod h1:mSNtYzSf6iY9xM3UX42VEI+STHvMgHmrYzEHPcdhB8A=
158-
github.com/livekit/protocol v1.42.3-0.20251022070801-a1e0e55a5c55 h1:bWD8TWLbI+t+DIVUSyqKrxtTQHIkRQoY5Tkw5JpTwMQ=
159-
github.com/livekit/protocol v1.42.3-0.20251022070801-a1e0e55a5c55/go.mod h1:m8IMgMd9FUi3HnCBQMDExVumbmVfiJy9/xKOifDAQtY=
160+
github.com/livekit/protocol v1.42.2-0.20251016024155-8cf58ff15ac6 h1:Tby1v0yn0XCXl9nBVnZI9M1cQW/0o4E/ejzRgcaMETI=
161+
github.com/livekit/protocol v1.42.2-0.20251016024155-8cf58ff15ac6/go.mod h1:vhMS30QoEyH2p34vi6X1eWkC4EMV72ZGZwQb74ajY7A=
160162
github.com/livekit/psrpc v0.7.0 h1:rtfqfjYN06WJYloE/S0nmkJ/Y04x4pxLQLe8kQ4FVHU=
161163
github.com/livekit/psrpc v0.7.0/go.mod h1:AuDC5uOoEjQJEc69v4Li3t77Ocz0e0NdjQEuFfO+vfk=
162164
github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg=
163165
github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
166+
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
167+
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
164168
github.com/maxbrunsfeld/counterfeiter/v6 v6.11.3 h1:Eaq36EIyJNp7b3qDhjV7jmDVq/yPeW2v4pTqzGbOGB4=
165169
github.com/maxbrunsfeld/counterfeiter/v6 v6.11.3/go.mod h1:6KKUoQBZBW6PDXJtNfqeEjPXMj/ITTk+cWK9t9uS5+E=
170+
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
171+
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
166172
github.com/moby/buildkit v0.25.1 h1:j7IlVkeNbEo+ZLoxdudYCHpmTsbwKvhgc/6UJ/mY/o8=
167173
github.com/moby/buildkit v0.25.1/go.mod h1:phM8sdqnvgK2y1dPDnbwI6veUCXHOZ6KFSl6E164tkc=
168174
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
@@ -221,10 +227,10 @@ github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM=
221227
github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA=
222228
github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=
223229
github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=
224-
github.com/pion/rtcp v1.2.16 h1:fk1B1dNW4hsI78XUCljZJlC4kZOPk67mNRuQ0fcEkSo=
225-
github.com/pion/rtcp v1.2.16/go.mod h1:/as7VKfYbs5NIb4h6muQ35kQF/J0ZVNz2Z3xKoCBYOo=
226-
github.com/pion/rtp v1.8.24 h1:+ICyZXUQDv95EsHN70RrA4XKJf5MGWyC6QQc1u6/ynI=
227-
github.com/pion/rtp v1.8.24/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM=
230+
github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo=
231+
github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0=
232+
github.com/pion/rtp v1.8.23 h1:kxX3bN4nM97DPrVBGq5I/Xcl332HnTHeP1Swx3/MCnU=
233+
github.com/pion/rtp v1.8.23/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM=
228234
github.com/pion/sctp v1.8.40 h1:bqbgWYOrUhsYItEnRObUYZuzvOMsVplS3oNgzedBlG8=
229235
github.com/pion/sctp v1.8.40/go.mod h1:SPBBUENXE6ThkEksN5ZavfAhFYll+h+66ZiG6IZQuzo=
230236
github.com/pion/sdp/v3 v3.0.16 h1:0dKzYO6gTAvuLaAKQkC02eCPjMIi4NuAr/ibAwrGDCo=
@@ -250,10 +256,14 @@ github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzM
250256
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
251257
github.com/puzpuzpuz/xsync/v3 v3.5.1 h1:GJYJZwO6IdxN/IKbneznS6yPkVC+c3zyY/j19c++5Fg=
252258
github.com/puzpuzpuz/xsync/v3 v3.5.1/go.mod h1:VjzYrABPabuM4KyBh1Ftq6u8nhwY5tBPKP9jpmh0nnA=
253-
github.com/redis/go-redis/v9 v9.14.1 h1:nDCrEiJmfOWhD76xlaw+HXT0c9hfNWeXgl0vIRYSDvQ=
254-
github.com/redis/go-redis/v9 v9.14.1/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
259+
github.com/redis/go-redis/v9 v9.14.0 h1:u4tNCjXOyzfgeLN+vAZaW1xUooqWDqVEsZN0U01jfAE=
260+
github.com/redis/go-redis/v9 v9.14.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
261+
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
262+
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
255263
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
256264
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
265+
github.com/schollz/progressbar/v3 v3.18.0 h1:uXdoHABRFmNIjUfte/Ex7WtuyVslrw2wVPQmCN62HpA=
266+
github.com/schollz/progressbar/v3 v3.18.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec=
257267
github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8=
258268
github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM=
259269
github.com/secure-systems-lab/go-securesystemslib v0.6.0 h1:T65atpAVCJQK14UA57LMdZGpHi4QYSH/9FZyNGqMYIA=
@@ -346,8 +356,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
346356
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
347357
golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
348358
golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
349-
golang.org/x/exp v0.0.0-20251017212417-90e834f514db h1:by6IehL4BH5k3e3SJmcoNbOobMey2SLpAF79iPOEBvw=
350-
golang.org/x/exp v0.0.0-20251017212417-90e834f514db/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
359+
golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b h1:18qgiDvlvH7kk8Ioa8Ov+K6xCi0GMvmGfGW0sgd/SYA=
360+
golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
351361
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
352362
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
353363
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
@@ -416,10 +426,10 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
416426
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
417427
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
418428
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
419-
google.golang.org/genproto/googleapis/api v0.0.0-20251020155222-88f65dc88635 h1:1wvBeYv+A2zfEbxROscJl69OP0m74S8wGEO+Syat26o=
420-
google.golang.org/genproto/googleapis/api v0.0.0-20251020155222-88f65dc88635/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo=
421-
google.golang.org/genproto/googleapis/rpc v0.0.0-20251020155222-88f65dc88635 h1:3uycTxukehWrxH4HtPRtn1PDABTU331ViDjyqrUbaog=
422-
google.golang.org/genproto/googleapis/rpc v0.0.0-20251020155222-88f65dc88635/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
429+
google.golang.org/genproto/googleapis/api v0.0.0-20251014184007-4626949a642f h1:OiFuztEyBivVKDvguQJYWq1yDcfAHIID/FVrPR4oiI0=
430+
google.golang.org/genproto/googleapis/api v0.0.0-20251014184007-4626949a642f/go.mod h1:kprOiu9Tr0JYyD6DORrc4Hfyk3RFXqkQ3ctHEum3ZbM=
431+
google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f h1:1FTH6cpXFsENbPR5Bu8NQddPSaUUE6NA2XdZdDSAJK4=
432+
google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
423433
google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A=
424434
google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c=
425435
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=

pkg/synchronizer/track.go

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import (
2929
"github.com/livekit/media-sdk/jitter"
3030
"github.com/livekit/mediatransportutil"
3131
"github.com/livekit/protocol/logger"
32-
"github.com/livekit/protocol/utils"
3332
"github.com/livekit/protocol/utils/mono"
3433
)
3534

@@ -59,7 +58,7 @@ type TrackSynchronizer struct {
5958
sync *Synchronizer
6059
track TrackRemote
6160
logger logger.Logger
62-
*utils.RTPConverter
61+
*rtpConverter
6362
startGate startGate
6463

6564
// config
@@ -117,7 +116,7 @@ func newTrackSynchronizer(s *Synchronizer, track TrackRemote) *TrackSynchronizer
117116
sync: s,
118117
track: track,
119118
logger: logger.GetLogger().WithValues("trackID", track.ID(), "codec", track.Codec().MimeType),
120-
RTPConverter: utils.NewRTPConverter(int64(track.Codec().ClockRate)),
119+
rtpConverter: newRTPConverter(int64(track.Codec().ClockRate)),
121120
maxTsDiff: s.config.MaxTsDiff,
122121
maxDriftAdjustment: s.config.MaxDriftAdjustment,
123122
driftAdjustmentWindowPercent: s.config.DriftAdjustmentWindowPercent,
@@ -305,7 +304,7 @@ func (t *TrackSynchronizer) getPTSWithoutRebase(pkt jitter.ExtPacket) (time.Dura
305304
// start with estimated PTS to absorb any start latency
306305
pts = max(time.Nanosecond, estimatedPTS) // prevent lastPTS from being stuck at 0
307306
} else {
308-
pts = t.lastPTS + t.ToDuration(ts-t.lastTS)
307+
pts = t.lastPTS + t.toDuration(ts-t.lastTS)
309308
}
310309

311310
if pts < t.lastPTS || !t.acceptable(pts-estimatedPTS) {
@@ -436,7 +435,7 @@ func (t *TrackSynchronizer) getPTSWithRebase(pkt jitter.ExtPacket) (time.Duratio
436435
// start with estimated PTS to absorb any start latency
437436
pts = max(time.Nanosecond, estimatedPTS) // prevent lastPTS from being stuck at 0
438437
} else {
439-
pts = t.lastPTS + t.ToDuration(ts-t.lastTS)
438+
pts = t.lastPTS + t.toDuration(ts-t.lastTS)
440439
}
441440

442441
if pts < t.lastPTS || !t.acceptable(pts-estimatedPTS) {
@@ -544,9 +543,9 @@ func (t *TrackSynchronizer) onSenderReportWithoutRebase(pkt *rtcp.SenderReport)
544543

545544
var pts time.Duration
546545
if pkt.RTPTime > t.lastTS {
547-
pts = t.lastPTS + t.ToDuration(pkt.RTPTime-t.lastTS)
546+
pts = t.lastPTS + t.toDuration(pkt.RTPTime-t.lastTS)
548547
} else {
549-
pts = t.lastPTS - t.ToDuration(t.lastTS-pkt.RTPTime)
548+
pts = t.lastPTS - t.toDuration(t.lastTS-pkt.RTPTime)
550549
}
551550
if !t.acceptable(pts - time.Since(t.startTime)) {
552551
t.logger.Infow(
@@ -616,9 +615,9 @@ func (t *TrackSynchronizer) onSenderReportWithRebase(pkt *rtcp.SenderReport) {
616615

617616
var ptsSR time.Duration
618617
if (pkt.RTPTime - t.lastTS) < (1 << 31) {
619-
ptsSR = t.lastPTS + t.ToDuration(pkt.RTPTime-t.lastTS)
618+
ptsSR = t.lastPTS + t.toDuration(pkt.RTPTime-t.lastTS)
620619
} else {
621-
ptsSR = t.lastPTS - t.ToDuration(t.lastTS-pkt.RTPTime)
620+
ptsSR = t.lastPTS - t.toDuration(t.lastTS-pkt.RTPTime)
622621
}
623622
if !t.acceptable(ptsSR - time.Since(t.startTime)) {
624623
t.logger.Infow(
@@ -702,7 +701,7 @@ func (t *TrackSynchronizer) maybeAdjustStartTime(asr *augmentedSenderReport) int
702701
// in some network element along the way), push back first time
703702
// to an earlier instance.
704703
timeSinceReceive := time.Duration(nowNano - asr.receivedAtAdjusted)
705-
nowTS := asr.RTPTime + t.ToRTP(timeSinceReceive)
704+
nowTS := asr.RTPTime + t.toRTP(timeSinceReceive)
706705
samplesDiff := nowTS - t.startRTP
707706
if int32(samplesDiff) < 0 {
708707
// out-of-order, pre-start, skip
@@ -717,7 +716,7 @@ func (t *TrackSynchronizer) maybeAdjustStartTime(asr *augmentedSenderReport) int
717716
return 0
718717
}
719718

720-
samplesDuration := t.ToDuration(samplesDiff)
719+
samplesDuration := t.toDuration(samplesDiff)
721720
timeSinceStart := time.Duration(nowNano - startTimeNano)
722721
now := startTimeNano + timeSinceStart.Nanoseconds()
723722
adjustedStartTimeNano := now - samplesDuration.Nanoseconds()
@@ -932,6 +931,33 @@ func (t *TrackSynchronizer) MarshalLogObject(e zapcore.ObjectEncoder) error {
932931

933932
// ---------------------------
934933

934+
type rtpConverter struct {
935+
ts uint64
936+
rtp uint64
937+
}
938+
939+
func newRTPConverter(clockRate int64) *rtpConverter {
940+
ts := time.Second.Nanoseconds()
941+
for _, i := range []int64{10, 3, 2} {
942+
for ts%i == 0 && clockRate%i == 0 {
943+
ts /= i
944+
clockRate /= i
945+
}
946+
}
947+
948+
return &rtpConverter{ts: uint64(ts), rtp: uint64(clockRate)}
949+
}
950+
951+
func (c *rtpConverter) toDuration(rtpDuration uint32) time.Duration {
952+
return time.Duration(uint64(rtpDuration) * c.ts / c.rtp)
953+
}
954+
955+
func (c *rtpConverter) toRTP(duration time.Duration) uint32 {
956+
return uint32(duration.Nanoseconds() * int64(c.rtp) / int64(c.ts))
957+
}
958+
959+
// -----------------------------
960+
935961
type augmentedSenderReport struct {
936962
*rtcp.SenderReport
937963
receivedAt int64

0 commit comments

Comments
 (0)