您当前的位置: 首页 > 

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

RTP发送和接收(有图为证)

qianbo_insist 发布时间:2021-02-26 19:19:50 ,浏览量:0

RTP协议接收和播放

前面讲过RTP协议的重要性,说过发送RTP协议,RTP协议重要性下面我们开始写发送和接收程序,不依赖于jrtplib等RTP库,自行接收。这样,有利于以后将RTP直接转到Webrtc上

RTP接收

首先定义RTPFrame结构体,一般来讲,我们都是12字节头部,但不是一定的,自行扩展是允许的,具体看RTP的头部字节含义。maker是代表结束,为1,没有结束为0,还有一个更简单的方法,当一帧结束时,timstamp一定会改变,也可以这样来断定,具体来说,也没有一帧的概念,或者称为一个nalu视频的切换。ok,show me the code,注意,像时间戳,seq no,以及ssrc等都是网络字节序,是大端格式,读者必须将这些字节序理解。seq no 为16位两字节,达到最大值又从零开始。

struct RTPFrame {
  RTPFrame(const unsigned char * frame, int frameLen) {
    _frame = (unsigned char*) frame;
    _frameLen = frameLen;
  };

  RTPFrame(unsigned char * frame, int frameLen, unsigned char payloadType) {
    _frame = frame;
    _frameLen = frameLen;
    if (_frameLen > 0)
      _frame [0] = 0x80;
    SetPayloadType(payloadType);
  }

  unsigned GetPayloadSize() const {
    return (_frameLen - GetHeaderSize());
  }

  void SetPayloadSize(int size) {
    _frameLen = size + GetHeaderSize();
  }

  int GetFrameLen () const {
    return (_frameLen);
  }

  unsigned char * GetPayloadPtr() const {
    return (_frame + GetHeaderSize());
  }

  int GetHeaderSize() const {
    int size;
    size = 12;
    if (_frameLen             
关注
打赏
1663161521
查看更多评论
0.0475s