rs2_stream/media/
types.rs1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6use std::time::Duration;
7
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct UserActivity { pub id: String, pub user_id: u64,
15 pub activity_type: String,
17 pub timestamp: DateTime<Utc>,
19 pub metadata: HashMap<String, String>,
21}
22
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
25pub enum MediaPriority {
26 High = 3, Normal = 2, Low = 1, }
30
31impl Default for MediaPriority {
32 fn default() -> Self {
33 MediaPriority::Normal
34 }
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct MediaStream {
39 pub id: String,
40 pub user_id: u64,
41 pub content_type: MediaType,
42 pub quality: QualityLevel,
43 pub chunk_size: usize,
44 pub created_at: DateTime<Utc>,
45 pub metadata: HashMap<String, String>,
46}
47
48#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
49pub enum MediaType {
50 Video,
51 Audio,
52 Mixed, }
54
55#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
56pub enum QualityLevel {
57 Low, Medium, High, UltraHigh, }
62
63#[derive(Debug, Clone, Serialize, Deserialize, Eq)]
64#[derive(PartialEq)]
65pub struct MediaChunk {
66 pub stream_id: String,
67 pub sequence_number: u64,
68 pub data: Vec<u8>,
69 pub chunk_type: ChunkType,
70 pub priority: MediaPriority,
71 pub timestamp: Duration,
72 pub is_final: bool,
73 pub checksum: Option<String>,
74}
75
76#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
77pub enum ChunkType {
78 VideoIFrame, VideoPFrame, VideoBFrame, Audio, Metadata, Thumbnail, }
85
86impl ChunkType {
87 pub fn default_priority(&self) -> MediaPriority {
88 match self {
89 ChunkType::VideoIFrame | ChunkType::Audio | ChunkType::Metadata => MediaPriority::High,
90 ChunkType::VideoPFrame => MediaPriority::Normal,
91 ChunkType::VideoBFrame | ChunkType::Thumbnail => MediaPriority::Low,
92 }
93 }
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
97pub struct StreamMetrics {
98 pub stream_id: String,
99 pub bytes_processed: u64,
100 pub chunks_processed: u64,
101 pub dropped_chunks: u64,
102 pub average_chunk_size: f64,
103 pub buffer_utilization: f64,
104 pub last_updated: DateTime<Utc>,
105}