rtsp client c++

直接上代码:源码

void doRtspParse(char *b) {
    std::vector<std::string> res;
    char *ptr = b, *ptr1 = nullptr;
    while ((ptr1 = strstr(ptr, "\r\n"))) {
      res.push_back(std::string(ptr, ptr1 - ptr));
      ptr = ptr1 + 2;
    }
    int len = ptr - b;
    b[len - 1] = '\0';
    Debug("%d read --> \n%s", len, b);
    switch (cmd_) {
    case OPTIONS: {
      auto it = std::find_if(res.begin(), res.end(), [&](std::string &s) {
        return s.find("WWW-Authenticate") != std::string::npos;
      });
      if (it == res.end()) {
        doWriteCmd(DESCRIBE, seq_++, url_.GetAuth("DESCRIBE").c_str());
      } else {
        url_.SetAuth(it->c_str());
        doWriteCmd(OPTIONS, seq_++, url_.GetAuth("OPTIONS").c_str());
      }
      break;
    };
    case DESCRIBE: {
      sdp_.Parse(res);
      this->decode_ = Unmarshal264;
      if (sdp_.medias[0].rtpmap.find("H265") != std::string::npos) {
        this->decode_ = Unmarshal265;
      }
      doWriteCmd(SETUP, sdp_.medias[0].id.c_str(), seq_++, sdp_.session.c_str(),
                 url_.GetAuth("SETUP").c_str());
      if (atype_ == 0xff) {
        cmd_ = SETAUDIO;
      }
      break;
    };
    case SETUP:
      doWriteCmd(PLAY, seq_++, sdp_.session.c_str(),
                 url_.GetAuth("PLAY").c_str());
      break;
    case SETAUDIO: {
      auto it = std::find_if(sdp_.medias.begin(), sdp_.medias.end(),
                             [](sdp::media &m) {
                               return m.id.find("audio") != std::string::npos;
                             });
      if (it == sdp_.medias.end()) {
        doWriteCmd(PLAY, seq_++, sdp_.session.c_str(),
                   url_.GetAuth("PLAY").c_str());
      } else {
        atype_ = it->format;
        doWriteCmd(SETUP, it->id.c_str(), seq_++, sdp_.session.c_str(),
                   url_.GetAuth("SETUP").c_str());
      }
    } break;
    default:
      rbuf_.Remove(len);
      return;
    }
    rbuf_.Reset(0);
  }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值