ubuntu 实现opencv读取图像后用RTSP推流并用vlc实现拉流

发布于:2025-08-13 ⋅ 阅读:(10) ⋅ 点赞:(0)

首先通过做下测试了解RTSP视频推流的详细过程

1.使用VLC界面推拉流测试

使用VLC media player对视频做RTSP格式的推流与拉流测试

2.使用VLC 通过代码推拉流测试

vlc test.mp4 --sout '#rtp{sdp=rtsp://:8554/live}' --sout-keep

本地拉流注意本地ip地址为127.0.0.1

vlc rtsp://127.0.0.1:8554/live

3.实现opencv读取图像后用RTSP推流并用vlc实现拉流

3.1Ubuntu 20.04 上安装 mediamtx(原 rtsp-simple-server)并执行服务器:

在https://github.com/bluenviron/mediamtx
点可执行文件mediamtx_v1.13.0_linux_amd64.tar.gz下载后执行。

./mediamtx

3.2如果笔记本有摄像头直接打开摄像头并使用ffmpeg推流,代码如下

#include <opencv2/opencv.hpp>
#include <cstdio>

int main() {
    cv::VideoCapture cap(0);
    if (!cap.isOpened()) {
        std::cerr << "Error: Could not open video source." << std::endl;
        return -1;
    }

    int frame_width = cap.get(cv::CAP_PROP_FRAME_WIDTH);
    int frame_height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
    double fps = cap.get(cv::CAP_PROP_FPS);
    if (fps <= 0) fps = 30;

    // 构建 FFmpeg 命令字符串
    std::string ffmpeg_cmd = 
        "ffmpeg -y -f rawvideo -pixel_format bgr24 -video_size " + 
        std::to_string(frame_width) + "x" + std::to_string(frame_height) + 
        " -framerate " + std::to_string(fps) + 
        " -i - -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/mystream";

    // 转换为 C 风格字符串
    FILE *ffmpeg_pipe = popen(ffmpeg_cmd.c_str(), "w");  // 关键修改:使用 .c_str()

    if (!ffmpeg_pipe) {
        std::cerr << "Error: Could not open FFmpeg pipe." << std::endl;
        return -1;
    }

    std::cout << "RTSP Streaming started: rtsp://localhost:8554/mystream" << std::endl;

    cv::Mat frame;
    while (true) {
        cap >> frame;
        if (frame.empty()) break;

        // 写入 FFmpeg 管道
        fwrite(frame.data, 1, frame.total() * frame.elemSize(), ffmpeg_pipe);

        cv::imshow("RTSP Streaming", frame);
        if (cv::waitKey(1) == 27) break;  // ESC 退出
    }

    pclose(ffmpeg_pipe);
    cap.release();
    cv::destroyAllWindows();
    return 0;
}

CmakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(opencv_rtsp_push LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(OpenCV REQUIRED)

add_compile_options(-g -O0)
add_executable(opencvCalib main.cpp)
target_link_libraries(opencvCalib
  ${OpenCV_LIBRARIES}
)


编译运行

./opencv_rtsp_push

3.3 打开VLC并显示视频

vlc rtsp://localhost:8554/mystream

网站公告

今日签到

点亮在社区的每一天
去签到