syntax = "proto3"; package media_set; option go_package = "pb/media_set"; import "google/protobuf/duration.proto"; // TODO: use uints where appropriate. message MediaSet { string id = 1; string youtube_id = 2; string title = 12; string description = 13; string author = 14; int32 audio_channels = 3; int64 audio_approx_frames = 4; int64 audio_frames = 5; int32 audio_sample_rate = 6; int32 audio_youtube_itag = 7; string audio_mime_type = 8; google.protobuf.Duration video_duration = 9; int32 video_youtube_itag = 10; string video_mime_type = 11; }; message GetRequest { string youtube_id = 1; } message GetPeaksRequest { string id = 1; int32 num_bins = 2; } message GetPeaksProgress { repeated int32 peaks = 1; float percent_complete = 2; string url = 3; int64 audio_frames = 4; } message GetPeaksForSegmentRequest { string id = 1; int32 num_bins = 2; int64 start_frame = 3; int64 end_frame = 4; } message GetPeaksForSegmentResponse { repeated int32 peaks = 1; } enum AudioFormat { WAV = 0; MP3 = 1; } message GetAudioSegmentRequest { string id = 1; int64 start_frame = 2; int64 end_frame = 3; AudioFormat format = 4; } message GetAudioSegmentProgress { float percent_complete = 3; bytes audio_data = 4; } message GetVideoRequest { string id = 1; } message GetVideoProgress { float percent_complete = 1; string url = 2; } message GetVideoThumbnailRequest { string id = 1; } message GetVideoThumbnailResponse { bytes image = 1; int32 width = 2; int32 height = 3; } service MediaSetService { rpc Get(GetRequest) returns (MediaSet) {} rpc GetPeaks(GetPeaksRequest) returns (stream GetPeaksProgress) {} rpc GetPeaksForSegment(GetPeaksForSegmentRequest) returns (GetPeaksForSegmentResponse) {} rpc GetAudioSegment(GetAudioSegmentRequest) returns (stream GetAudioSegmentProgress) {} rpc GetVideo(GetVideoRequest) returns (stream GetVideoProgress) {} rpc GetVideoThumbnail(GetVideoThumbnailRequest) returns (GetVideoThumbnailResponse) {} }