Skip to content

Commit c6d377f

Browse files
committed
Add support of forwarding only audio
1 parent 4f1b956 commit c6d377f

4 files changed

Lines changed: 52 additions & 26 deletions

File tree

go.mod

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ replace github.com/asticode/go-astiav v0.35.1 => github.com/xaionaro-go/astiav v
2727

2828
replace github.com/bluenviron/mediacommon/v2 v2.0.1-0.20250324151931-b8ce69d15d3d => github.com/xaionaro-go/mediacommon/v2 v2.0.0-20250420012906-03d6d69ac3b7
2929

30-
replace github.com/xaionaro-go/recoder v0.0.0-20250419161432-f34684c4ea4a => ../recoder
31-
32-
replace github.com/xaionaro-go/player v0.0.0-20250420151227-ba7f6a6f220c => ../player
33-
3430
require (
3531
github.com/facebookincubator/go-belt v0.0.0-20250308011339-62fb7027b11f
3632
github.com/go-git/go-billy/v5 v5.6.2
@@ -280,7 +276,7 @@ require (
280276
github.com/spf13/pflag v1.0.6
281277
github.com/stretchr/testify v1.10.0
282278
github.com/xaionaro-go/audio v0.0.0-20250210102901-abfced9d5ef3
283-
github.com/xaionaro-go/avpipeline v0.0.0-20250421151226-691631b82df8
279+
github.com/xaionaro-go/avpipeline v0.0.0-20250426193916-e38f676d278e
284280
github.com/xaionaro-go/datacounter v1.0.4
285281
github.com/xaionaro-go/go-rtmp v0.0.0-20241009130244-1e3160f27f42
286282
github.com/xaionaro-go/grpcproxy v0.0.0-20241103205849-a8fef42e72f9
@@ -293,7 +289,7 @@ require (
293289
github.com/xaionaro-go/obs-grpc-proxy v0.0.0-20241018162120-5faf4e7a684a
294290
github.com/xaionaro-go/observability v0.0.0-20250420133500-5c4d2e045932
295291
github.com/xaionaro-go/player v0.0.0-20250420151227-ba7f6a6f220c
296-
github.com/xaionaro-go/recoder v0.0.0-20250419161432-f34684c4ea4a
292+
github.com/xaionaro-go/recoder v0.0.0-20250426194050-ce80465f22e8
297293
github.com/xaionaro-go/secret v0.0.0-20250111141743-ced12e1082c2
298294
github.com/xaionaro-go/serializable v0.0.0-20250412140540-5ac572306599
299295
github.com/xaionaro-go/timeapiio v0.0.0-20240915203246-b907cf699af3

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,6 +1053,8 @@ github.com/xaionaro-go/avmediacodec v0.0.0-20250421150856-ddd390422c21 h1:afsJFv
10531053
github.com/xaionaro-go/avmediacodec v0.0.0-20250421150856-ddd390422c21/go.mod h1:obX+/HoeX6lzM/Zuzgtm0JdG8CQ58I1isp5xSQEm+kQ=
10541054
github.com/xaionaro-go/avpipeline v0.0.0-20250421151226-691631b82df8 h1:sS+v5XLsCxcTf0mMDqE9r//o7SKhGP9pm7vVsdIeOLU=
10551055
github.com/xaionaro-go/avpipeline v0.0.0-20250421151226-691631b82df8/go.mod h1:Czl84biYuPZeILYiRiziR0yeuXKvrqQfzJ1ItjSq/o0=
1056+
github.com/xaionaro-go/avpipeline v0.0.0-20250426193916-e38f676d278e h1:aHUMT1BQBH5u2gqdx70DYEqpMOKIR1hCkGeU1aL3Kp0=
1057+
github.com/xaionaro-go/avpipeline v0.0.0-20250426193916-e38f676d278e/go.mod h1:Czl84biYuPZeILYiRiziR0yeuXKvrqQfzJ1ItjSq/o0=
10561058
github.com/xaionaro-go/datacounter v1.0.4 h1:+QMZLmu73R5WGkQfUPwlXF/JFN+Weo4iuDZkiL2wVm8=
10571059
github.com/xaionaro-go/datacounter v1.0.4/go.mod h1:Sf9vBevuV6w5iE6K3qJ9pWVKcyS60clWBUSQLjt5++c=
10581060
github.com/xaionaro-go/fyne/v2 v2.0.0-20250215180758-399edb421067 h1:58GgTbQcOCjv1ZZ46m6WQ8zqv0KEJe5C6D5Ls1oSHvc=
@@ -1099,6 +1101,8 @@ github.com/xaionaro-go/pulse v0.0.0-20241023202712-7151fa00d4bb h1:9iHPI27CYbmJD
10991101
github.com/xaionaro-go/pulse v0.0.0-20241023202712-7151fa00d4bb/go.mod h1:cpYspI6YljhkUf1WLXLLDmeaaPFc3CnGLjDZf9dZ4no=
11001102
github.com/xaionaro-go/recoder v0.0.0-20250419161432-f34684c4ea4a h1:1VZhVN2SbIQVBGSPNwPvH0SSsw28uRa9pZghSal4M4Q=
11011103
github.com/xaionaro-go/recoder v0.0.0-20250419161432-f34684c4ea4a/go.mod h1:iwwPWZ9C9zhYaDVZRBjcifODk8Rms++nfg27SwvmKCQ=
1104+
github.com/xaionaro-go/recoder v0.0.0-20250426194050-ce80465f22e8 h1:U3mCHkXfP7wYpOv4UvN8G6q1a9ZiDQqvzVt/p8Lty+o=
1105+
github.com/xaionaro-go/recoder v0.0.0-20250426194050-ce80465f22e8/go.mod h1:Jjw/CfMTflmeN1uXsYXYHaN/UD74PK6E2Jn7wKObiPQ=
11021106
github.com/xaionaro-go/secret v0.0.0-20250111141743-ced12e1082c2 h1:QHpTWfyfmz65cE0MtFXe9fScdi+X0VIYR2wgolSYEUk=
11031107
github.com/xaionaro-go/secret v0.0.0-20250111141743-ced12e1082c2/go.mod h1:XKoHGZ4VKMbVBl8VotLIoWQdrB6Q7jnR++RbkiegZFU=
11041108
github.com/xaionaro-go/serializable v0.0.0-20250412140540-5ac572306599 h1:CzcQd6wLiqgjd8K/6UzR5uyt6sg4ut/kVxi6+FJMbdI=

pkg/streamd/grpc/goconv/encoder_config.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func AudioCodecToThrift(
5555
case recoder.AudioCodecOpus:
5656
return streamd_grpc.AudioCodec_AudioCodecOpus
5757
default:
58-
panic(fmt.Errorf("unexpected codec: '%v'", codec))
58+
panic(fmt.Errorf("unexpected audio codec: '%s'", codec))
5959
}
6060
}
6161

@@ -114,7 +114,7 @@ func VideoCodecToThrift(
114114
case recoder.VideoCodecAV1:
115115
return streamd_grpc.VideoCodec_VideoCodecAV1
116116
default:
117-
panic(fmt.Errorf("unexpected codec: '%v'", codec))
117+
panic(fmt.Errorf("unexpected video codec: '%s'", codec))
118118
}
119119
}
120120

@@ -191,7 +191,7 @@ func AudioCodecFromThrift(
191191
case streamd_grpc.AudioCodec_AudioCodecOpus:
192192
return recoder.AudioCodecOpus
193193
default:
194-
panic(fmt.Errorf("unexpected codec: '%v'", codec))
194+
panic(fmt.Errorf("unexpected audio codec: '%s'", codec))
195195
}
196196
}
197197

@@ -246,7 +246,7 @@ func VideoCodecFromThrift(
246246
case streamd_grpc.VideoCodec_VideoCodecAV1:
247247
return recoder.VideoCodecAV1
248248
default:
249-
panic(fmt.Errorf("unexpected codec: '%v'", codec))
249+
panic(fmt.Errorf("unexpected video codec: '%s'", codec))
250250
}
251251
}
252252

pkg/streampanel/restream.go

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ import (
2929
xfyne "github.com/xaionaro-go/xfyne/widget"
3030
)
3131

32+
const (
33+
trackRemove = "<remove>"
34+
)
35+
3236
func (p *Panel) startRestreamPage(
3337
ctx context.Context,
3438
) {
@@ -1089,13 +1093,15 @@ func (p *Panel) openAddOrEditRestreamWindow(
10891093
videoCodecs = append(videoCodecs, videoCodec)
10901094
videoCodecStrs = append(videoCodecStrs, ptr(videoCodec).String())
10911095
}
1096+
videoCodecStrs = append(videoCodecStrs, trackRemove)
10921097

10931098
var audioCodecStrs []string
10941099
var audioCodecs []recoder.AudioCodec
10951100
for audioCodec := recoder.AudioCodecCopy; audioCodec < recoder.EndOfAudioCodec; audioCodec++ {
10961101
audioCodecs = append(audioCodecs, audioCodec)
10971102
audioCodecStrs = append(audioCodecStrs, ptr(audioCodec).String())
10981103
}
1104+
audioCodecStrs = append(audioCodecStrs, trackRemove)
10991105

11001106
recodingVideoLabel := widget.NewLabel("Video:")
11011107
recodingAudioLabel := widget.NewLabel("Audio:")
@@ -1113,14 +1119,21 @@ func (p *Panel) openAddOrEditRestreamWindow(
11131119
recodingVideoBitrate.SetText(fmt.Sprintf("%d", uint(*q)))
11141120
}
11151121
recodingVideoCodecSelector := widget.NewSelect(videoCodecStrs, func(s string) {
1116-
if s == ptr(recoder.VideoCodecCopy).String() {
1122+
switch s {
1123+
case ptr(recoder.VideoCodecCopy).String():
11171124
recodingVideoBitrate.Disable()
1118-
} else {
1125+
fwd.Encode.OutputVideoTracks = fwd.Encode.OutputVideoTracks[:1]
1126+
fwd.Encode.OutputVideoTracks[0].Config.Codec = recoder.VideoCodecCopy
1127+
case trackRemove:
1128+
recodingVideoBitrate.Disable()
1129+
fwd.Encode.OutputVideoTracks = fwd.Encode.OutputVideoTracks[:0]
1130+
default:
11191131
recodingVideoBitrate.Enable()
1120-
}
1121-
for _, videoCodec := range videoCodecs {
1122-
if ptr(videoCodec).String() == s {
1123-
fwd.Encode.OutputVideoTracks[0].Config.Codec = videoCodec
1132+
fwd.Encode.OutputVideoTracks = fwd.Encode.OutputVideoTracks[:1]
1133+
for _, videoCodec := range videoCodecs {
1134+
if ptr(videoCodec).String() == s {
1135+
fwd.Encode.OutputVideoTracks[0].Config.Codec = videoCodec
1136+
}
11241137
}
11251138
}
11261139
})
@@ -1142,14 +1155,21 @@ func (p *Panel) openAddOrEditRestreamWindow(
11421155
recodingAudioBitrate.SetText(fmt.Sprintf("%d", uint(*q)))
11431156
}
11441157
recodingAudioCodecSelector := widget.NewSelect(audioCodecStrs, func(s string) {
1145-
if s == ptr(recoder.AudioCodecCopy).String() {
1158+
switch s {
1159+
case ptr(recoder.AudioCodecCopy).String():
11461160
recodingAudioBitrate.Disable()
1147-
} else {
1161+
fwd.Encode.OutputAudioTracks = fwd.Encode.OutputAudioTracks[:1]
1162+
fwd.Encode.OutputAudioTracks[0].Config.Codec = recoder.AudioCodecCopy
1163+
case trackRemove:
1164+
recodingAudioBitrate.Disable()
1165+
fwd.Encode.OutputAudioTracks = fwd.Encode.OutputAudioTracks[:0]
1166+
default:
11481167
recodingAudioBitrate.Enable()
1149-
}
1150-
for _, audioCodec := range audioCodecs {
1151-
if ptr(audioCodec).String() == s {
1152-
fwd.Encode.OutputAudioTracks[0].Config.Codec = audioCodec
1168+
fwd.Encode.OutputAudioTracks = fwd.Encode.OutputAudioTracks[:1]
1169+
for _, audioCodec := range audioCodecs {
1170+
if ptr(audioCodec).String() == s {
1171+
fwd.Encode.OutputAudioTracks[0].Config.Codec = audioCodec
1172+
}
11531173
}
11541174
}
11551175
})
@@ -1440,10 +1460,16 @@ func (p *Panel) displayStreamForwards(
14401460
if fwd.Quirks.StartAfterYoutubeRecognizedStream.Enabled {
14411461
quirksStrings = append(quirksStrings, "after-YT")
14421462
}
1443-
if fwd.Encode.Enabled && len(fwd.Encode.OutputVideoTracks) > 0 && len(fwd.Encode.OutputAudioTracks) > 0 {
1444-
videoTrack := fwd.Encode.OutputVideoTracks[0]
1445-
audioTrack := fwd.Encode.OutputAudioTracks[0]
1446-
captionStr += fmt.Sprintf(" [%s/%s]", videoTrack.Config.Codec.String(), audioTrack.Config.Codec.String())
1463+
if fwd.Encode.Enabled {
1464+
audioTrackCodecString := "<removed>"
1465+
videoTrackCodecString := "<removed>"
1466+
if len(fwd.Encode.OutputVideoTracks) > 0 {
1467+
videoTrackCodecString = fwd.Encode.OutputVideoTracks[0].Config.Codec.String()
1468+
}
1469+
if len(fwd.Encode.OutputAudioTracks) > 0 {
1470+
audioTrackCodecString = fwd.Encode.OutputAudioTracks[0].Config.Codec.String()
1471+
}
1472+
captionStr += fmt.Sprintf(" [%s/%s]", videoTrackCodecString, audioTrackCodecString)
14471473
}
14481474
if len(quirksStrings) != 0 {
14491475
captionStr += fmt.Sprintf(" (%s)", strings.Join(quirksStrings, ","))

0 commit comments

Comments
 (0)