Skip to content

Commit 4085ef3

Browse files
Add support for IMAGE_SUFFIX_NONE_OVERWRITE (#895)
Allow only keeping the latest image with ImageOutput
1 parent 7ea6d01 commit 4085ef3

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

go.mod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ require (
2323
github.com/gorilla/websocket v1.5.3
2424
github.com/livekit/livekit-server v1.8.1-0.20241220025800-08b58a23afdc
2525
github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1
26-
github.com/livekit/protocol v1.36.2-0.20250409225025-9c8b99db90f5
26+
github.com/livekit/protocol v1.36.2-0.20250421173646-62b2525e9494
2727
github.com/livekit/psrpc v0.6.1-0.20250205181828-a0beed2e4126
2828
github.com/livekit/server-sdk-go/v2 v2.4.3-0.20250219104850-1477da59f27c
2929
github.com/pion/rtp v1.8.11
@@ -99,6 +99,8 @@ require (
9999
github.com/google/s2a-go v0.1.8 // indirect
100100
github.com/google/uuid v1.6.0 // indirect
101101
github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
102+
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
103+
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
102104
github.com/jellydator/ttlcache/v3 v3.3.0 // indirect
103105
github.com/josharian/intern v1.0.0 // indirect
104106
github.com/jxskiss/base62 v1.1.0 // indirect

go.sum

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ github.com/envoyproxy/go-control-plane v0.13.1/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQ
157157
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
158158
github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM=
159159
github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4=
160+
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
161+
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
160162
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
161163
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
162164
github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk=
@@ -231,6 +233,12 @@ github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrk
231233
github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
232234
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
233235
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
236+
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
237+
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
238+
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
239+
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
240+
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
241+
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
234242
github.com/jellydator/ttlcache/v3 v3.3.0 h1:BdoC9cE81qXfrxeb9eoJi9dWrdhSuwXMAnHTbnBm4Wc=
235243
github.com/jellydator/ttlcache/v3 v3.3.0/go.mod h1:bj2/e0l4jRnQdrnSTaGTsh4GSXvMjQcy41i7th0GVGw=
236244
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -260,8 +268,8 @@ github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1 h1:jm09419p0lqTkD
260268
github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1/go.mod h1:Rs3MhFwutWhGwmY1VQsygw28z5bWcnEYmS1OG9OxjOQ=
261269
github.com/livekit/mediatransportutil v0.0.0-20241220010243-a2bdee945564 h1:GX7KF/V9ExmcfT/2Bdia8aROjkxrgx7WpyH7w9MB4J4=
262270
github.com/livekit/mediatransportutil v0.0.0-20241220010243-a2bdee945564/go.mod h1:36s+wwmU3O40IAhE+MjBWP3W71QRiEE9SfooSBvtBqY=
263-
github.com/livekit/protocol v1.36.2-0.20250409225025-9c8b99db90f5 h1:N0yFqrRS8obhf+/wyRW/OpdayMzGs5rbSmDVs/dB+mM=
264-
github.com/livekit/protocol v1.36.2-0.20250409225025-9c8b99db90f5/go.mod h1:WrT/CYRxtMNOVUjnIPm5OjWtEkmreffTeE1PRZwlRg4=
271+
github.com/livekit/protocol v1.36.2-0.20250421173646-62b2525e9494 h1:ZUgWXlP9GWcFOSiOR3i+5gIMY7Cb6OOa38lckkQ68DA=
272+
github.com/livekit/protocol v1.36.2-0.20250421173646-62b2525e9494/go.mod h1:WrT/CYRxtMNOVUjnIPm5OjWtEkmreffTeE1PRZwlRg4=
265273
github.com/livekit/psrpc v0.6.1-0.20250205181828-a0beed2e4126 h1:fzuYpAQbCid7ySPpQWWePfQOWUrs8x6dJ0T3Wl07n+Y=
266274
github.com/livekit/psrpc v0.6.1-0.20250205181828-a0beed2e4126/go.mod h1:X5WtEZ7OnEs72Fi5/J+i0on3964F1aynQpCalcgMqRo=
267275
github.com/livekit/server-sdk-go/v2 v2.4.3-0.20250219104850-1477da59f27c h1:9II0uDPpm2dZ1rpOOL5JHu5oTFwq9l9jadsPGIC8NTU=
@@ -272,8 +280,12 @@ github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg=
272280
github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
273281
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
274282
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
283+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
284+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
275285
github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI=
276286
github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E=
287+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
288+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
277289
github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0=
278290
github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc=
279291
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=

pkg/pipeline/sink/image.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ package sink
1616

1717
import (
1818
"fmt"
19-
"os"
2019
"path"
2120
"strings"
2221
"time"
2322

2423
"github.com/frostbyte73/core"
2524

2625
"github.com/livekit/egress/pkg/config"
26+
"github.com/livekit/egress/pkg/errors"
2727
"github.com/livekit/egress/pkg/gstreamer"
2828
"github.com/livekit/egress/pkg/pipeline/builder"
2929
"github.com/livekit/egress/pkg/pipeline/sink/uploader"
@@ -117,16 +117,18 @@ func (s *ImageSink) handleNewImage(update *imageUpdate) error {
117117
filename := update.filename
118118
ts := s.getImageTime(update.timestamp)
119119
imageLocalPath := path.Join(s.LocalDir, filename)
120-
if s.ImageSuffix == livekit.ImageFileSuffix_IMAGE_SUFFIX_TIMESTAMP {
121-
newFilename := fmt.Sprintf("%s_%s%03d%s", s.ImagePrefix, ts.Format("20060102150405"), ts.UnixMilli()%1000, types.FileExtensionForOutputType[s.OutputType])
122-
newImageLocalPath := path.Join(s.LocalDir, newFilename)
123-
124-
err := os.Rename(imageLocalPath, newImageLocalPath)
125-
if err != nil {
126-
return err
120+
if s.ImageSuffix != livekit.ImageFileSuffix_IMAGE_SUFFIX_INDEX {
121+
var newFilename string
122+
123+
if s.ImageSuffix == livekit.ImageFileSuffix_IMAGE_SUFFIX_TIMESTAMP {
124+
newFilename = fmt.Sprintf("%s_%s%03d%s", s.ImagePrefix, ts.Format("20060102150405"), ts.UnixMilli()%1000, types.FileExtensionForOutputType[s.OutputType])
125+
} else if s.ImageSuffix == livekit.ImageFileSuffix_IMAGE_SUFFIX_NONE_OVERWRITE {
126+
newFilename = fmt.Sprintf("%s%s", s.ImagePrefix, types.FileExtensionForOutputType[s.OutputType])
127+
} else {
128+
return errors.ErrNotSupported(s.ImageSuffix.String())
127129
}
130+
128131
filename = newFilename
129-
imageLocalPath = newImageLocalPath
130132
}
131133

132134
imageStoragePath := path.Join(s.StorageDir, filename)

0 commit comments

Comments
 (0)