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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?