完善节目平台与直播监控体验
This commit is contained in:
1 parent
229a8d0791
commit
e50b8b480b
11 files changed
+642
-37
No files matched your search
@@ -74,6 +74,37 @@ export interface QualityInfo {
|
||||
height: number
|
||||
}
|
||||
|
||||
export interface ViewerSessionInfo {
|
||||
session_id: string
|
||||
node_id?: string
|
||||
node_name?: string
|
||||
quality?: string
|
||||
playback_state: string
|
||||
buffered_seconds?: number
|
||||
error?: string
|
||||
remote_adjusted: boolean
|
||||
last_heartbeat: string
|
||||
}
|
||||
|
||||
export interface ControlAuditInfo {
|
||||
id: number
|
||||
operator: string
|
||||
target_session_id: string
|
||||
action: string
|
||||
value?: string
|
||||
status: string
|
||||
result?: string
|
||||
created_at: string
|
||||
claimed_at?: string
|
||||
}
|
||||
|
||||
export interface RemoteCommandInfo {
|
||||
id: number
|
||||
action: 'switch_node' | 'switch_quality' | 'restore_auto'
|
||||
value?: string
|
||||
created_at: string
|
||||
}
|
||||
|
||||
export async function fetchStreams(admin = false): Promise<StreamInfo[]> {
|
||||
const { data } = await api.get('/streams', { params: admin ? { admin: true } : undefined })
|
||||
return data
|
||||
@@ -120,3 +151,36 @@ export async function getWatchUrls(streamId: number): Promise<WatchInfo> {
|
||||
export function getStreamStatusUrl(streamId: number): string {
|
||||
return `/api/streams/${streamId}/events`
|
||||
}
|
||||
|
||||
export async function sendViewerHeartbeat(streamId: number, payload: Record<string, unknown>): Promise<{ remote_adjusted: boolean }> {
|
||||
const { data } = await api.post(`/streams/${streamId}/viewer-heartbeat`, payload)
|
||||
return data
|
||||
}
|
||||
|
||||
export async function pollRemoteCommand(streamId: number, sessionId: string): Promise<RemoteCommandInfo | null> {
|
||||
const { data } = await api.get(`/streams/${streamId}/remote-command`, { params: { session_id: sessionId } })
|
||||
return data
|
||||
}
|
||||
|
||||
export async function reportRemoteCommandResult(streamId: number, commandId: number, sessionId: string, result: string): Promise<void> {
|
||||
await api.post(`/streams/${streamId}/remote-command/${commandId}/result`, { result }, { params: { session_id: sessionId } })
|
||||
}
|
||||
|
||||
export async function fetchViewerSessions(streamId: number): Promise<ViewerSessionInfo[]> {
|
||||
const { data } = await api.get(`/streams/${streamId}/viewer-sessions`)
|
||||
return data
|
||||
}
|
||||
|
||||
export async function fetchControlAudit(streamId: number): Promise<ControlAuditInfo[]> {
|
||||
const { data } = await api.get(`/streams/${streamId}/control-audit`)
|
||||
return data
|
||||
}
|
||||
|
||||
export async function createRemoteSession(streamId: number, expiresIn = 300): Promise<{ token: string; expires_in: number }> {
|
||||
const { data } = await api.post(`/streams/${streamId}/remote-session`, { expires_in: expiresIn })
|
||||
return data
|
||||
}
|
||||
|
||||
export async function sendRemoteCommand(streamId: number, token: string, action: string, targets: string[], value?: string): Promise<void> {
|
||||
await api.post(`/streams/${streamId}/remote-command`, { token, action, targets, value })
|
||||
}
|
||||
Reference in new issue
Block a user