Skip to content

ListYao/video_stream_service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于 Rust 代码示例实现了一个简单的视频流服务,使用了 Actix-Web 框架。服务的核心功能包括注册视频、列出所有视频以及提供视频流。下面是对代码各部分的详细分析:

引入依赖库和模块

代码开始通过 use 关键字导入了必要的库和模块,用于构建 Web 应用和服务:

  • actix_web:用于创建 Web 应用和处理 HTTP 请求。
  • actix_files:用于提供静态文件服务,这里用于视频流。
  • std::path::PathBuf:用于操作文件路径。
  • uuid: 生成唯一标识符(UUID)用于视频ID。
  • std::collections::HashMap:存储视频信息的哈希映射。
  • std::sync::Mutex:线程安全地访问共享数据(视频映射)。
  • serde: 序列化和反序列化 Rust 结构体到 JSON。

定义结构体

VideoInfo

定义了一个表示视频信息的结构体,包含视频ID (id)、路径 (path) 和名称 (name)。它实现了 SerializeDeserialize 特征,以便与 JSON 数据互换。

AppState

定义应用状态结构体,持有一个线程安全的视频信息映射 (Mutex<HashMap<String, VideoInfo>>)。

处理函数

register_video

异步函数,处理 POST 请求到 /api/videos,用于注册新视频。接收请求体中的视频路径和名称,生成一个新的 UUID 作为视频ID,并将视频信息保存到应用状态的视频映射中。返回新视频的详细信息作为 JSON 响应。

stream_video

异步函数,处理 GET 请求到 /api/videos/{id},用于获取指定ID的视频流。根据ID从应用状态中查找视频信息,然后尝试打开并返回视频文件的流。如果找不到视频,则返回 404 错误。

list_videos

异步函数,处理 GET 请求到 /api/videos,列出所有已注册的视频信息。从应用状态中获取所有视频,转换成向量,并以 JSON 格式响应。

主函数 (main)

  • 创建了一个共享的应用状态实例 (AppState),使用 web::Data 包装以便在应用中跨线程安全地共享。
  • 配置并启动 Actix-Web 服务器,监听所有网络接口的 8888 端口。
    • /api/videos 路由配置了 POST 方法处理函数 register_video 用于注册视频。
    • 同一路径还配置了 GET 方法处理函数 list_videos 用于列出所有视频。
    • /api/videos/{id} 路由配置了 GET 方法处理函数 stream_video 用于视频流播放。

About

给予rust 视频流服务

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages