个人学习Rust的入门项目,实现一个Linux平台的摄像头组件或服务,包括以下一些功能:
通过这个项目,学习了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
ffmpeg开源项目的一部分,非常强大,支持的格式非常多,不过是命令行工具。
之前参考的使用链接:https://blog.csdn.net/qq_33844311/article/details/123751251
使用示例,拉去本地端口40625的H264视频流:
ffplay -f h264 udp://127.0.0.1:40625
为了降低延时,可以配置一些选项:
ffplay.exe -f h264 "udp://127.0.0.1:40625" -fflags nobuffer -nofind_stream_info
VLC(VideoLAN Client)是一款免费、开源、跨平台的多媒体播放器和框架。可以播放本地视频、网络视频流等。
7yuv主要是用来分析YUV格式的图片,支持非常多YUV格式,常用来分析原始YUV视频帧。
FLAG还是要立的,万一实现了呢?
:)
1、Socket配置组件工作方式,使用json格式作为配置,通过socket对组件进行设置,如:配置推流方式、摄像头节点等。
2、实现多种视频格式采集,包括压缩编码格式,如:YUV、H264、H265等;
3、实现多种视频流协议推流,如:RTMP、RTSP、HLS、FLV等。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。