mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-05-26 23:19:47 +00:00
internal/carrier and internal/carrier/builtin sat between transports and
engines, wrapping every engine.Session in carrier.Session +
engineByteStream/engineVideoTrack adapters that mechanically proxied every
method. That layer existed solely to translate Capabilities/AddTrack names;
no behaviour lived above engine.
Replace with internal/engine/builtin: a name-keyed registry that calls
auth.Issue and engine.New directly. Transports look up engine.Session via
enginebuiltin.Open, then type-assert engine.VideoTrackCapable for video
transports. A small per-transport engineVideoSession adapter unifies the
reconnect callback signature (engine uses func(*webrtc.DataChannel); the
transports want func()).
Updates:
- internal/engine/builtin/builtin.go: new Register/Open registry + auth
pass-through ("none") + auth-driven factories for jazz/telemost/wbstream/jitsi.
- internal/transport/datachannel/transport.go: uses engine.Session directly
via Capabilities().ByteStream check.
- internal/transport/{seichannel,videochannel,vp8channel}: each gains an
engineVideoSession adapter and routes Connect/Send/Close/AddTrack through
the engine session.
- internal/app/session: imports enginebuiltin; carrier.Available() →
enginebuiltin.Available().
- pkg/olcrtc/olcrtc.go: switches to enginebuiltin.RegisterDefaults.
- internal/carrier and internal/carrier/builtin: deleted.
- Tests rewritten to register a fakeEngineSession (implements engine.Session
+ engine.VideoTrackCapable) through enginebuiltin.Register. The e2e
memoryStream gains the same dual interface so memorySession is gone.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
package videochannel
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/openlibrecommunity/olcrtc/internal/engine"
|
|
"github.com/pion/webrtc/v4"
|
|
)
|
|
|
|
// engineVideoSession adapts engine.Session + engine.VideoTrackCapable to the
|
|
// videoSession interface the videochannel transport consumes. The wrapper
|
|
// drops the *webrtc.DataChannel argument from the engine reconnect callback
|
|
// (videochannel does not use data channels) and exposes the video-track
|
|
// helpers under shorter names.
|
|
type engineVideoSession struct {
|
|
session engine.Session
|
|
vt engine.VideoTrackCapable
|
|
}
|
|
|
|
func (v *engineVideoSession) Connect(ctx context.Context) error {
|
|
if err := v.session.Connect(ctx); err != nil {
|
|
return fmt.Errorf("connect: %w", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (v *engineVideoSession) Close() error {
|
|
if err := v.session.Close(); err != nil {
|
|
return fmt.Errorf("close: %w", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (v *engineVideoSession) SetReconnectCallback(cb func()) {
|
|
v.session.SetReconnectCallback(func(*webrtc.DataChannel) {
|
|
if cb != nil {
|
|
cb()
|
|
}
|
|
})
|
|
}
|
|
|
|
func (v *engineVideoSession) SetShouldReconnect(fn func() bool) { v.session.SetShouldReconnect(fn) }
|
|
func (v *engineVideoSession) SetEndedCallback(cb func(string)) { v.session.SetEndedCallback(cb) }
|
|
func (v *engineVideoSession) WatchConnection(ctx context.Context) {
|
|
v.session.WatchConnection(ctx)
|
|
}
|
|
func (v *engineVideoSession) CanSend() bool { return v.session.CanSend() }
|
|
|
|
func (v *engineVideoSession) AddTrack(track webrtc.TrackLocal) error {
|
|
if err := v.vt.AddVideoTrack(track); err != nil {
|
|
return fmt.Errorf("add track: %w", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (v *engineVideoSession) SetTrackHandler(cb func(*webrtc.TrackRemote, *webrtc.RTPReceiver)) {
|
|
v.vt.SetVideoTrackHandler(cb)
|
|
}
|