音頻資產的 上傳 審覈 刪除 等

  1. 對於擁有 Assets 權限的用戶,可以將音頻上傳到系統,供系統使用。
  2. 對於擁有 ReviewerAssets 權限的用戶,可以對音頻進行審覈刪除等管理操作。

目前系統只支持 mp3 格式的音頻

上傳接口

函數列表

要上傳一個音頻需要調用 Create Chunks Chunk Merge 五個接口

  1. 客戶端需要調用 Create 創建一個資產,此時資產處於 Draft 狀態,同時會返回此資產的 id
  2. 客戶端可以調用 Chunks 接口,查詢資產有哪些分塊已經傳輸到服務器不需要再次傳輸
  3. 客戶端調用 Chunk 接口,將服務器缺少的分塊上傳到服務器
  4. 最後調用 Merge 接口,將分塊合併,如果合併成功,資產將變爲 Submit 狀態,等待管理員審覈後就可被系統使用

在步驟1中如果服務器發現已經存在相同的資產,將直接創建已有資產的副本並將其設置爲 Submit 狀態,此時客戶端不需要執行步驟 2 3 4

用戶接口

所有登入的用戶都可以調用下述函數

審覈接口

審覈接口用於管理員對資產進行管理

Create

Create 函數用於創建一個資產,其簽名如下:

rpc Create (CreateRequest) returns (CreateResponse){
    option (google.api.http) = {
        post: "/api/v1/assets/audio"
        body: "*"
    };
}

http 路徑:

/api/v1/assets/audio

權限要求: root(1) or assets(100)

Chunks

資產應該分塊上傳,以避免佔用服務器大量內存,同時可以在網路異常時爲用戶恢復上傳進度,而不需要完全重新開始上傳。

Chunks 函數用於查詢服務器已經存在的分塊,以便爲用戶恢復上傳進度

rpc Chunks (ChunksRequest) returns (ChunksResponse){
    option (google.api.http) = {
        get: "/api/v1/assets/audio/chunks"
    };
}

http 路徑:

/api/v1/assets/audio/chunks

權限要求: root(1) or assets(100)

Chunk

Chunk 用於上傳一個分塊數據

rpc Chunk (ChunkRequest) returns (ChunkResponse){
    option (google.api.http) = {
        post: "/api/v1/assets/audio/chunk"
        body: "*"
    };
}

http 路徑:

/api/v1/assets/audio/chunk

權限要求: root(1) or assets(100)

對於 http 也可以訪問 /api/v1/assets/audio/chunk_file/{{id}} 並將二進制數據寫入 body 進行上傳

此外也可以使用 在線工具 測試上傳功能

Merge

當資產所有分塊都上傳到服務器後,客戶端需要調用 Merge 函數通知服務器將分塊合併並將資產提交給管理員審覈

rpc Merge (MergeRequest) returns (MergeResponse){
    option (google.api.http) = {
        post: "/api/v1/assets/audio/merge"
        body: "*"
    };
}

http 路徑:

/api/v1/assets/audio/merge

權限要求: root(1) or assets(100)

此外也可以使用 在線工具 測試上傳功能

Submit

Submit 函數用於將資產提交給管理員審覈:

rpc Submit (SubmitRequest) returns (SubmitResponse){
    option (google.api.http) = {
        post: "/api/v1/assets/audio/submit/{id}"
    };
}

http 路徑:

/api/v1/assets/audio/submit/{id}

權限要求: root(1) or assets(100)

ListDraft

ListDraft 函數用於查詢用戶查詢自己處於 Draft 狀態的資產,以便繼續未完成的上傳工作:

rpc ListDraft (ListRequest) returns (ListResponse){
    option (google.api.http) = {
        get: "/api/v1/assets/audio/drafts/{uid}"
    };
}

http 路徑:

/api/v1/assets/audio/drafts/{uid}

權限要求: session

DeleteDraft

DeleteDraft 函數用於用戶刪除自己處於 Draft 狀態的資產,通常是用戶上傳了錯誤的檔案故想要放棄上傳:

rpc DeleteDraft (DeleteDraftRequest) returns (DeleteDraftResponse){
    option (google.api.http) = {
        delete: "/api/v1/assets/audio/drafts/{id}"
    };
}

http 路徑:

/api/v1/assets/audio/drafts/{id}

權限要求: session

ListReject

ListReject 函數用於查詢用戶查詢自己處於 Reject 狀態的資產,以便知道管理員爲何拒絕了審覈:

rpc ListReject (ListRequest) returns (ListResponse){
    option (google.api.http) = {
        get: "/api/v1/assets/audio/rejects/{uid}"
    };
}

http 路徑:

/api/v1/assets/audio/rejects/{uid}

權限要求: session

DeleteReject

DeleteReject 函數用於用戶刪除自己處於 Reject 狀態的資產:

rpc DeleteReject (DeleteRejectRequest) returns (DeleteRejectResponse){
    option (google.api.http) = {
        delete: "/api/v1/assets/audio/reject/{id}"
    };
}

http 路徑:

/api/v1/assets/audio/reject/{id}

權限要求: session

Find

Find 函數用於查詢系統存在的資產,以及資產目前的狀態:

rpc Find (FindRequest) returns (FindResponse){
    option (google.api.http) = {
        get: "/api/v1/assets/audio"
    };
}

http 路徑:

/api/v1/assets/audio

權限要求: session

ID

ID 函數用於通過 id 快速查詢系統存在的資產,以及資產目前的狀態:

rpc ID (IDRequest) returns (IDResponse){
    option (google.api.http) = {
        get: "/api/v1/assets/audio/by_id"
    };
}

http 路徑:

/api/v1/assets/audio/by_id

權限要求: session

Download

Download 函數用於下載資產:

rpc Download (DownloadRequest) returns (stream google.api.HttpBody){
    option (google.api.http) = {
        get: "/api/v1/assets/audio/download/{id}"
    };
}

http 路徑:

/api/v1/assets/audio/download/{id}

權限要求: session

默認下載上傳的音頻資源,但你可以傳入可選的查詢參數 file=1 來下載檔案直播存儲的音頻記錄,或者 file=2 下載即時直播存儲的音頻記錄

/api/v1/assets/audio/download/{id}?file=1
/api/v1/assets/audio/download/{id}?file=2

Resolve

Resolve 用於將一個處於 Submit 狀態的資產設置爲 Post 狀態

rpc Resolve (ResolveRequest) returns (ResolveResponse){
    option (google.api.http) = {
        post: "/api/v1/assets/audio/resolve/{id}"
    };
}

http 路徑:

/api/v1/assets/audio/resolve/{id}

權限要求: root(1) or reviewer_assets(120)

Reject

Reject 用於將一個處於 Submit 狀態的資產設置爲 Reject 狀態

rpc Reject (RejectRequest) returns (RejectResponse){
    option (google.api.http) = {
        post: "/api/v1/assets/audio/reject/{id}"
    };
}

http 路徑:

/api/v1/assets/audio/reject/{id}

權限要求: root(1) or reviewer_assets(120)

Disable

Disable 用於將一個處於 Post 狀態的資產設置爲 Disable 狀態

rpc Disable (DisableRequest) returns (DisableResponse){
    option (google.api.http) = {
        post: "/api/v1/assets/audio/disable/{id}"
    };
}

http 路徑:

/api/v1/assets/audio/disable/{id}

權限要求: root(1) or reviewer_assets(120)

Recover

Recover 用於將一個處於 Disable 狀態的資產設置爲 Post 狀態

rpc Recover (RecoverRequest) returns (RecoverResponse){
    option (google.api.http) = {
        post: "/api/v1/assets/audio/recover/{id}"
    };
}

http 路徑:

/api/v1/assets/audio/recover/{id}

權限要求: root(1) or reviewer_assets(120)

Delete

Delete 用於將一個處於 Post/Disable 狀態的資產設置爲 Delete 狀態

rpc Delete (DeleteRequest) returns (DeleteResponse){
    option (google.api.http) = {
        delete: "/api/v1/assets/audio/{id}"
    };
}

http 路徑:

/api/v1/assets/audio/{id}

權限要求: root(1) or reviewer_assets(120)