代码改变世界

一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(二)用户接口层之RtspClient类及其构造函数

2017-07-09 10:55  Ansersion  阅读(1594)  评论(0编辑  收藏  举报

RtspClient类是myRTSPClient函数库所有特性集中实现的地方。

主要为用户提供:

1. RTSP协议通信接口函数,如DoOPTIONS();

2. RTSP账号、密码设置函数,如SetUsername();

3. 音视频码流接收函数,如GetVideoData()。

本篇主要介绍RtspClient的构造函数和析构函数。

 

一、RtspClient::RtspClient()

 1 RtspClient::RtspClient():
 2     RtspURI(""), RtspCSeq(0), RtspSockfd(-1), RtspIP(""), RtspPort(PORT_RTSP), RtspResponse(""), SDPStr(""), 
 3     VPS(""), SPS(""), PPS(""), CmdPLAYSent(false), GetVideoDataCount(GET_SPS_PPS_PERIOD),
 4     Username(""), Password(""), Realm(""), Nonce("")
 5 {
 6     MediaSessionMap = new map<string, MediaSession>;
 7     AudioBuffer.Size = 0; 
 8     VideoBuffer.Size = 0; 
 9     if((AudioBuffer.Buf = (uint8_t *)malloc(BUFSIZ)))
10         AudioBuffer.Size = BUFSIZ;
11     if((VideoBuffer.Buf = (uint8_t *)malloc(BUFSIZ)))
12         VideoBuffer.Size = BUFSIZ;
13 
14 }

其中GetVideoDataCount是一个计数周期长度,仅当接收H264/H265视频数据时有用。在调用GetVideoData()时,表示每当接收到"GetVideoDataCount"个NALU数据包之后,重新将SPS和PPS(针对H265还有VPS)加入到下一个接收到的NALU数据包中。该功能是为了防止SPS和PPS(针对H265还有VPS)丢失。可以通过GetVideoData()的参数开启/关闭,默认是开启的。

MediaSessionMap是一个媒体会话映射表,一般就audio和video这2个值,其中保存着和音视频通信会话相关的基本信息,并提供“RTP音视频传输解析层”的相关接口。

AudioBuffer和VideoBuffer是用于暂存一帧数据的缓冲区,最好保证其大小大过一帧数据。

 

二、RtspClient::RtspClient(string uri)

 相较于RtspClient::RtspClient(),该构造函数不同的一点就是指定了RtspURI这个成员变量,如"rtsp://127.0.0.1/ansersion"。该变量也可通过SetURI()设置。

 

三、RtspClient::~RtspClient()

释放构造函数申请的内存。

 

上一篇                       回目录                      下一篇