3

我能够读取 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

这个怎么做? - 现在如何将此实时流输入到上面的示例代码中,以便它从网络摄像头而不是文件中读取?

[update-1] - 换句话说,v4l 是否有一些选项可以将视频流写入 h264 共振峰?这样,当它(v4l)写入磁盘时,我可以像以前(上面的代码)一样读取该文件。

[update-2] - 我们可以使用ffmpeg代替 v4l。如果有任何使用ffmpeg将视频流连续保存到磁盘的解决方案,以便其他程序读取该文件?

4

0 回答 0