FFMPEG Pipeline

393 views Asked by At

I created an FFMPEG pipeline so that I can stream video frames to an RTSP server. I created a synthetic video for testing where each frame is a green number on a black background. The video plays on my screen but it does not stream to the server because I get the error "Unable to find a suitable output format for 'rtsp://10.0.0.6:8554/mystream" My code is below. The source code is taken from the answer: How to stream frames from OpenCV C++ code to Video4Linux or ffmpeg?

int main() {
    int width = 720;
    int height = 1280;
    int fps = 30;

    FILE* pipeout = _popen("ffmpeg -f rawvideo -r 30 -video_size 720x1280 -pixel_format bgr24 -i pipe: -vcodec libx264 -crf 24 -pix_fmt yuv420p rtsp://10.0.0.6:8554/mystream", "w");



    for (int i = 0; i < 100; i++)
    {
        Mat frame = Mat(height, width, CV_8UC3);
        frame = Scalar(60, 60, 60); //Fill background with dark gray 
        putText(frame, to_string(i + 1), Point(width / 2 - 50 * (int)(to_string(i + 1).length()), height / 2 + 50), FONT_HERSHEY_DUPLEX, 5, Scalar(30, 255, 30), 10);  // Draw a green number

        imshow("frame", frame);
waitKey(1); 

        fwrite(frame.data, 1, width * height * 3, pipeout);
    }
    // Flush and close input and output pipes
    fflush(pipeout);

    _pclose(pipeout);   //Windows
    return 0;
}

When I change -f rawvideo to -f rtsp in the FFMPEG command, I no longer get the error but the program just displays the first frame on the screen and seems to get stuck. Is there a wrong parameter in the pipeline. When I change the RTSP url to a file name such as output.mkv, it works perfectly and saves the video to the file.

0

There are 0 answers