一、RTSP是什么?用来干什么?

RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP请求由客户机发出,服务器作出响应;使用RTSP时,客户机和服务器都可以发出请求,即RTSP可以是双向的。RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。而前面提到的允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,更进而支持多方视讯会议(Video Conference)。因为与HTTP1.1的运作方式相似,所以代理服务器〈Proxy〉的快取功能〈Cache〉也同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。

可以看出,RTSP作为一个应用层协议,主要是因为它的网络适应性、忍耐性,使得在电视电话会议,特别是在现在网络直播上面得到非常广泛应用。

二、图像处理项目需要如何使用RTSP?

对于图像处理程序来说,RTSP作为一种视频格式,主要是作为图像处理算法的输入和输出而存在的。比如从网络上接入的(带系统的摄像机直接生成的)实时视频流,需要接入我们的系统;再比如算法的结果生产,如何附加到RTSP流上再传播出去。

这个时候可能会遇到几个问题,首先是设置的问题。在基于DShow(非常巨大而且强大)的传统接入方式下,我们可以直接对摄像头的输入进行设置(基于filiter),而对于RTSP来说,可能是缺少统一的方法,而必须依据厂商自己的工具(因为它有一个操作系统在里面)。

而对于如何附件到生成结果上来,又相当于编写RTSP服务,从而必须对它有比较深入的了解。

三、OpenCV调用RTSP的几种方式。

1、OpenCV自己基于FFMPEG集成了调用,这是最快的方式;

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
        VideoCapturecap;
        cap.open("rtsp://0.0.0.1/stream1");//呵呵,就这一句关键
        MatCamera_CImg;
        MatCamera_GImg;
        cap.set(CV_CAP_PROP_FRAME_HEIGHT,768);
        cap.set(CV_CAP_PROP_FRAME_WIDTH,1024);
        if (!cap.isOpened())
        return 1024;
        while (1)
        {
                  cap>> Camera_CImg;
                  if(Camera_CImg.empty())
                  break;
                  cvtColor(Camera_CImg,Camera_GImg, CV_RGB2GRAY);
                  imshow("input", Camera_CImg);
                  if (cvWaitKey(10) == 'q')
                  break;
        }
        system("pause");
return 0;
}

关于那个"呵呵“一句,我估计实际使用的时候,可能还有一些新的问题。同时我也非常认为,这种默认的方法,总是不专业。

2、基于DShow,构建FILTER(没有深入研究)

开源的实现了RTSP协议的Directshow Filter比较少,一个开源的Filter:RTSP Renderer Filter,完成了一个小型RTSP 服务器的功能。

https://blog.csdn.net/toshiba689/article/details/79410852

3、仿制专门的RTSP播放程序

这个地方,我有两个推荐。

一个是 EasyPlayer-RTSP-Win forked from EasyDSS/EasyPlayer-RTSP-Win(https://github.com/jsxyhelu/EasyPlayer-RTSP-Win)

An elegant, simple, fast windows RTSP Player.EasyPlayer support RTSP(RTP over TCP/UDP),video support H.264/H.265,audio support G.711/G.726/AAC!EasyPlayer RTSP是一款精炼、高效、稳定的RTSP流媒体播放器,视频支持H.264/H.265,音频支持G.711/G.726/AAC,支持RTP over UDP/TCP两种模式! http://www.easydarwin.org/

应该说全部中文,vs程序,而且关键是非常对口。下一步我将基于它来进一步研究。

一个是非常常见的VLC(https://github.com/videolan/vlc)

但是这个比较复杂,集成起来比较困难。当作软件使用倒是不错。

四、小结和扩展

随着技术和需求的不断发展,对于视频的调用越来越迫切。RTSP是其中一个非常重要的知识节点。认真研究,一定能够有所收获。

感谢阅读至此,希望有所收获。


【4OpenCV】OpenCV和RTSP的综合研究的更多相关文章

  1. (4opencv)OpenCV PR 成功的收获和感悟

     2018-09-12,第一次对OpenCV PR成功 https://github.com/opencv/opencv/pull/12206 <find innercircle of cont ...

  2. OpenCV获取RTSP解码播放

    #include <opencv2/opencv.hpp> int main(int argc, char **argv){ IplImage *pFrame = NULL, *srcIm ...

  3. OpenCV读取RTSP视频流

    用opencv的VideoCapture读取RTSP视频流,只有opencv3.1版本可以,之前的版本都无法读取视频流.可能的原因是云平台的RTSP视频流太差,经常错码.项目最后使用的是opencv2 ...

  4. 王爽-汇编语言-综合研究四-不使用main函数编程

    (一) 研究目的 使用C语言编程,我们一定要使用main函数么? (二) 研究过程 1) 最初的程序 首先,我们编写一个不写main函数的C语言程序. 程序如下: 在编译的过程中,没有发现错误.在链接 ...

  5. 王爽-汇编语言-综合研究一-搭建简易C环境

    (一) 学习过程: 整个过程分为两个部分: 第一:将TC2.0的环境使用虚拟软盘复制到DOS虚拟机中: 打开WinImage,fileànew,由于TC2.0的环境解压后为2.02M,所以我们在Sta ...

  6. 深入研究C语言 第一篇(续)

    没有读过第一篇的读者,可以点击这里,阅读深入研究C语言的第一篇. 问题一:如何打印变量的地址? 我们用取地址符&,可以取到变量的偏移地址,用DS可以取到变量的段地址. 1.全局变量: 我们看到 ...

  7. 研究实验1_搭建一个精简的C语言开发环境(包含部分经典的前言)

    综合研究:      在这部分内容中,将启示我们如何进行独立研究和深度思考(一定要注意这一点,相应的调整自己的学习思想).同时使我们:          (1)认识到汇编语言对于深入理解其他领域知识的 ...

  8. 研究不定数量参数的函数并实现一个printf函数

    一.前提知识 1.如何传递参数(主函数) a.函数的参数是通过栈传递,而且是从右到左依次入栈 b.即使是char型变量,在传递参数时,也是占用两个字节,因为push操作是两个字节为单位的. c.sho ...

  9. 用汇编语言研究C语言的全局变量、局部变量、参数、返回值放在哪里

    前提知识 c0s调用main函数的地址: 11ah main函数的连接地址: 01fah 一.全局变量与局部变量 测试程序 int a1,a2,a3; void f(void); void g(voi ...

随机推荐

  1. Appium环境搭建(一)

    python环境做测试,需要准备工具如下: 1.python2.7(这里使用的是python2你也可以选更高版本) 2.Appium(Window版) 3.Android SDK 4.Appium_P ...

  2. 关于 CGI,Fastcgi和php-fpm 理解

    首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index.h ...

  3. vue中使用ckeditor

    1.第一步首先去ckeditor官网去下载editor文件,这里以ckeditor4为例 首先在index.html里引入js代码 <script type="text/javascr ...

  4. jQuery_ajax请求超时

    设置timeout的时间,通过检测complete时status的值判断请求是否超时,如果超时执行超时的操作. $.ajax({ url:'', timeout : 1000, //超时时间设置,单位 ...

  5. Mysql由浅入深

      1. Mysql的安装方式 1. yum安装mysql 适合对数据库要求不太高的场合,例如:并发不大,公司内部,企业内部. 1. 官网下载yum源,wget https://dev.mysql.c ...

  6. ping主机不通邮件报警

    #!/bin/bash#Author: wang#Date: 20170825 for ip in "192.168.101.28" do ping -c 1 $ip && ...

  7. windows Server2012 IIS8.0配置安装完整教程

    IIS8.0是windows Server2012自带的服务器管理系统,和以往不同,IIS8.0安装和操作都比较简单,界面很简洁,安装也很迅速.今天我们重点完整的演示下Internet Informa ...

  8. c#Stream学习笔记

    C# 温故而知新:Stream篇(—) http://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html 基本概念重点看这一篇. 什么 ...

  9. centos python2升级为python3 升级旧版本django

    阿里云centos python3 及django的配置 安装python3后 pip 会把下载的包安入python2.7 下面解决该问题 python3.5安装1,安装依赖包#yum install ...

  10. 转:php 5.5源码安装全过程

    下载 PHP 源码包 # wget http://cn2.php.net/distributions/php-5.5.15.tar.bz2 # tar xf php-5.5.15.tar.bz2 -C ...