我以前做过一个这样的项目,基于android实现手机实时监控ipcam,ipcam厂商提供控件,该控件安装以后,在IE上面输入ipcam的ip地址,就可以实时查看ipcam的图像,这实时视频是通过HTTP协议来实现,HTTP的缺点是延时大,带宽消耗大,不能实时查看高分辨率的视频,优点是实现简单,基于TCP的传输机制能保证系统的稳定性。但ipcam同时也支持RTSP的方式来传输视频流,RTSP的优点是能保证较低的延时和带宽,缺点是RTSP协议需要自己来实现,RTSP协议是用RTP协议来传输流媒体,因此在网络带宽不好的情况下,会有丢包,抖动的现象。

目前在windows上RTSP支持的比较多,但在android上,android支持RTSP,但只限于有限的媒体格式,而且还支持文件播放形式。在我们的项目中,是要实时监控ipcam的视频流,要求支持H.264 MPEG4,因此决定自己实现一套这样的软件。

RTSP协议采用live555,软解码采用ffmpeg,框架采用mediastream2。我们先来了解一下RTSP协议。

RTSP协议栈分客户端和服务端,客户端请求视频流,双方约定一些参数信息,然后服务端就发送视频流发送到客户端指定的接收端口。服务端是通过RTP协议打包媒体流到客户端,客户端相应地要进行RTP解析才能播放,因此RTSP协议上是一个会话控制协议,媒体播放是基于RTP协议,网络拥塞控制也是基于RTP协议里面的RTCP来实现的,如下图所示:

RTSP控制分组是通过TCP协议来传输的,首先客户端要创建一个与服务端的TCP连接,也称会话。接下来的信令交互都在这个会话上来进行。RTSP是通过报文的传输来交互的

RTSP有两类报文:请求报文和响应报文。请求报文是指从客户向服务器发送请求报文,响应报文是指从服务器到客户的回答。

由于 RTSP 是面向正文的(text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。

RTSP报文由三部分组成,即开始行、首部行和实体主体。在请求报文中,开始行就是请求行,RTSP请求报文的结构如图2所示。

图2 RTSP请求报文的结构

RTSP请求报文的方法包括:OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、GET_PARAMETER和SET_PARAMETER。RTSP请求报文的常用方法及作用如表1所示。

表1 RTSP请求报文的常用方法及作用

方法

作用

OPTIONS

获得服务器提供的可用方法

DESCRIBE

得到会话描述信息

SETUP

客户端提醒服务器建立会话,并确定传输模式

TEARDOWN

客户端发起关闭请求

PLAY

客户端发送播放请求

响应报文的开始行是状态行,RTSP响应报文的结构如图3所示。

图3 RTSP响应报文的结构

1.3.    RTSP交互过程

C表示RTSP客户端,S表示RTSP服务端

 C->S: OPTION request            //询问S有哪些方法可用

S->C: OPTION response        //S回应信息中包括提供的所有可用方法

 C->S: DESCRIBE request      //要求得到S提供的媒体初始化描述信息

S->C: DESCRIBE response      //S回应媒体初始化描述信息,主要是sdp

 C->S: SETUP request         //设置会话属性,以及传输模式,提醒S建立会话

S->C: SETUP response         //S建立会话,返回会话标识符及会话相关信息

 C->S: PLAY request          //C请求播放

S->C: PLAY response          //S回应请求信息

S->C: 发送流媒体数据

 C->S: TEARDOWN request     //C请求关闭会话

S->C: TEARDOWN response     //S回应请求

上述的过程是标准的RTSP流程,其中第3步和第4步是必需的。

我们要注意的是,在第2步中,服务端返回的SDP信息非常重要,客户端通过这个SDP来获取服务端媒体信息,比如编码方式(决定了客户端采用何种解码器),RTP的payload(决定如何接收RTP包),音频的采样率,以及mepg4编码和H.264编码的一些额外信息(比如config字段,pps和sps字段)。在第3步中,发送setup报文,要带上端口号,这个端口号是客户端创建的用于接收服务端媒体流的端口,因此客户端需要将此端口号告诉服务端,服务端才能将媒体流发送到该端口,客户端才能正确接收,对于RTP over tcp的情况,情况就不一样了,媒体流会在会话里面进行传输,因为客户端与服务端已经创建了一条TCP连接,在这个连接里面既要完成信令的交互,也要完成媒体传输,因此在setup报文里要带上是否是RTP over UDP和RTP over TCP的标示。另外,在SDP里面定义了几个媒体,就要发送几个setup报文。比如SDP里面有一路video和一路audio,则要分别向video和audio发送setup请求。

基于android手机实时监控ipcam视频之一:RTSP相关推荐

  1. 基于android手机实时监控ipcam视频之二:mediastream2

    在项目中用到了mediastream2,mediastream2是一个框架,引擎,它驱动系统的整个流程,从接收rtp媒体流并解析到媒体解码到显示到android手机屏幕上,都是由mediastream ...

  2. 基于android手机实时监控ipcam视频之三:H.264的RTP打包解析

    因为项目中,ipcam的视频编码方式主要是基于H.264,因此ipcam出来的H.264码流会按照协议rfc3984来打包,mediastream2中收到rtp recv filter的数据后,必须先 ...

  3. 基于android公交车线路查询论文文献,基于Android手机的实时公交查询系统设计与实现...

    龙源期刊网 http://doc.xuehai.net 基于Android手机的实时公交查询系统设计与实现 作者:郭宏昌 来源:<物联网技术>2015年第11期 摘要:为了提高城市公交的智 ...

  4. Android手机实时视频监控

    最近手机安装了一个"千里眼"和千里眼家居远程监控的应用,对里面的实时监控交通路口的状态有点好奇.以是使用相应的方法反编译看看她的原理. 对于软件"千里眼",经过 ...

  5. C++基于OpenCV实现实时监控和运动检测记录

    基于OpenCV实现实时监控并通过运动检测记录视频 一.课程介绍 1. 课程来源 课程使用的操作系统为 Ubuntu 14.04,OpenCV 版本为OpenCV 2.4.13.1,你可以在这里查看该 ...

  6. 基于Android 移动端的网络视频探索系统【100010403】

    基于移动端的网络视频探索系统 1 引言 1.1 研究背景 智能手机用户在 2015 年占全:人数比例超过百分之十,在 2016 年的时候手机用户超过 20 亿,中国占百分之三十左右.现如今,全:的智能 ...

  7. 安卓设备门禁识别开发_基于android手机的视频通话门禁控制系统

    龙源期刊网 http://www.qikan.com.cn 基于 android 手机的视频通话门禁控制系统 作者:陆海 李登辉 来源:<科教导刊 · 电子版> 2017 年第 34 期 ...

  8. 基于android的检测心率,基于android手机的血氧饱和度检测

    67 基于 android手机的血氧饱和度检测 许方成,赵曙光,杨 峰,黄佳佳 (东华大学信息科学与技术学院,上海 201620) 摘要:血氧饱和度是人体健康状况的标准指标,连续记录血氧饱和度可以预测 ...

  9. 基于Android的实时共享白板虚拟会议空间设计与实现

    资源下载地址:https://download.csdn.net/download/sheziqiong/85730881 资源下载地址:https://download.csdn.net/downl ...

最新文章

  1. 九款让WordPress成为赚钱利器的广告插件
  2. 软件架构设计 温昱著 - 读书笔记
  3. python装什么版本-新手python用什么版本好?
  4. TCP连接建立系列 — 服务端接收ACK段(二)
  5. 深度洞见|一文详解 2022 数字营销的变与不变
  6. C/S,B/S的应用的区别
  7. 【LeetCode】69. Sqrt(x) (2 solutions)
  8. Raspberry PI 系列 —— 裸机点亮LED灯
  9. mac上配置php开发环境,Mac配置PHP开发环境
  10. 除法应用遇到的问题-类型及小数点
  11. Spring Data Jpa出现“Table ‘XXX.hibernate_sequence‘ doesn‘t exist”
  12. css 根据不同屏幕设置间距_18-CSS问题-让多个div横排显示并设置间距解决方案
  13. KNN之约会网站测试
  14. phpMyAdmin出现错误 Access denied for user 'root'@'localhost' (using password: NO)
  15. 什么是servlet?---总结一
  16. iOS IPV6审核被拒 - 芒果iOS开发
  17. 关于Eclipse配置Tomcat8的问题
  18. 青花瓷(charles)的基本使用和注意事项
  19. 请求转发与重定向详解
  20. 微信Native支付申请接入流程-避免踩坑指南

热门文章

  1. c语言如何宏定义枚举型结构体,C语言学习笔记--枚举结构体
  2. CCNA实验:实验二:交换机和路由器的IOS备份与恢复
  3. 2018,这一年的腾讯优图,我们总结一下!
  4. java obd_XTOOL X100 PAD3通过OBD给2014 BMW CAS4 Key编程
  5. 控件中一些常用的属性和事件
  6. 利用scrapy爬取东方资讯的新闻
  7. c++构造函数的定义
  8. 国家集训队论文分类整理
  9. 数独游戏-安卓版源代码和分析。
  10. 苹果手机微信声音小怎么调大声_【泽云广场|好声音KTV】19.9元畅享门市价198元下午场欢唱+茶水!79.9元尊享全天场欢唱+酒水小吃附带纸巾!越夜越时尚!...