c++ - 如何在 C++ 中使用 ffmpeg 流式传输 opencv Mat

标签 c++ opencv ffmpeg streaming

我是新来的。我正在尝试使用 ffmpeg 在 LAN 上流式传输一些使用 opencv 处理的图像。 我看到了这个: Pipe raw OpenCV images to FFmpeg 但它对我不起作用,它只会产生噪音。我认为我发送的数据格式不正确。 我也看看这个: How to send opencv video's to ffmpeg 但是(查看最后一个答案)选项 -f jpeg_pipe 给我错误。

我现在做什么:

  • 我有一个名为“composedImage”的 RGB Mat
  • 我发送输出: std::cout << 组合图像; 输出是由逗号分隔的像素值
  • 然后我调用:

./例子 | ffmpeg -f rawvideo -pixel_format bgr24 -video_size 160x120 -framerate 20 -i - -f udp://192.168.1.79:1234

  • 我尝试使用 VLC(它不起作用)和 ffplay 阅读:

ffplay -f rawvideo -pixel_format gray -video_size 160x120 -framerate 30 udp://192.168.1.79:1234

这里看起来很简单: http://ffmpeg.org/ffmpeg-formats.html#rawvideo

我也试过写图片发过去了,还是有错误。可能它会在图像完成之前尝试发送。

感谢您的帮助。

最佳答案

我成功地进行了流式传输,尽管质量不佳,也许一些 ffmpeg 大师可以帮助解决 ffmpeg 命令问题。

#include <iostream>                                                          
#include <opencv2/opencv.hpp>                                                
#include <vector>                                      

using namespace cv;                                                          

int main() {                                                                 
    VideoCapture cap("Your video or stream goes here");
    Mat frame;                                                               
    std::ios::sync_with_stdio(false);                                        

    while (cap.read(frame)) {                                                
        for (size_t i = 0; i < frame.dataend - frame.datastart; i++) 
           std::cout << frame.data[i];                                   
    }                                                                        

    return 0;                                                                
}                                                                            

然后将其通过管道传输到 ffmpeg 中

./test | ffmpeg -f rawvideo -pixel_format bgr24 -video_size 1912x796 -re -framerate 20  -i - -f mpegts -preset ultrafast udp://127.0.0.1:1234

然后用 ffplay mpv 或其他什么播放它

ffplay udp://127.0.0.1:1234

关于c++ - 如何在 C++ 中使用 ffmpeg 流式传输 opencv Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49013749/

相关文章:

c++ - 返回指向层序二叉树中第 n 个节点的指针

opencv - Tesseract&Opencv程序镜像问题显示一些错误

clCreateImage2D - 加载 RGB 图像

python - 如何为 Python 和 Ubuntu 安装 OpenCV 2.4.7

bash - youtube-dl 每 5 分钟下载一分钟(在 twitch 视频上,但如果更容易,我也保存了本地文件)

C++ 预处理器 __typeof

C++ 字符串附加格式化数据

C++ 返回但未存储的值会发生什么?

php - 输出 HLS m3u8 TS 段 PHP-FPM Nginx

ffmpeg - 任何熟悉 ffmpeg 如何处理在 UDP 上接收到的乱序 MPEGTS 数据包的人