stream/room/room.proto
syntax = "proto3";
package jsgenerate_kb2022.stream.room;
option go_package = "gateway/protocol/stream/room";
import "google/api/annotations.proto";
import "adadd52b-e7a2-4fe2-9f15-356ceddbd4f6/utils/utils.proto";
// 直播間 負責提供直播流
service Room {
// 查找直播間
rpc Find(FindRequest) returns (FindResponse){
option (google.api.http) = {
get: "/api/v1/stream/room/find"
};
}
// 強制關閉一個直播間
rpc Close(CloseRequest) returns (CloseResponse){
option (google.api.http) = {
delete: "/api/v1/stream/room"
};
}
// 收看直播間內容
// websocket /api/v1/stream/room/listen
rpc Listen (stream ListenRequest) returns (stream ListenResponse);
}
message Data{
// 唯一的房間號
string id = 1;
// 名稱
string name = 2;
// 描述
string describe = 3;
// 是否可被緩存
bool cached = 4;
// 創建時間 unix
int64 createAt = 5;
// 房間類型
int32 path = 6;
}
message FindRequest{
jsgenerate_kb2022.utils.FindLimit limit = 1;
// 直播間類型
// * 1 mp3
int32 path = 2;
// 直播間房間號 room in
repeated string room = 3;
// 直播間房間號 room not in
repeated string notRoom = 5;
// 直播間名稱 like
string name = 4;
}
message FindResponse{
jsgenerate_kb2022.utils.FindResult result = 1;
repeated Data data = 2;
}
message CloseRequest{
// 直播間類型
// * 1 mp3
int32 path = 2;
// 直播間房間號
string room = 3;
}
message CloseResponse{
}
message Assets{
// 標註資產 id
string id = 1;
// 標註資產塊
repeated string block = 2;
}
message ListenRequest{
// 標註 這是 什麼 數據
// * -2 向服務器發送一個消息,服務器原樣返回消息
// * -1 這是可選的心跳包
// * 50 收聽直播,第一幀數據必須設置 what=50
// * 60 添加記錄到緩存列表
// * 61 從緩存記錄中刪除指定數據
// * 62 清空緩存列表
// * 63 清空所有緩存
int32 what = 1;
// 直播間類型
// * 1 mp3
int32 path = 2;
// 直播間房間號
string room = 3;
// what = 50 時有效,表示客戶端不支持緩存系統
bool nocahce = 10;
// what = -2 時有效
string message = 5;
// what range in [60,62] 時有效,指定了緩存列表
repeated Assets assets = 6;
}
message ListenResponse{
// 標註 這是 什麼 數據
// * -1 這是可選的心跳包,客戶端可以自行決定如何處理,通常情況可以直接忽略或重置超時時間
// * 1 這是直播的數據流
// * 40 通知設備直播開始或從暫停中恢復,此後將會收到 what=1 的數據流
// * 41 通知設備直播被暫停,此後將不會再收到新都 what=1 的數據流除非直播被重新恢復,但可能會收到未處理的緩存數據流
// * 100 響應
int32 what = 1;
// what=1時有效,表示數據,
//
// 如果客戶端第一幀數據設置 nocahce 爲 true,則此數據爲 mp3 幀
//
// 如果客戶端第一幀數據設置 nocahce 爲 true 之外的值,則數據爲 2字節元length+元信息+數據幀
// length只使用 15bit 最高 bit 給緩存系統使用
// 元信息是以分號分隔的 Assets.id 和 Assets.block
// 如果最高 bit 爲 1 則代表 應該從 緩存中獲取音頻數據
bytes data = 2;
// what=100時有效,響應碼 表示對 Request 請求的響應,0 表示請求成功
uint32 code = 3;
// 當響應 Request 時的額外信息
string message = 4;
// 應該延遲多少幀數據再播放,只在 what=40 時有效
uint32 delay = 5;
}