1 Star 1 Fork 1

NameisBoy / ip_cam

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Rust个人入门项目 ip_cam

介绍

个人学习Rust的入门项目,实现一个Linux平台的摄像头组件或服务,包括以下一些功能:

  • 摄像头视频采集,目前只支持MPJEG格式采集;
  • 视频推流,目前只支持简单的UDP推流;

通过这个项目,学习了Rust的基础语法、第三方crate使用、Rust面向对象编程(特性、结构体方法等),也算入门Rust了。

构建方法

项目使用的Rust的cargo进行构建。项目文件结构:

├── Cargo.lock
├── Cargo.toml
├── README.md
└── src #源码目录
    ├── camera #摄像头相关实现
    │   ├── v4l2_camera.rs
    │   └── video_capture.rs #视频采集抽象特性
    ├── camera.rs
    ├── main.rs #主程序入口
    ├── streamer #视频推流相关实现
    │   ├── stream.rs
    │   └── udp_streamer.rs
    ├── streamer.rs
    ├── utils #工具集
    │   ├── file_utils.rs
    │   └── v4l_utils.rs
    └── utils.rs

notes目录是一些开发遇到的问题、踩的坑等记录。

main.rs中是一个UDP推流MJPEG视频流到本地端口的示例,运行:

cargo run

可以用一些工具拉流播放,如:ffplay、VLC等。

使用ffplay拉取:

ffplay.exe -f mjpeg "udp://127.0.0.1:8080" -fflags nobuffer -nofind_stream_info

demo

相关调试软件、上位机

ffplay

ffmpeg开源项目的一部分,非常强大,支持的格式非常多,不过是命令行工具。

之前参考的使用链接:https://blog.csdn.net/qq_33844311/article/details/123751251

使用示例,拉去本地端口40625的H264视频流:

ffplay -f h264 udp://127.0.0.1:40625

为了降低延时,可以配置一些选项:

  • find_stream_info:决定是否调用avformat_find_stream_info探测码流格式,默认情况下探测码流格式,但是会造成延时播放;
  • -fflags nobuffer:关闭输入流的缓冲。缓冲可以帮助处理一些网络延迟或数据流不连续的情况,但可能会增加播放的延迟。
ffplay.exe -f h264 "udp://127.0.0.1:40625" -fflags nobuffer -nofind_stream_info

VLC

VLC(VideoLAN Client)是一款免费、开源、跨平台的多媒体播放器和框架。可以播放本地视频、网络视频流等。

7yuv

7yuv主要是用来分析YUV格式的图片,支持非常多YUV格式,常用来分析原始YUV视频帧。

TODO

FLAG还是要立的,万一实现了呢?

:)

1、Socket配置组件工作方式,使用json格式作为配置,通过socket对组件进行设置,如:配置推流方式、摄像头节点等。

2、实现多种视频格式采集,包括压缩编码格式,如:YUV、H264、H265等;

3、实现多种视频流协议推流,如:RTMP、RTSP、HLS、FLV等。

空文件

简介

使用Rust编写的Linux摄像头组件 展开 收起
Rust
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/nameisboy/ip_cam.git
git@gitee.com:nameisboy/ip_cam.git
nameisboy
ip_cam
ip_cam
develop

搜索帮助

344bd9b3 5694891 D2dac590 5694891