Bah*_*dil 5 c++ opencv ffmpeg video-streaming
我正在使用 OpenCV 和 IP 摄像头,我可以使用 RTSP 协议成功读取视频流,如下所示:
VideoCapture capture = new VideoCapture();
String url = "rtsp://admin:123456@192.168.10.3:554/Streaming/Channels/101?transportmode=unicast";
capture.open(url);
Run Code Online (Sandbox Code Playgroud)
但现在我想以同样的方式创建一个编写器并将VideoWriter帧写入输出流。
这可能吗?如果是,那么如何?如何为流创建文件名以及如何获取另一端的流,从IP摄像机到OpenCV都是一样的?
open(String filename, int fourcc, double fps, Size frameSize, boolean isColor)
Run Code Online (Sandbox Code Playgroud)
小智 6
这可以通过 GStreamer 实现。采集主要使用OpenCV、FFmpeg、GStreamer。您可以通过两者捕获流。对于VideoWriter,您也可以使用两者。FFmpeg 只能用于生成视频文件。GStreamer 可用于在 C++ OpenCV 程序之外通过视频流传输结果。
GStreamer 适用于 Visual Studio 2019,适用于 OpenCV 4.2。在 Linux 上安装更加简单。
这很容易,但有很大的出错空间。GStreamer 管道可以工作。安装的扩展说明可在此处教程获得。
我用过3)
以下步骤是 OpenCV 从源代码构建和 OpenCV 安装的常见步骤。此外,这些资源需要在 cmake 配置期间添加。
现在在 Visual Studio 2019 中构建 CMAKE 生成的 OpenCV 项目。最后重要的是设置环境变量以查找 GStreamer Runtime。进入系统变量路径:添加
您需要将 VideoWriter 与 gstreamer Pipeline 结合使用。
VideoWriter writer( "appsrc ! videoconvert ! videoscale ! video/x-raw,width=320,height=240 ! theoraenc ! oggmux ! tcpserversink host=192.168.0.116 port=8080 recover-policy=keyframe sync-method=latest-keyframe unit-format=buffers units-max=1 buffers-max=0 sync=true ",
0,
5,
Size(320, 240),
true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5613 次 |
| 最近记录: |