我可以读取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。
- 我的研究 *
- 使用v4 l,我们可以得到流并在vlc中显示它。
- 相机支持以下格式。
@ubox:~ $v4l2-ctl --设备=/dev/视频1--列表格式
索引:0类型:视频捕获像素格式:'YUYV'姓名:YUYV 4:2:2
索引:1类型:视频捕获像素格式:“H264”(压缩)名称:H.264
索引:2类型:视频捕获像素格式:'MJPG'(压缩)名称:动态JPEG
- Reading output of a USB webcam in Linux
vlc v4l2:///dev/video1 --v4l2-chroma=h264
-显示来自网络摄像头的视频。- 如何做到这一点?* -现在如何把这个直播流到上面的示例代码,使它从网络摄像头而不是文件读取?
[update-1]-换句话说,v4 l是否有一些选项可以将视频流写为h264共振峰?这样,当它(v4 l)写入磁盘时,我可以像以前一样读取该文件(上面的代码)。
[update-2]-我们可以使用ffmpeg代替v4 l。如果有任何解决方案可以使用ffmpeg将视频流连续保存到磁盘中,以便其他程序读取该文件?
1条答案
按热度按时间8zzbczxx1#
在使用ioctl从相机捕获帧之前,您需要先设置如下格式。
然后,初始化并Map缓冲区
STREAMON开始捕获
最后从Map的缓冲区中读取一个帧。通常,
CaptureImage()
将在while循环中。