// Copyright 2022 LTN Global Communications, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package tv.make.api; import "output/outputtranscoding.proto"; import "output/streammapping.proto"; import "output/failover.proto"; import "output/slate.proto"; import "google/protobuf/timestamp.proto"; import "google/api/field_behavior.proto"; option go_package = "git.ltnglobal.com/make.tv/genproto/api;api"; message Output { // Status specifies the current status of the output based on its production output, application and target status. enum Status { // The display status is unspecified. STATUS_UNSPECIFIED = 0; // The output is online. ONLINE = 1; // The output is offline OFFLINE = 2; // The output target(s) is/are in state error or unknown. ATTENTION = 3; // The output, its application or target(s) are in state error. ERROR = 4; // The output, its application or target(s) are in state pending. PENDING = 5; } // The unique identifier of the output. string id = 1; // The unique identifier of the owning team. string team_id = 2; // The display name of the output. string display_name = 3; // The description of the output. string description = 4; // When has this output been created. google.protobuf.Timestamp create_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; // When has this output been modified. google.protobuf.Timestamp update_time = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; // The user who created this output. string creator_id = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; // The duration of the input buffer in seconds. // // Ignored for passthrough outputs. double buffer_duration_seconds = 8; // The stream routed to this output. // // Empty if there's no stream routed to this output. string active_stream_id = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; // The production in which this output is currently active. // // Empty if the production is offline. string active_production_id = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; // The list of transcodings of the output. // // Optional if type is passthrough. // Transcoded outputs MUST have at least one transcoding. // // Outputs MUST NOT have more than three transcodings. // The 3+Nth transcoding will be ignored. // // When updating an output and the update_mask is present // the path "transcodings" updates _all_ transcodings at once. // It is therefore not possible to update a specific property // of a single transcoding with the generic [UpdateOutput][tv.make.api.OutputService.UpdateOutput] call. // // Note: An output CANNOT change from a transcoding output to a passthrough output or vice-versa. // If an output is created with no transcodings it is not possible to attach these later on. Similarly // it is not possible to move from >= 1 transcodings to zero. In these cases INVALID_ARGUMENT will be // returned. repeated OutputTranscoding transcodings = 11; // Whether or not HLS-pull is enabled. bool hls_pull_enabled = 12; // Whether or not RTMP-pull is enabled. bool rtmp_pull_enabled = 13; // Whether or not MpegTS-pull is enabled. bool mpegts_pull_enabled = 14; // The preview URL for this output; potentially random for each start. // // The HLS preview URL is unlike the hls_url always populated, regardless of // the hls_pull_enabled setting. It differs from the hls_url in the sense that // this is a URL that might change at any point in time and is not stable. // // It should be used by clients that want to preview the contents of an output. // This URL is not to be exposed to a user. string hls_preview_url = 15 [(google.api.field_behavior) = OUTPUT_ONLY]; // URL at which an HLS stream can be obtained. // Only set when hls_enabled is true. string hls_pull_url = 16 [(google.api.field_behavior) = OUTPUT_ONLY]; // URL at which an MpegTS stream can be obtained. // Only set when mpegts_enabled is true. string mpegts_pull_url = 17 [(google.api.field_behavior) = OUTPUT_ONLY]; // URL at which an RTMP stream can be obtained. // // Only set when rtmp_enabled is true. string rtmp_pull_url = 18 [(google.api.field_behavior) = OUTPUT_ONLY]; // URL at which RTMP over WebSocket can be obtained. // // Only set when rtmp_enabled is true. string ws_pull_url = 19 [(google.api.field_behavior) = OUTPUT_ONLY]; // List of productions this output has been assigned to. // // - If any one of these production starts, the output will be started to. // // - Starting an output with a production that it was not previously assigned // to will assign the output to that production as well. // // - The active_production_id must be a member of the production_ids set. repeated string production_ids = 20 [(google.api.field_behavior) = OUTPUT_ONLY]; // The status of the output. Status status = 21; // Whether or not SRT-pull is enabled. bool srt_pull_enabled = 22; // URL at which an SRT stream can be obtained. // // Only set when srt_enabled is true. string srt_pull_url = 23 [(google.api.field_behavior) = OUTPUT_ONLY]; bool srt_encryption_enabled = 24; string srt_encryption_passphrase = 25; string srt_encryption_key_length_bytes = 26; int32 srt_latency_ms = 27; // Stream mapping for this output. StreamMapping default_mapping = 28 [(google.api.field_behavior) = OPTIONAL]; // Stream mapping for HLS pull direction. StreamMapping hls_pull_mapping = 29 [(google.api.field_behavior) = OPTIONAL]; // Stream mapping RTMP pull direction. StreamMapping rtmp_pull_mapping = 30 [(google.api.field_behavior) = OPTIONAL]; // Stream mapping SRT pull direction. StreamMapping srt_pull_mapping = 31 [(google.api.field_behavior) = OPTIONAL]; // Stream mapping TCP pull direction. StreamMapping tcp_pull_mapping = 32 [(google.api.field_behavior) = OPTIONAL]; // Failover configuration. Failover failover = 50 [(google.api.field_behavior) = OPTIONAL]; // Hostname of the running instance. string hostname = 40 [(google.api.field_behavior) = OUTPUT_ONLY, (google.api.field_behavior) = OPTIONAL]; // IPv4 of the running instance. string ipv4 = 41 [(google.api.field_behavior) = OUTPUT_ONLY, (google.api.field_behavior) = OPTIONAL]; // IPv4 of the running instance. string ipv6 = 42 [(google.api.field_behavior) = OUTPUT_ONLY, (google.api.field_behavior) = OPTIONAL]; // Slate configuration. repeated Slate slates = 51 [(google.api.field_behavior) = OPTIONAL]; }