一个基于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()
释放构造函数申请的内存。