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

    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()

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

    上一篇                       回目录                      下一篇

  • 相关阅读:
    java通过ST4使用模板字符串
    使用 docker创建redis实例并且连接
    Docker 认证成功后还是无法push构建好的镜像
    记录一次在openwrt中折腾docker
    全局模式、PAC模式、直连模式的区别
    Vue Router中调用this.$router.push() 时,location使用path无法传入params
    liunx之系统
    liunx之通配符&正则表达式
    liunx之基础
    liunx之find命令
  • 原文地址:https://www.cnblogs.com/ansersion/p/7137698.html
Copyright © 2011-2022 走看看