Files
streamctl/pkg/streamd/grpc/streamd.proto
2025-06-15 02:27:24 +01:00

790 lines
21 KiB
Protocol Buffer

syntax = "proto3";
package streamd;
option go_package = "go/streamd_grpc";
import "player/player.proto";
service StreamD {
rpc Ping(PingRequest) returns (PingReply) {}
rpc SetLoggingLevel(SetLoggingLevelRequest) returns (SetLoggingLevelReply) {}
rpc GetLoggingLevel(GetLoggingLevelRequest) returns (GetLoggingLevelReply) {}
rpc GetConfig(GetConfigRequest) returns (GetConfigReply) {}
rpc SetConfig(SetConfigRequest) returns (SetConfigReply) {}
rpc SaveConfig(SaveConfigRequest) returns (SaveConfigReply) {}
rpc SubscribeToConfigChanges(SubscribeToConfigChangesRequest) returns (stream ConfigChange) {}
rpc ResetCache(ResetCacheRequest) returns (ResetCacheReply) {}
rpc InitCache(InitCacheRequest) returns (InitCacheReply) {}
rpc StartStream(StartStreamRequest) returns (StartStreamReply) {}
rpc EndStream(EndStreamRequest) returns (EndStreamReply) {}
rpc GetStreamStatus(GetStreamStatusRequest) returns (GetStreamStatusReply) {}
rpc IsBackendEnabled(IsBackendEnabledRequest) returns (IsBackendEnabledReply) {}
rpc GetBackendInfo(GetBackendInfoRequest) returns (GetBackendInfoReply) {}
rpc SubscribeToStreamsChanges(SubscribeToStreamsChangesRequest) returns (stream StreamsChange) {}
rpc Restart(RestartRequest) returns (RestartReply) {}
rpc SetTitle(SetTitleRequest) returns (SetTitleReply) {}
rpc SetDescription(SetDescriptionRequest) returns (SetDescriptionReply) {}
rpc ApplyProfile(ApplyProfileRequest) returns (ApplyProfileReply) {}
rpc UpdateStream(UpdateStreamRequest) returns (UpdateStreamReply) {}
rpc GetVariable(GetVariableRequest) returns(GetVariableReply) {}
rpc GetVariableHash(GetVariableHashRequest) returns(GetVariableHashReply) {}
rpc SetVariable(SetVariableRequest) returns(SetVariableReply) {}
rpc EXPERIMENTAL_ReinitStreamControllers(EXPERIMENTAL_ReinitStreamControllersRequest) returns (EXPERIMENTAL_ReinitStreamControllersReply) {}
rpc SubscribeToOAuthRequests(SubscribeToOAuthRequestsRequest) returns (stream OAuthRequest) {}
rpc SubmitOAuthCode(SubmitOAuthCodeRequest) returns (SubmitOAuthCodeReply) {}
rpc ListStreamServers(ListStreamServersRequest) returns (ListStreamServersReply) {}
rpc StartStreamServer(StartStreamServerRequest) returns (StartStreamServerReply) {}
rpc StopStreamServer(StopStreamServerRequest) returns (StopStreamServerReply) {}
rpc SubscribeToStreamServersChanges(SubscribeToStreamServersChangesRequest) returns (stream StreamServersChange) {}
rpc ListStreamDestinations(ListStreamDestinationsRequest) returns (ListStreamDestinationsReply) {}
rpc AddStreamDestination(AddStreamDestinationRequest) returns (AddStreamDestinationReply) {}
rpc UpdateStreamDestination(UpdateStreamDestinationRequest) returns (UpdateStreamDestinationReply) {}
rpc RemoveStreamDestination(RemoveStreamDestinationRequest) returns (RemoveStreamDestinationReply) {}
rpc SubscribeToStreamDestinationsChanges(SubscribeToStreamDestinationsChangesRequest) returns (stream StreamDestinationsChange) {}
rpc AddIncomingStream(AddIncomingStreamRequest) returns (AddIncomingStreamReply) {}
rpc RemoveIncomingStream(RemoveIncomingStreamRequest) returns (RemoveIncomingStreamReply) {}
rpc ListIncomingStreams(ListIncomingStreamsRequest) returns (ListIncomingStreamsReply) {}
rpc SubscribeToIncomingStreamsChanges(SubscribeToIncomingStreamsChangesRequest) returns (stream IncomingStreamsChange) {}
rpc ListStreamForwards(ListStreamForwardsRequest) returns (ListStreamForwardsReply) {}
rpc AddStreamForward(AddStreamForwardRequest) returns (AddStreamForwardReply) {}
rpc UpdateStreamForward(UpdateStreamForwardRequest) returns (UpdateStreamForwardReply) {}
rpc RemoveStreamForward(RemoveStreamForwardRequest) returns (RemoveStreamForwardReply) {}
rpc SubscribeToStreamForwardsChanges(SubscribeToStreamForwardsChangesRequest) returns (stream StreamForwardsChange) {}
rpc WaitForStreamPublisher(WaitForStreamPublisherRequest) returns (stream StreamPublisher) {}
rpc AddStreamPlayer(AddStreamPlayerRequest) returns (AddStreamPlayerReply) {}
rpc RemoveStreamPlayer(RemoveStreamPlayerRequest) returns (RemoveStreamPlayerReply) {}
rpc UpdateStreamPlayer(UpdateStreamPlayerRequest) returns (UpdateStreamPlayerReply) {}
rpc ListStreamPlayers(ListStreamPlayersRequest) returns (ListStreamPlayersReply) {}
rpc GetStreamPlayer(GetStreamPlayerRequest) returns (GetStreamPlayerReply) {}
rpc SubscribeToStreamPlayersChanges(SubscribeToStreamPlayersChangesRequest) returns (stream StreamPlayersChange) {}
rpc StreamPlayerOpen(StreamPlayerOpenRequest) returns (StreamPlayerOpenReply) {}
rpc StreamPlayerProcessTitle(StreamPlayerProcessTitleRequest) returns (StreamPlayerProcessTitleReply) {}
rpc StreamPlayerGetLink(StreamPlayerGetLinkRequest) returns (StreamPlayerGetLinkReply) {}
rpc StreamPlayerEndChan(StreamPlayerEndChanRequest) returns (stream StreamPlayerEndChanReply) {}
rpc StreamPlayerIsEnded(StreamPlayerIsEndedRequest) returns (StreamPlayerIsEndedReply) {}
rpc StreamPlayerGetPosition(StreamPlayerGetPositionRequest) returns (StreamPlayerGetPositionReply) {}
rpc StreamPlayerGetLength(StreamPlayerGetLengthRequest) returns (StreamPlayerGetLengthReply) {}
rpc StreamPlayerSetSpeed(StreamPlayerSetSpeedRequest) returns (StreamPlayerSetSpeedReply) {}
rpc StreamPlayerSetPause(StreamPlayerSetPauseRequest) returns (StreamPlayerSetPauseReply) {}
rpc StreamPlayerStop(StreamPlayerStopRequest) returns (StreamPlayerStopReply) {}
rpc StreamPlayerClose(StreamPlayerCloseRequest) returns (StreamPlayerCloseReply) {}
rpc AddTimer(AddTimerRequest) returns (AddTimerReply) {}
rpc RemoveTimer(RemoveTimerRequest) returns (RemoveTimerReply) {}
rpc ListTimers(ListTimersRequest) returns (ListTimersReply) {}
rpc ListTriggerRules(ListTriggerRulesRequest) returns (ListTriggerRulesReply) {}
rpc AddTriggerRule(AddTriggerRuleRequest) returns (AddTriggerRuleReply) {}
rpc RemoveTriggerRule(RemoveTriggerRuleRequest) returns (RemoveTriggerRuleReply) {}
rpc UpdateTriggerRule(UpdateTriggerRuleRequest) returns (UpdateTriggerRuleReply) {}
rpc SubmitEvent(SubmitEventRequest) returns (SubmitEventReply) {}
rpc SubscribeToChatMessages(SubscribeToChatMessagesRequest) returns (stream ChatMessage) {}
rpc SendChatMessage(SendChatMessageRequest) returns (SendChatMessageReply) {}
rpc RemoveChatMessage(RemoveChatMessageRequest) returns (RemoveChatMessageReply) {}
rpc BanUser(BanUserRequest) returns (BanUserReply) {}
rpc GetPeerIDs(GetPeerIDsRequest) returns (GetPeerIDsReply) {}
rpc LLMGenerate(LLMGenerateRequest) returns (LLMGenerateReply) {}
}
message PingRequest {
string payloadToReturn = 1;
string payloadToIgnore = 2;
int32 requestExtraPayloadSize = 3;
}
message PingReply {
string payload = 1;
}
enum LoggingLevel {
none = 0;
fatal = 1;
panic = 2;
error = 3;
warning = 4;
info = 5;
debug = 6;
trace = 7;
}
message SetLoggingLevelRequest {
LoggingLevel loggingLevel = 1;
}
message SetLoggingLevelReply {}
message GetLoggingLevelRequest {}
message GetLoggingLevelReply {
LoggingLevel loggingLevel = 1;
}
message GetConfigRequest {}
message GetConfigReply {
string config = 1;
}
message SetConfigRequest {
string config = 1;
}
message SetConfigReply {}
message SaveConfigRequest {}
message SaveConfigReply {}
message ResetCacheRequest {}
message ResetCacheReply {}
message InitCacheRequest {}
message InitCacheReply {}
message StartStreamRequest {
string platID = 1;
string title = 2;
string description = 3;
string profile = 4;
}
message StartStreamReply {}
message EndStreamRequest {
string platID = 1;
}
message EndStreamReply {}
message GetStreamStatusRequest {
string platID = 1;
bool noCache = 2;
}
message GetStreamStatusReply {
bool isActive = 1;
optional int64 started_at = 2;
string customData = 3;
optional uint64 viewers_count = 4;
}
message GetBackendInfoRequest {
string platID = 1;
}
message GetBackendInfoReply {
bool isInitialized = 1;
string data = 2;
repeated Capability capabilities = 3;
}
message IsBackendEnabledRequest {
string platID = 1;
}
message IsBackendEnabledReply {
bool isInitialized = 1;
}
enum Capability {
capabilityUndefined = 0;
SendChatMessage = 1;
DeleteChatMessage = 2;
BanUser = 3;
}
message RestartRequest {}
message RestartReply {}
message SetTitleRequest {
string platID = 1;
string title = 2;
}
message SetTitleReply {}
message SetDescriptionRequest {
string platID = 1;
string description = 2;
}
message SetDescriptionReply {}
message ApplyProfileRequest {
string platID = 1;
string profile = 2;
}
message ApplyProfileReply {}
message UpdateStreamRequest {
string platID = 1;
string title = 2;
string description = 3;
string profile = 4;
}
message UpdateStreamReply {}
message EXPERIMENTAL_ReinitStreamControllersRequest {}
message EXPERIMENTAL_ReinitStreamControllersReply {}
message OBSOLETE_FetchConfigRequest {}
message OBSOLETE_FetchConfigReply {}
message OBSOLETE_GetGitInfoRequest {}
message OBSOLETE_GetGitInfoReply {
bool isInitialized = 1;
}
message OBSOLETE_GitReloginRequest {}
message OBSOLETE_GitReloginReply {}
message SubscribeToOAuthRequestsRequest{
int32 listenPort = 1;
}
message OAuthRequest{
string platID = 1;
string authURL = 2;
}
message GetVariableRequest {
string key = 1;
}
message GetVariableReply {
string key = 1;
bytes value = 2;
}
message GetVariableHashRequest {
string key = 1;
HashType hashType = 2;
}
message GetVariableHashReply {
string key = 1;
HashType hashType = 2;
bytes hash = 3;
}
message SetVariableRequest {
string key = 1;
bytes value = 2;
}
message SetVariableReply {}
enum HashType {
HASH_SHA1 = 0;
}
message SubmitOAuthCodeRequest {
string platID = 1;
string code = 2;
}
message SubmitOAuthCodeReply {}
enum StreamServerType {
Undefined = 0;
RTSP = 1;
RTMP = 2;
SRT = 3;
}
message TLSCertificate {
oneof TLSCertificateOneOf {
bytes X509 = 1;
}
}
message PrivateKey {
oneof PrivateKeyOneOf {
bytes PKCS8 = 1;
}
}
message StreamServer {
StreamServerType serverType = 1;
string listenAddr = 2;
bool IsTLS = 3;
uint64 WriteQueueSize = 4;
uint64 WriteTimeoutNano = 5;
uint64 ReadTimeoutNano = 6;
optional TLSCertificate ServerCert = 7;
optional PrivateKey ServerKey = 8;
}
message StreamServerStatistics {
int64 NumBytesConsumerWrote = 1;
int64 NumBytesProducerRead = 2;
}
message StreamServerWithStatistics {
StreamServer config = 1;
StreamServerStatistics statistics = 2;
}
message ListStreamServersRequest {}
message ListStreamServersReply {
repeated StreamServerWithStatistics streamServers = 1;
}
message StartStreamServerRequest {
StreamServer config = 1;
}
message StartStreamServerReply {
}
message StopStreamServerRequest {
string listenAddr = 1;
}
message StopStreamServerReply {}
message StreamDestination {
string destinationID = 1;
string url = 2;
string streamKey = 3;
}
message ListStreamDestinationsRequest {}
message ListStreamDestinationsReply {
repeated StreamDestination streamDestinations = 1;
}
message AddStreamDestinationRequest {
StreamDestination config = 1;
}
message AddStreamDestinationReply {}
message UpdateStreamDestinationRequest {
StreamDestination config = 1;
}
message UpdateStreamDestinationReply {}
message RemoveStreamDestinationRequest {
string destinationID = 1;
}
message RemoveStreamDestinationReply {}
message IncomingStream {
string streamID = 1;
bool isActive = 2;
}
message AddIncomingStreamRequest {
string streamID = 1;
}
message AddIncomingStreamReply {}
message RemoveIncomingStreamRequest {
string streamID = 1;
}
message RemoveIncomingStreamReply {}
message ListIncomingStreamsRequest {}
message ListIncomingStreamsReply {
repeated IncomingStream incomingStreams = 1;
}
message RestartUntilYoutubeRecognizesStream {
bool enabled = 1;
double startTimeout = 2;
double stopStartDelay = 3;
}
message StartAfterYoutubeRecognizedStream {
bool enabled = 1;
}
message StreamForwardQuirks {
RestartUntilYoutubeRecognizesStream restartUntilYoutubeRecognizesStream = 1;
StartAfterYoutubeRecognizedStream startAfterYoutubeRecognizedStream = 2;
}
message StreamForward {
string streamID = 1;
string destinationID = 2;
bool enabled = 3;
EncoderConfig encode = 4;
StreamForwardQuirks quirks = 5;
}
message EncoderConfig {
bool enable = 1;
repeated OutputAudioTrack outputAudioTracks = 2;
repeated OutputVideoTrack outputVideoTracks = 3;
}
message OutputAudioTrack {
repeated uint64 inputTrackIDs = 1;
EncodeAudioConfig encode = 2;
}
message EncodeAudioConfig {
AudioCodec codec = 1;
AudioQuality quality = 2;
}
enum AudioCodec {
AudioCodecCopy = 0;
AudioCodecAAC = 1;
AudioCodecVorbis = 2;
AudioCodecOpus = 3;
}
message AudioQuality {
oneof AudioQuality {
uint32 constantBitrate = 1;
}
}
message OutputVideoTrack {
repeated uint64 inputTrackIDs = 1;
EncodeVideoConfig encode = 2;
}
message EncodeVideoConfig {
VideoCodec codec = 1;
VideoQuality quality = 2;
}
enum VideoCodec {
VideoCodecCopy = 0;
VideoCodecH264 = 1;
VideoCodecHEVC = 2;
VideoCodecAV1 = 3;
}
message VideoQuality {
oneof VideoQuality {
uint32 constantBitrate = 1;
uint32 constantQuality = 2;
}
}
message StreamForwardStatistics {
int64 numBytesWrote = 1;
int64 numBytesRead = 2;
}
message StreamForwardWithStatistics {
StreamForward config = 1;
StreamForwardStatistics statistics = 2;
}
message ListStreamForwardsRequest {}
message ListStreamForwardsReply {
repeated StreamForwardWithStatistics streamForwards = 1;
}
message AddStreamForwardRequest {
StreamForward config = 1;
}
message AddStreamForwardReply {}
message UpdateStreamForwardRequest {
StreamForward config = 1;
}
message UpdateStreamForwardReply {}
message RemoveStreamForwardRequest {
StreamForward config = 1;
}
message RemoveStreamForwardReply {}
message WaitForStreamPublisherRequest {
optional string streamID = 1;
bool waitForNext = 2;
}
message StreamPublisher {}
enum PlayerType {
PlayerTypeAuto = 0;
PlayerTypeLibVLC = 1;
PlayerTypeMPV = 2;
}
message StreamPlaybackConfig {
double JitterBufDurationSecs = 1;
double CatchupMaxSpeedFactor = 2;
double MaxCatchupAtLagSecs = 3;
double StartTimeoutSecs = 4;
double ReadTimeoutSecs = 5;
string overriddenURL = 6;
bool forceWaitForPublisher = 7;
bool enableObserver = 8;
}
message StreamPlayerConfig {
string streamID = 1;
PlayerType playerType = 2;
bool disabled = 3;
StreamPlaybackConfig streamPlaybackConfig = 4;
}
message AddStreamPlayerRequest {
StreamPlayerConfig config = 1;
}
message AddStreamPlayerReply {}
message RemoveStreamPlayerRequest {
string streamID = 1;
}
message RemoveStreamPlayerReply {}
message UpdateStreamPlayerRequest {
StreamPlayerConfig config = 1;
}
message UpdateStreamPlayerReply {}
message ListStreamPlayersRequest {}
message ListStreamPlayersReply {
repeated StreamPlayerConfig players = 1;
}
message GetStreamPlayerRequest {
string streamID = 1;
}
message GetStreamPlayerReply {
StreamPlayerConfig config = 1;
}
message StreamPlayerOpenRequest {
string streamID = 1;
player.OpenRequest request = 2;
}
message StreamPlayerOpenReply {
player.OpenReply reply = 1;
}
message StreamPlayerProcessTitleRequest {
string streamID = 1;
player.ProcessTitleRequest request = 2;
}
message StreamPlayerProcessTitleReply {
player.ProcessTitleReply reply = 1;
}
message StreamPlayerGetLinkRequest {
string streamID = 1;
player.GetLinkRequest request = 2;
}
message StreamPlayerGetLinkReply {
player.GetLinkReply reply = 1;
}
message StreamPlayerEndChanRequest {
string streamID = 1;
player.EndChanRequest request = 2;
}
message StreamPlayerEndChanReply {
player.EndChanReply reply = 1;
}
message StreamPlayerIsEndedRequest {
string streamID = 1;
player.IsEndedRequest request = 2;
}
message StreamPlayerIsEndedReply {
player.IsEndedReply reply = 1;
}
message StreamPlayerGetPositionRequest {
string streamID = 1;
player.GetPositionRequest request = 2;
}
message StreamPlayerGetPositionReply {
player.GetPositionReply reply = 1;
}
message StreamPlayerGetLengthRequest {
string streamID = 1;
player.GetLengthRequest request = 2;
}
message StreamPlayerGetLengthReply {
player.GetLengthReply reply = 1;
}
message StreamPlayerSetSpeedRequest {
string streamID = 1;
player.SetSpeedRequest request = 2;
}
message StreamPlayerSetSpeedReply {
player.SetSpeedReply reply = 1;
}
message StreamPlayerSetPauseRequest {
string streamID = 1;
player.SetPauseRequest request = 2;
}
message StreamPlayerSetPauseReply {
player.SetPauseReply reply = 1;
}
message StreamPlayerStopRequest {
string streamID = 1;
player.StopRequest request = 2;
}
message StreamPlayerStopReply {
player.StopReply reply = 1;
}
message StreamPlayerCloseRequest {
string streamID = 1;
player.CloseRequest request = 2;
}
message StreamPlayerCloseReply {
player.CloseReply reply = 1;
}
message SubscribeToConfigChangesRequest {}
message ConfigChange {}
message SubscribeToStreamsChangesRequest {}
message StreamsChange {}
message SubscribeToStreamServersChangesRequest {}
message StreamServersChange {}
message SubscribeToStreamDestinationsChangesRequest {}
message StreamDestinationsChange {}
message SubscribeToIncomingStreamsChangesRequest {}
message IncomingStreamsChange {}
message SubscribeToStreamForwardsChangesRequest {}
message StreamForwardsChange {}
message SubscribeToStreamPlayersChangesRequest {}
message StreamPlayersChange {}
message NoopRequest {}
message OBSActionItemShowHide {
optional string itemName = 1;
optional string itemUUID = 2;
string valueExpression = 3;
}
message OBSActionWindowCaptureSetSource {
optional string itemName = 1;
optional string itemUUID = 2;
string valueExpression = 3;
}
message OBSAction {
oneof OBSActionOneOf {
OBSActionItemShowHide itemShowHide = 1;
OBSActionWindowCaptureSetSource windowCaptureSetSource = 2;
}
}
message Action {
oneof ActionOneof {
NoopRequest noopRequest = 1;
StartStreamRequest startStreamRequest = 2;
EndStreamRequest endStreamRequest = 3;
OBSAction obsAction = 4;
}
}
message AddTimerRequest {
int64 triggerAtUnixNano = 1;
Action action = 2;
}
message AddTimerReply {
int64 timerID = 1;
}
message RemoveTimerRequest {
int64 timerID = 1;
}
message RemoveTimerReply {}
message Timer {
int64 timerID = 1;
int64 triggerAtUnixNano = 2;
Action action = 3;
}
message ListTimersRequest {}
message ListTimersReply {
repeated Timer timers = 1;
}
message EventQueryAnd {
repeated Event queries = 1;
}
message EventQueryOr {
repeated Event queries = 1;
}
message EventQueryNot {
Event query = 1;
}
message EventOBSSceneChange {
string sceneName = 1;
}
message EventWindowFocusChange {
optional string host = 1;
optional uint64 windowID = 2;
optional string windowTitle = 3;
optional uint64 processID = 4;
optional string processName = 5;
optional uint64 userID = 6;
optional bool isFocused = 7;
}
message EventQuery {
oneof EventQueryOneOf {
EventQueryAnd and = 1;
EventQueryOr or = 2;
EventQueryNot not = 3;
EventType eventType = 4;
Event event = 5;
}
}
enum EventType {
eventWindowFocusChange = 0;
eventOBSSceneChange = 1;
}
message Event {
oneof EventOneOf {
EventOBSSceneChange obsSceneChange = 1;
EventWindowFocusChange windowFocusChange = 2;
}
}
message TriggerRule {
string Description = 1;
EventQuery eventQuery = 2;
Action action = 3;
}
message ListTriggerRulesRequest {}
message ListTriggerRulesReply {
repeated TriggerRule rules = 1;
}
message AddTriggerRuleRequest {
TriggerRule rule = 1;
}
message AddTriggerRuleReply {
uint64 ruleID = 1;
}
message RemoveTriggerRuleRequest {
uint64 ruleID = 1;
}
message RemoveTriggerRuleReply {}
message UpdateTriggerRuleRequest {
uint64 ruleID = 1;
TriggerRule rule = 2;
}
message UpdateTriggerRuleReply {}
message SubmitEventRequest {
Event event = 1;
}
message SubmitEventReply {}
message SubscribeToChatMessagesRequest {
uint64 sinceUNIXNano = 1;
}
message ChatMessage {
uint64 createdAtUNIXNano = 1;
string platID = 2;
string userID = 3;
string username = 4;
string messageID = 5;
string message = 6;
}
message SendChatMessageRequest {
string platID = 1;
string message = 2;
}
message SendChatMessageReply {}
message RemoveChatMessageRequest {
string platID = 1;
string messageID = 2;
}
message RemoveChatMessageReply {}
message BanUserRequest {
string platID = 1;
string userID = 2;
string reason = 3;
optional int64 deadlineUnixNano = 4;
}
message BanUserReply {}
message GetPeerIDsRequest {}
message GetPeerIDsReply {
repeated string peerIDs = 1;
}
message LLMGenerateRequest {
string prompt = 1;
}
message LLMGenerateReply {
string response = 1;
}