Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7366
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 31
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-21 09:20
文章分类
文章存档

2015年(2)

我的朋友

分类: C/C++

2015-06-25 11:26:19

RTSP SERVER设计方案说明书

1  引言

1.1  编写目的

本文档主要描述了RtspServer模块的功能说明、使用说明和详细设计。

1.2  背景

RTSP为实时媒体流控制协议,该协议在媒体流传输控制领域的运用非常广泛和普及,RtspServer模块的实现,给其它程序使用后,可以满足像VLC等媒体客户端通过RTSP协议访问该程序管理的媒体源。

1.3  参考资料

参考资料

rfc2326 RTSP标准协议》

 

1.4  术语定义及说明

术语

含义

RTSP

实时流传输协议

VLC

VideoLAN计划的多媒体播放器

1.5  任务和目标

本次任务主要是设计RtspServer模块,方便其它程序调用,以支持客户端通过RTSP协议访问程序管理的媒体流。

2  功能概述

2.1  媒体源URL描述

RTSP协议中用URL定位网络资源,对于媒体服务器管理的每路媒体资源都有唯一的URL进行定位,URL格式设计如下:

RTSP_URL = rtsp :// host [: port] / source

 

URL中“rtsp”说明RTSP请求使用TCP可靠协议传输。host为媒体服务器IP地址,port为媒体服务器的RTSP服务端口,端口缺省则默认为554,当RTSP服务端口非554时,客户端URL必须包含服务端口。

Source为媒体资源名,媒体资源名由RtspServer使用者自行设计。

2.2  RTSP指令支持

指令

含义

OPTIONS

获取服务器支持的功能。

DESCRIBE

查询媒体对象。

SETUP

指定流媒体的传输机制。

PLAY

开始发送数据。

PAUSE

暂停发送数据。

GET_PARAMETER

用来测试客户端与服务器的连通情况。

SET_PARAMETER

用来测试用户与服务器的连通情况。

TEARDOWN

释放相关流媒体资源。

2.3  媒体源传输设计

 

媒体流传输流程图

 

如图所示,客户端请求媒体数据时,RTSP CLIENTRtspServer进行RTSP协议交互,建立媒体传输会话和控制媒体传输。

媒体传输流程具体描述如下:

1)   客户端向服务端发送OPTIONS请求,查询服务端支持RTSP服务的功能;

2)   服务端回应客户端OPTIONS请求,回复服务端支持RTSP服务的功能;

3)   客户端向服务端发送DESCRIBE请求,请求URL指明访问的媒体源,查询媒体源信息;

4)   服务端回调媒体信息查询接口,接口返回媒体视频、音频信息(信息主要说明是否有音频流);

5)   服务端回应客户端DESCRIBE请求,回复包含媒体源描述SDP

6)   客户端向服务端发送SETUP请求,申请媒体的视频流资源,请求包含客户端视频流接收地址;

7)   服务端回调媒体视频申请接口,接口传入视频流接收地址,返回视频流发送地址;

8)   服务端回应客户端SETUP请求,回复包含视频流收发地址参数;

9)   客户端向服务端发送SETUP请求,申请媒体的音频流资源,请求包含客户端音频流接收地址;

10)  服务端回调媒体音频申请接口,接口传入音频流接收地址,返回音频流发送地址;

11)  服务端回应客户端SETUP请求,回复包含音频流收发地址参数;

12)  客户端向服务端发送PLAY请求,请求开始播放媒体;

13)  服务端回调媒体播放接口,开始播放媒体;

14)  服务端回应客户端PLAY请求,回复包含媒体播放参数;

15)  服务端向客户端发送媒体流,媒体传输使用RTP/RTCP协议;

16)  客户端向服务端发送心跳保活请求,保活请求可以为OPTIONSSET_PARAMETERGET_PARAMETER

17)  服务端对媒体会话心跳保活,每次心跳保活时间为1分钟;

18)  服务端回应客户端心跳保活请求;

19)  客户端向服务端发送TEARDOWM请求,请求释放媒体会话;

20)  服务端回调媒体资源释放接口,释放媒体会话;

21)  服务端回应客户端TEARDOWM请求。

 

2.4  协议栈选择

参考live555提供的协议栈进行设计,使用C++语言开发。


 

3  RtspServer模块设计

3.1  总体设计


方案总体设计图

如图所示,程序SERVER使用RtspServer模块,外部RTSP客户端通过RTSP交互与RTSP SERVER建立媒体传输会话,并通过调用程序SERVER提供的媒体流控制接口,控制媒体流传输。

3.2  RtspServer模块设计

3.2.1  类结构图

 

3.2.2  功能描述

1)   RtspServer

RtspServer类负责启动监听RTSP客户端连接线程和管理RtspReactor对象。RtspServer类管理多个RtspReactor对象,RtspReactor对象个数由客户端连接数确定,当RtspReactor对象添加RtspConnector对象超过64个时会创建新的RtspReactor对象;当RtspReactor对象管理的RtspConnector对象个数为0时,会删除RtspReactor对象。的线程主要负责监听RTSP客户端连接,分配RtspReactor并添加RtspConnector对象,清理空闲的RtspReactor对象。线程执行流程如图。

 

2)   RtspReactor

RtspReactor类负责启动消息收发处理线程和管理RtspConnect对象。一个RtspReactor最多管理64RtspConnector对象。线程主要负责循环接收客户端RTSP消息,处理消息、发送回应消息给客户端和清理超时的RtspConnector对象。执行流程如图。

 

3)   RtspConnector

RtspConnector类包含媒体会话MediaSession对象、主要负责接收发送RTSP请求和调用MediaSession对象方法处理请求。

3.3  RtspSession模块设计

3.3.1  类结构图


3.3.2  功能描述

1)   MediaSession

MediaSession类包含媒体会话参数和会话状态机,主要负责处理RTSP请求,响应请求、控制媒体传输、生成回应消息和会话状态跳转。

2)   RtspMediaProvider

RtspMediaProvider类提供媒体传输控制接口。

3)   RtspFsm

RtspFsm类负责会话状态跳转。状态机设计如图。

3.4  RtspPaser类设计

3.4.1  类结构图


3.4.2  功能描述

1)   RtspPaser

RtspPaser类用于解析RTSP请求消息和生成RTSP回应消息。

3.5  接口设计

3.5.1  类结构图

 

3.5.2  功能描述

1)   RtspMediaProvider

RtspMediaProvider为虚类,提供媒体流传输控制接口。

2)   RtspMediaProviderFactory

RtspMediaProviderFactory为虚类,提供RtspMediaProvider实例生成接口。

 

阅读(1770) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~