实习日记 Day02
摄像头
- 连接了海康威视的摄像头,获得url并且成功ffplay它的url进行播放
- ffplay -x 800 -y 600 “rtsp://admin:a12345678@192.168.0.104:554/h264/ch1/main/av_stream”
FFmpeg的编译
- 编译了好几次,一开始Msys2环境下编译的产物,在项目里ld出现了链接性错误,我怀疑Msys2下的静态链接可能有需要其他细致的问题,于是我主动转为动态编译了,这次成功了
与ai进行的流管理器设计
StreamManager (总管)
│
├── 持有 QVector<QSharedPointer<VideoStream>> (所有流的遥控器)
│
├── 持有 QHash<QString, int> (ID → 数组下标,快速查找)
│
└── 提供操作接口:
├── addStream(url) → 创建新的 VideoStream + Demuxer + Decoder
├── removeStream(id) → 停止并销毁指定的播放链路
├── startAll() → 一键启动所有流
└── getStatus(id) → 查询某路流的实时状态
┌───────────────────────────────────────────────────────┐
│ StreamManager │
└───────────────┬───────────────────────────────────────┘
│ 1 : N
┌───────────────▼───────────────────────────────────────┐
│ VideoStream (每条流一个) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Demuxer 专用线程 (QThread) ← 阻塞 I/O,隔离 │ │
│ │ - 长期运行,只负责 av_read_frame │ │
│ │ - 产出 VPacketItem → Packet Buffer │ │
│ └──────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Decoder 专用线程 (QThread) ← 有状态,隔离 │ │
│ │ - 长期运行,只负责 avcodec_send/receive │ │
│ │ - 产出 VFrameItem → Frame Buffer │ │
│ └──────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ YUV→RGB 转换任务 (QThreadPool::globalInstance)│ │
│ │ - 无状态,纯计算,可以并行 │ │
│ │ - 用完即弃,不长期占用线程 │ │
│ └──────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────┘
types.h
做了一些音视频的初步处理,比如SPSCRingBuffer 一些VPacketItem等基础框架,再就是一些enum 状态
初步做了解复用的init环节,m_fmtctx 以及一些av_dict 的设置,获得了流信息和流id,填充了内容