使用 RTSP 从 Opencv 处理后,视频从 PC 流式传输到 Android

Posted

技术标签:

【中文标题】使用 RTSP 从 Opencv 处理后,视频从 PC 流式传输到 Android【英文标题】:Video Streaming to Android from PC after processing from Opencv using RTSP 【发布时间】:2017-02-22 02:28:05 【问题描述】:

我正在尝试在 opencv 中处理后将从两个网络摄像头获取的组合视频流传输到 android 应用程序(组合两个帧)。

我在这里尝试使用 RTSP 将视频流从 opencv 发送到 Android(使用 gstreamer 管道)。

但我被困在如何将 .sdp 文件配置发送到客户端(文件名为 live.sdp),这是我目前使用的代码。

//basic
#include <iostream>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>


//opencv libraries
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"




using namespace cv;
using namespace std;






int main(int argc,char **argv)

Mat im1;
Mat im2;




VideoCapture cap1(1);
VideoCapture cap2(2);


VideoWriter video;
video.open("appsrc ! videoconvert ! x264enc noise-reduction=10000 tune=zerolatency byte-stream=true threads=4 ! mpegtsmux ! rtpmp2tpay send-config=true config-interval=10 pt=96 ! udpsink host=localhost port=5000 -v"
            , 0, (double)20,Size(1280, 480), true);



if(video.isOpened())
    cout << "Video Writer is opened!"<<endl;
else
    cout << "Video Writer is Closed!"<<endl;
 return -1;





while(1)

    cap1.grab();
    cap2.grab();

    bool bSuccess1 = cap1.read(im2);
    bool bSuccess2 = cap2.read(im1);

        Size sz1 = im1.size();
        Size sz2 = im2.size();
        Mat im3(sz1.height, sz1.width+sz2.width, CV_8UC3);
        Mat left(im3, Rect(0, 0, sz1.width, sz1.height));
        im1.copyTo(left);
        Mat right(im3, Rect(sz1.width, 0, sz2.width, sz2.height));
        im2.copyTo(right);
            video << im3;

        //imshow("im3", im3);


            if(waitKey(10) == 27)

                break;
            
        
        cap1.release();
        cap2.release();
        video.release();

    return 0;


还有.sdp文件配置,

v=0
m=video 5000 RTP/AVP 96
c=IN IP4 localhost
a=rtpmap:96 MP2T/90000

我可以在本地文件夹中播放来自 vlc 的流, 使用

vlc live.sdp

但不在网络内部,通过使用,

vlc rtsp://localhost:5000/live.sdp

【问题讨论】:

【参考方案1】:

使用 Gstreamer 和 opencv 解决了这个问题,但仍然有小的延迟。

【讨论】:

以上是关于使用 RTSP 从 Opencv 处理后,视频从 PC 流式传输到 Android的主要内容,如果未能解决你的问题,请参考以下文章

通过 RTSP 流式传输 opencv 视频

OpenCV 捕获多个 RTSP 流 - Python

ffmpeg接收rtsp流问题

当我使用 rtsp 摄像头流时,opencv 视频捕获滞后

OpenCV - 如何捕获 rtsp 视频流

有关opencv无法解码网络摄像头rtsp流的解决办法