diff --git a/cmd/lk/join.go b/cmd/lk/join.go index 1eddb22e..a646a7d7 100644 --- a/cmd/lk/join.go +++ b/cmd/lk/join.go @@ -170,6 +170,7 @@ func _deprecatedJoinRoom(ctx context.Context, cmd *cli.Command) error { if cmd.StringSlice("publish") != nil { fps := cmd.Float("fps") + h26xStreamingFormat := cmd.String("h26x-streaming-format") for _, pub := range cmd.StringSlice("publish") { onPublishComplete := func(pub *lksdk.LocalTrackPublication) { if cmd.Bool("exit-after-publish") { @@ -181,7 +182,7 @@ func _deprecatedJoinRoom(ctx context.Context, cmd *cli.Command) error { _ = room.LocalParticipant.UnpublishTrack(pub.SID()) } } - if err = handlePublish(room, pub, fps, onPublishComplete); err != nil { + if err = handlePublish(room, pub, fps, h26xStreamingFormat, onPublishComplete); err != nil { return err } } @@ -194,6 +195,7 @@ func _deprecatedJoinRoom(ctx context.Context, cmd *cli.Command) error { func handlePublish(room *lksdk.Room, name string, fps float64, + h26xStreamingFormat string, onPublishComplete func(pub *lksdk.LocalTrackPublication), ) error { if isSocketFormat(name) { @@ -201,9 +203,9 @@ func handlePublish(room *lksdk.Room, if err != nil { return err } - return publishSocket(room, mimeType, socketType, address, fps, onPublishComplete) + return publishSocket(room, mimeType, socketType, address, fps, h26xStreamingFormat, onPublishComplete) } - return publishFile(room, name, fps, onPublishComplete) + return publishFile(room, name, fps, h26xStreamingFormat, onPublishComplete) } func publishDemo(room *lksdk.Room) error { @@ -235,6 +237,7 @@ func publishDemo(room *lksdk.Room) error { func publishFile(room *lksdk.Room, filename string, fps float64, + h26xStreamingFormat string, onPublishComplete func(pub *lksdk.LocalTrackPublication), ) error { // Configure provider @@ -260,6 +263,15 @@ func publishFile(room *lksdk.Room, frameDuration := time.Second / time.Duration(fps) opts = append(opts, lksdk.ReaderTrackWithFrameDuration(frameDuration)) } + + switch h26xStreamingFormat { + case "annex-b": + opts = append(opts, lksdk.ReaderTrackWithH26xStreamingFormat(lksdk.H26xStreamingFormatAnnexB)) + case "length-prefixed": + opts = append(opts, lksdk.ReaderTrackWithH26xStreamingFormat(lksdk.H26xStreamingFormatLengthPrefixed)) + default: + return fmt.Errorf("unsupported h26x streaming format: %s", h26xStreamingFormat) + } } // Create track and publish @@ -312,6 +324,7 @@ func publishSocket(room *lksdk.Room, socketType string, address string, fps float64, + h26xStreamingFormat string, onPublishComplete func(pub *lksdk.LocalTrackPublication), ) error { var mime string @@ -333,7 +346,7 @@ func publishSocket(room *lksdk.Room, } // Publish to room - err = publishReader(room, sock, mime, fps, onPublishComplete) + err = publishReader(room, sock, mime, fps, h26xStreamingFormat, onPublishComplete) return err } @@ -341,6 +354,7 @@ func publishReader(room *lksdk.Room, in io.ReadCloser, mime string, fps float64, + h26xStreamingFormat string, onPublishComplete func(pub *lksdk.LocalTrackPublication), ) error { // Configure provider @@ -358,6 +372,15 @@ func publishReader(room *lksdk.Room, frameDuration := time.Second / time.Duration(fps) opts = append(opts, lksdk.ReaderTrackWithFrameDuration(frameDuration)) } + + switch h26xStreamingFormat { + case "annex-b": + opts = append(opts, lksdk.ReaderTrackWithH26xStreamingFormat(lksdk.H26xStreamingFormatAnnexB)) + case "length-prefixed": + opts = append(opts, lksdk.ReaderTrackWithH26xStreamingFormat(lksdk.H26xStreamingFormatLengthPrefixed)) + default: + return fmt.Errorf("unsupported h26x streaming format: %s", h26xStreamingFormat) + } } // Create track and publish @@ -414,7 +437,7 @@ func parseSimulcastURL(url string) (*simulcastURLParts, error) { } // createSimulcastVideoTrack creates a simulcast video track from a TCP or Unix socket H.264 streams -func createSimulcastVideoTrack(urlParts *simulcastURLParts, quality livekit.VideoQuality, fps float64, onComplete func()) (*lksdk.LocalTrack, error) { +func createSimulcastVideoTrack(urlParts *simulcastURLParts, quality livekit.VideoQuality, fps float64, h26xStreamingFormat string, onComplete func()) (*lksdk.LocalTrack, error) { conn, err := net.Dial(urlParts.network, urlParts.address) if err != nil { return nil, fmt.Errorf("failed to connect to %s://%s: %w", urlParts.network, urlParts.address, err) @@ -433,6 +456,15 @@ func createSimulcastVideoTrack(urlParts *simulcastURLParts, quality livekit.Vide opts = append(opts, lksdk.ReaderTrackWithFrameDuration(frameDuration)) } + switch h26xStreamingFormat { + case "annex-b": + opts = append(opts, lksdk.ReaderTrackWithH26xStreamingFormat(lksdk.H26xStreamingFormatAnnexB)) + case "length-prefixed": + opts = append(opts, lksdk.ReaderTrackWithH26xStreamingFormat(lksdk.H26xStreamingFormatLengthPrefixed)) + default: + return nil, fmt.Errorf("unsupported h26x streaming format: %s", h26xStreamingFormat) + } + // Configure simulcast layer opts = append(opts, lksdk.ReaderTrackWithSampleOptions(lksdk.WithSimulcast("simulcast", &livekit.VideoLayer{ Quality: quality, @@ -452,7 +484,7 @@ type simulcastLayer struct { } // handleSimulcastPublish handles publishing multiple H.264 streams as a simulcast track -func handleSimulcastPublish(room *lksdk.Room, urls []string, fps float64, onPublishComplete func(*lksdk.LocalTrackPublication)) error { +func handleSimulcastPublish(room *lksdk.Room, urls []string, fps float64, h26xStreamingFormat string, onPublishComplete func(*lksdk.LocalTrackPublication)) error { // Parse all URLs var layers []simulcastLayer for _, url := range urls { @@ -515,7 +547,7 @@ func handleSimulcastPublish(room *lksdk.Room, urls []string, fps float64, onPubl } for _, layer := range layers { - track, err := createSimulcastVideoTrack(layer.parts, layer.quality, fps, signalCompletion) + track, err := createSimulcastVideoTrack(layer.parts, layer.quality, fps, h26xStreamingFormat, signalCompletion) if err != nil { // Clean up any tracks we've already created for _, t := range tracks { diff --git a/cmd/lk/room.go b/cmd/lk/room.go index f5a5d4ac..6db7a9ac 100644 --- a/cmd/lk/room.go +++ b/cmd/lk/room.go @@ -172,6 +172,11 @@ var ( Name: "fps", Usage: "If video files are published, indicates `FPS` of video", }, + &cli.StringFlag{ + Name: "h26x-streaming-format", + Usage: "Format to use when reading H.264 from file or socket, \"annex-b\" OR \"length-prefixed\"", + Value: "annex-b", + }, &cli.BoolFlag{ Name: "exit-after-publish", Usage: "When publishing, exit after file or stream is complete", @@ -995,6 +1000,7 @@ func joinRoom(ctx context.Context, cmd *cli.Command) error { if simulcastMode { // Handle simulcast publishing fps := cmd.Float("fps") + h26xStreamingFormat := cmd.String("h26x-streaming-format") onPublishComplete := func(pub *lksdk.LocalTrackPublication) { if exitAfterPublish { close(done) @@ -1006,12 +1012,13 @@ func joinRoom(ctx context.Context, cmd *cli.Command) error { } } - if err = handleSimulcastPublish(room, publishUrls, fps, onPublishComplete); err != nil { + if err = handleSimulcastPublish(room, publishUrls, fps, h26xStreamingFormat, onPublishComplete); err != nil { return err } } else { // Handle single publish fps := cmd.Float("fps") + h26xStreamingFormat := cmd.String("h26x-streaming-format") for _, pub := range publishUrls { onPublishComplete := func(pub *lksdk.LocalTrackPublication) { if exitAfterPublish { @@ -1023,7 +1030,7 @@ func joinRoom(ctx context.Context, cmd *cli.Command) error { _ = room.LocalParticipant.UnpublishTrack(pub.SID()) } } - if err = handlePublish(room, pub, fps, onPublishComplete); err != nil { + if err = handlePublish(room, pub, fps, h26xStreamingFormat, onPublishComplete); err != nil { return err } } diff --git a/go.mod b/go.mod index e15ecc0a..7bebb98f 100644 --- a/go.mod +++ b/go.mod @@ -12,12 +12,12 @@ require ( github.com/go-logr/logr v1.4.3 github.com/go-task/task/v3 v3.44.1 github.com/joho/godotenv v1.5.1 - github.com/livekit/protocol v1.42.3-0.20251024111301-1e3becbff5d1 - github.com/livekit/server-sdk-go/v2 v2.12.4 + github.com/livekit/protocol v1.42.3-0.20251031205738-4e56a139a2c5 + github.com/livekit/server-sdk-go/v2 v2.12.8 github.com/moby/patternmatcher v0.6.0 github.com/pelletier/go-toml v1.9.5 - github.com/pion/rtcp v1.2.15 - github.com/pion/rtp v1.8.23 + github.com/pion/rtcp v1.2.16 + github.com/pion/rtp v1.8.25 github.com/pion/webrtc/v4 v4.1.6 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/pkg/errors v0.9.1 @@ -36,7 +36,7 @@ require ( buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.10-20250912141014-52f32327d4b0.1 // indirect buf.build/go/protovalidate v1.0.0 // indirect buf.build/go/protoyaml v0.6.0 // indirect - cel.dev/expr v0.24.0 // indirect + cel.dev/expr v0.25.0 // indirect dario.cat/mergo v1.0.2 // indirect github.com/Ladicle/tabwriter v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect @@ -108,12 +108,12 @@ require ( github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jxskiss/base62 v1.1.0 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/compress v1.18.1 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/lithammer/shortuuid/v4 v4.2.0 // indirect github.com/livekit/mageutil v0.0.0-20250511045019-0f1ff63f7731 // indirect - github.com/livekit/mediatransportutil v0.0.0-20250825135402-7bc31f107ade // indirect - github.com/livekit/psrpc v0.7.0 // indirect + github.com/livekit/mediatransportutil v0.0.0-20250922175932-f537f0880397 // indirect + github.com/livekit/psrpc v0.7.1-0.20251021235041-bdebea7dacf4 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/magefile/mage v1.15.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect @@ -144,9 +144,9 @@ require ( github.com/pion/sctp v1.8.40 // indirect github.com/pion/sdp/v3 v3.0.16 // indirect github.com/pion/srtp/v3 v3.0.8 // indirect - github.com/pion/stun/v3 v3.0.0 // indirect + github.com/pion/stun/v3 v3.0.1 // indirect github.com/pion/transport/v3 v3.0.8 // indirect - github.com/pion/turn/v4 v4.1.1 // indirect + github.com/pion/turn/v4 v4.1.2 // indirect github.com/pjbgf/sha1cd v0.4.0 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -155,7 +155,7 @@ require ( github.com/prometheus/common v0.64.0 // indirect github.com/prometheus/procfs v0.16.1 // indirect github.com/puzpuzpuz/xsync/v3 v3.5.1 // indirect - github.com/redis/go-redis/v9 v9.14.0 // indirect + github.com/redis/go-redis/v9 v9.16.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/sajari/fuzzy v1.0.0 // indirect github.com/secure-systems-lab/go-securesystemslib v0.6.0 // indirect @@ -188,14 +188,14 @@ require ( go.uber.org/zap v1.27.0 // indirect go.uber.org/zap/exp v0.3.0 // indirect golang.org/x/crypto v0.43.0 // indirect - golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b // indirect + golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect golang.org/x/mod v0.29.0 // indirect golang.org/x/net v0.46.0 // indirect golang.org/x/sys v0.37.0 // indirect golang.org/x/term v0.36.0 // indirect golang.org/x/text v0.30.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251014184007-4626949a642f // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda // indirect google.golang.org/grpc v1.76.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff --git a/go.sum b/go.sum index d3bb6956..9d27a6c4 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ buf.build/go/protovalidate v1.0.0 h1:IAG1etULddAy93fiBsFVhpj7es5zL53AfB/79CVGtyY buf.build/go/protovalidate v1.0.0/go.mod h1:KQmEUrcQuC99hAw+juzOEAmILScQiKBP1Oc36vvCLW8= buf.build/go/protoyaml v0.6.0 h1:Nzz1lvcXF8YgNZXk+voPPwdU8FjDPTUV4ndNTXN0n2w= buf.build/go/protoyaml v0.6.0/go.mod h1:RgUOsBu/GYKLDSIRgQXniXbNgFlGEZnQpRAUdLAFV2Q= -cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= -cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= +cel.dev/expr v0.25.0 h1:qbCFvDJJthxLvf3TqeF9Ys7pjjWrO7LMzfYhpJUc30g= +cel.dev/expr v0.25.0/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= @@ -250,8 +250,8 @@ github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4 github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co= +github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -265,16 +265,14 @@ github.com/lithammer/shortuuid/v4 v4.2.0 h1:LMFOzVB3996a7b8aBuEXxqOBflbfPQAiVzkI github.com/lithammer/shortuuid/v4 v4.2.0/go.mod h1:D5noHZ2oFw/YaKCfGy0YxyE7M0wMbezmMjPdhyEFe6Y= github.com/livekit/mageutil v0.0.0-20250511045019-0f1ff63f7731 h1:9x+U2HGLrSw5ATTo469PQPkqzdoU7be46ryiCDO3boc= github.com/livekit/mageutil v0.0.0-20250511045019-0f1ff63f7731/go.mod h1:Rs3MhFwutWhGwmY1VQsygw28z5bWcnEYmS1OG9OxjOQ= -github.com/livekit/mediatransportutil v0.0.0-20250825135402-7bc31f107ade h1:lpxPcglwzUWNB4J0S2qZuyMehzmR7vW9whzSwV4IGoI= -github.com/livekit/mediatransportutil v0.0.0-20250825135402-7bc31f107ade/go.mod h1:mSNtYzSf6iY9xM3UX42VEI+STHvMgHmrYzEHPcdhB8A= -github.com/livekit/protocol v1.42.3-0.20251024111301-1e3becbff5d1 h1:MBlwsnh1Zf8cb4MiflfyIglEZKfodkcE6JUvp+8M9i0= -github.com/livekit/protocol v1.42.3-0.20251024111301-1e3becbff5d1/go.mod h1:ODNQZnKVH2U93PMn/NwcpPV6zOrilBpYbyncjn/rHZI= -github.com/livekit/psrpc v0.7.0 h1:rtfqfjYN06WJYloE/S0nmkJ/Y04x4pxLQLe8kQ4FVHU= -github.com/livekit/psrpc v0.7.0/go.mod h1:AuDC5uOoEjQJEc69v4Li3t77Ocz0e0NdjQEuFfO+vfk= -github.com/livekit/server-sdk-go/v2 v2.12.1 h1:6F4OWwWPcUjyhaWPNL5BE1XEJt9KzX4/10P5ADeL7xY= -github.com/livekit/server-sdk-go/v2 v2.12.1/go.mod h1:6EZr5pBYOJ4cT1i5YnZ/L+GOeOqx6e6fKtVgU8itXuc= -github.com/livekit/server-sdk-go/v2 v2.12.4 h1:pcNCgGfO7iYb3dQij7vp2Kee8kHNRSj/lJWpA/VNtN0= -github.com/livekit/server-sdk-go/v2 v2.12.4/go.mod h1:EGWi7fcsHawWOCxUIlnSHC3fzWBsCEscLkouIZEzGKY= +github.com/livekit/mediatransportutil v0.0.0-20250922175932-f537f0880397 h1:Z7j2mY+bvG05UC80MpnJkitlJju8sSDWsr0Bb4dPceo= +github.com/livekit/mediatransportutil v0.0.0-20250922175932-f537f0880397/go.mod h1:mSNtYzSf6iY9xM3UX42VEI+STHvMgHmrYzEHPcdhB8A= +github.com/livekit/protocol v1.42.3-0.20251031205738-4e56a139a2c5 h1:LBXjIaCc73coIUsHWCv0Uh7ta71GwIYcGqv/g4zixm8= +github.com/livekit/protocol v1.42.3-0.20251031205738-4e56a139a2c5/go.mod h1:TpqU2qCI1ES4Lk7PAWSgYO4RaexfVXb54ZO2hXv0Bmc= +github.com/livekit/psrpc v0.7.1-0.20251021235041-bdebea7dacf4 h1:YA5HMfNW9IPPdTSkwsyCtK9ZcNW8QpPNlkuD7UUToZE= +github.com/livekit/psrpc v0.7.1-0.20251021235041-bdebea7dacf4/go.mod h1:AuDC5uOoEjQJEc69v4Li3t77Ocz0e0NdjQEuFfO+vfk= +github.com/livekit/server-sdk-go/v2 v2.12.8 h1:dZeUrGokfl9Aw/EK4Xwu0NtNUQ6zOLXggdhlCPAtLhk= +github.com/livekit/server-sdk-go/v2 v2.12.8/go.mod h1:EGWi7fcsHawWOCxUIlnSHC3fzWBsCEscLkouIZEzGKY= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg= @@ -355,22 +353,22 @@ github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM= github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo= -github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0= -github.com/pion/rtp v1.8.23 h1:kxX3bN4nM97DPrVBGq5I/Xcl332HnTHeP1Swx3/MCnU= -github.com/pion/rtp v1.8.23/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM= +github.com/pion/rtcp v1.2.16 h1:fk1B1dNW4hsI78XUCljZJlC4kZOPk67mNRuQ0fcEkSo= +github.com/pion/rtcp v1.2.16/go.mod h1:/as7VKfYbs5NIb4h6muQ35kQF/J0ZVNz2Z3xKoCBYOo= +github.com/pion/rtp v1.8.25 h1:b8+y44GNbwOJTYWuVan7SglX/hMlicVCAtL50ztyZHw= +github.com/pion/rtp v1.8.25/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM= github.com/pion/sctp v1.8.40 h1:bqbgWYOrUhsYItEnRObUYZuzvOMsVplS3oNgzedBlG8= github.com/pion/sctp v1.8.40/go.mod h1:SPBBUENXE6ThkEksN5ZavfAhFYll+h+66ZiG6IZQuzo= github.com/pion/sdp/v3 v3.0.16 h1:0dKzYO6gTAvuLaAKQkC02eCPjMIi4NuAr/ibAwrGDCo= github.com/pion/sdp/v3 v3.0.16/go.mod h1:9tyKzznud3qiweZcD86kS0ff1pGYB3VX+Bcsmkx6IXo= github.com/pion/srtp/v3 v3.0.8 h1:RjRrjcIeQsilPzxvdaElN0CpuQZdMvcl9VZ5UY9suUM= github.com/pion/srtp/v3 v3.0.8/go.mod h1:2Sq6YnDH7/UDCvkSoHSDNDeyBcFgWL0sAVycVbAsXFg= -github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw= -github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU= +github.com/pion/stun/v3 v3.0.1 h1:jx1uUq6BdPihF0yF33Jj2mh+C9p0atY94IkdnW174kA= +github.com/pion/stun/v3 v3.0.1/go.mod h1:RHnvlKFg+qHgoKIqtQWMOJF52wsImCAf/Jh5GjX+4Tw= github.com/pion/transport/v3 v3.0.8 h1:oI3myyYnTKUSTthu/NZZ8eu2I5sHbxbUNNFW62olaYc= github.com/pion/transport/v3 v3.0.8/go.mod h1:+c2eewC5WJQHiAA46fkMMzoYZSuGzA/7E2FPrOYHctQ= -github.com/pion/turn/v4 v4.1.1 h1:9UnY2HB99tpDyz3cVVZguSxcqkJ1DsTSZ+8TGruh4fc= -github.com/pion/turn/v4 v4.1.1/go.mod h1:2123tHk1O++vmjI5VSD0awT50NywDAq5A2NNNU4Jjs8= +github.com/pion/turn/v4 v4.1.2 h1:Em2svpl6aBFa88dLhxypMUzaLjC79kWZWx8FIov01cc= +github.com/pion/turn/v4 v4.1.2/go.mod h1:ISYWfZYy0Z3tXzRpyYZHTL+U23yFQIspfxogdQ8pn9Y= github.com/pion/webrtc/v4 v4.1.6 h1:srHH2HwvCGwPba25EYJgUzgLqCQoXl1VCUnrGQMSzUw= github.com/pion/webrtc/v4 v4.1.6/go.mod h1:wKecGRlkl3ox/As/MYghJL+b/cVXMEhoPMJWPuGQFhU= github.com/pjbgf/sha1cd v0.4.0 h1:NXzbL1RvjTUi6kgYZCX3fPwwl27Q1LJndxtUDVfJGRY= @@ -394,8 +392,8 @@ github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzM github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/puzpuzpuz/xsync/v3 v3.5.1 h1:GJYJZwO6IdxN/IKbneznS6yPkVC+c3zyY/j19c++5Fg= github.com/puzpuzpuz/xsync/v3 v3.5.1/go.mod h1:VjzYrABPabuM4KyBh1Ftq6u8nhwY5tBPKP9jpmh0nnA= -github.com/redis/go-redis/v9 v9.14.0 h1:u4tNCjXOyzfgeLN+vAZaW1xUooqWDqVEsZN0U01jfAE= -github.com/redis/go-redis/v9 v9.14.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= +github.com/redis/go-redis/v9 v9.16.0 h1:OotgqgLSRCmzfqChbQyG1PHC3tLNR89DG4jdOERSEP4= +github.com/redis/go-redis/v9 v9.16.0/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -515,8 +513,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= -golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b h1:18qgiDvlvH7kk8Ioa8Ov+K6xCi0GMvmGfGW0sgd/SYA= -golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= +golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY= +golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -590,10 +588,10 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/api v0.0.0-20251014184007-4626949a642f h1:OiFuztEyBivVKDvguQJYWq1yDcfAHIID/FVrPR4oiI0= -google.golang.org/genproto/googleapis/api v0.0.0-20251014184007-4626949a642f/go.mod h1:kprOiu9Tr0JYyD6DORrc4Hfyk3RFXqkQ3ctHEum3ZbM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f h1:1FTH6cpXFsENbPR5Bu8NQddPSaUUE6NA2XdZdDSAJK4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda h1:+2XxjfsAu6vqFxwGBRcHiMaDCuZiqXGDUDVWVtrFAnE= +google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda h1:i/Q+bfisr7gq6feoJnS/DlpdwEL4ihp41fvRiM3Ork0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= diff --git a/version.go b/version.go index 904b278e..78f2f303 100644 --- a/version.go +++ b/version.go @@ -15,5 +15,5 @@ package livekitcli const ( - Version = "2.12.3" + Version = "2.12.8" )