我能够读取 h264 格式的视频文件并在其上进行一些机器学习推理。该代码对于来自文件的输入非常有效。下面的代码是来自Deepstream SDK的示例代码
FileDataProvider(const char *szFilePath, simplelogger::Logger *logger)
: logger_(logger)
{
fp_ = fopen(szFilePath, "rb");
//fp_ = fopen("/dev/video0", "rb");
if (nullptr == fp_) {
LOG_ERROR(logger, "Failed to open file " << szFilePath);
exit(1);
}
pLoadBuf_ = new uint8_t[nLoadBuf_];
pPktBuf_ = new uint8_t[nPktBuf_];
assert(nullptr != pLoadBuf_);
}
~FileDataProvider() {
if (fp_) {
fclose(fp_);
}
if (pLoadBuf_) {
delete [] pLoadBuf_;
}
if (pPktBuf_) {
delete [] pPktBuf_;
}
}
什么是要求?
- 从 Logitech c920 网络摄像头读取视频文件。
- 我知道如何使用 opencv 从网络摄像头读取数据。但我不想在这里使用opencv。
我的研究
- 使用 v4l 我们可以获取流并将其显示在 vlc 中。
- 相机支持以下格式。
@ubox:~$ v4l2-ctl --device=/dev/video1 --list-formats
ioctl:VIDIOC_ENUM_FMT 索引:0 类型:视频捕获像素格式:'YUYV' 名称:YUYV 4:2:2
索引:1 类型:视频捕捉像素格式:“H264”(压缩) 名称:H.264
索引:2 类型:视频捕捉像素格式:“MJPG”(压缩) 名称:Motion-JPEG
- 在 Linux 中读取 USB 网络摄像头的输出
vlc v4l2:///dev/video1 --v4l2-chroma=h264
- 这会显示来自网络摄像头的视频。
这个怎么做? - 现在如何将此实时流输入到上面的示例代码中,以便它从网络摄像头而不是文件中读取?
[update-1] - 换句话说,v4l 是否有一些选项可以将视频流写入 h264 共振峰?这样,当它(v4l)写入磁盘时,我可以像以前(上面的代码)一样读取该文件。
[update-2] - 我们可以使用ffmpeg代替 v4l。如果有任何使用ffmpeg将视频流连续保存到磁盘的解决方案,以便其他程序读取该文件?