专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 多媒体设计

请问:RTSP服务器端是不是已经把音视频解析成了帧

发布时间:2011-06-27 19:10:40 文章来源:www.iduyao.cn 采编人员:星星草
请教:RTSP服务器端是不是已经把音视频解析成了帧?
最近在看一些关于RTSP方面的资料,很疑惑:我在想,RTSP服务器是不是已经把音视频数据解析成了一帧一帧的数据,然后再打成RTP包进行传输,这样,在客户端只需要把包解开,就得到了一帧一帧的音视频数据?之所以有这样的疑惑,是因为在网上看到如下代码:
class RTPFrame 
{
public:
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; // 版本为2
SetPayloadType(payloadType); // 
}

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

void SetPayloadSize(int size) 
{
_frameLen = size + GetHeaderSize(); // length = headerSize + PayloadSize
}

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

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

int GetHeaderSize() const 
{
int size;
size = 12; // 头长度
if (_frameLen < 12) 
{
return 0;
}
size += (_frame[0] & 0x0f) * 4; // CC记录CSRC的个数,每个是4个字节
if (!(_frame[0] & 0x10)) // 看扩展位
return size;
if ((size + 4) < _frameLen) // 扩展位
return (size + 4 + (_frame[size + 2] << 8) + _frame[size + 3]);
return 0;
}

bool GetMarker() const // 是否有标志位
{
if (_frameLen < 2) 
return false;
return (_frame[1] & 0x80); // 标志位
}

unsigned GetSequenceNumber() const // _frame[2] and _frame[3]
{
if (_frameLen < 4)
{
return 0;
}
return (_frame[2] << 8) + _frame[3];// or (_frame[2] << 8 ) | _frame[3]
}

void SetMarker(bool set) // _frame[1]: 1bit
{
if (_frameLen < 2) 
return;
_frame[1] = _frame[1] & 0x7f;
if (set) _frame[1] = _frame[1] | 0x80;
}

void SetPayloadType(unsigned char type) 
{
if (_frameLen < 2) 
return;
_frame[1] = _frame [1] & 0x80; // 先把payload清空
_frame[1] = _frame [1] | (type & 0x7f); // set
}

unsigned char GetPayloadType() const
{
if (_frameLen < 1)
return 0xff;
return _frame[1] & 0x7f;
}

unsigned long GetTimestamp() const // _frame[4-7]
{
if (_frameLen < 8)
return 0;
return ((_frame[4] << 24) + (_frame[5] << 16) + (_frame[6] << 8) + _frame[7]); // get:((_frame[4] << 24) | (_frame[5] << 16) | (_frame[6] << 8) | _frame[7])
}

void SetTimestamp(unsigned long timestamp) 
{
if (_frameLen < 8)
return;
_frame[4] = (unsigned char) ((timestamp >> 24) & 0xff); // set
_frame[5] = (unsigned char) ((timestamp >> 16) & 0xff);
_frame[6] = (unsigned char) ((timestamp >> 8) & 0xff);
_frame[7] = (unsigned char) (timestamp & 0xff);
};

protected:
unsigned char* _frame;
int _frameLen;
};
简单的说,我并不明白这里的RTPFrame和音视频帧(frame)是不是有某些联系。向大家请教。

------解决方案--------------------
个人理解:
文件传输时应该是一个个的字节数据包(包含:头、尾等信息),并不一定是完整的帧,客户端通常解析数据包再进行组合转换成帧
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • 3DMAX建模,该如何解决

    3DMAX建模 有哪问朋友可以做一个3DMAX的建模? 要求:熟悉3DMAX建模、可以到现场封闭1个月左右 地点:北京 费用:面谈 有意请与我联系:qyn...

  • 小弟我是新手,怎么做建筑动漫

    我是新手,如何做建筑动漫 请问一下动漫高手,我是动漫方面的新手,从那儿着手开始做建筑动漫,得学习哪些工具 ------解决方案---------...

  • 初学AE遇到的一个小疑点

    初学AE遇到的一个小问题! 图中的两个斜线怎么让它消失?就算是预览的时候都在!!!上面的字是Demo mode:Press "Options" to register....

  • 请教一下,纯3D的FLASH,需要什么软件做的

    请问一下,纯3D的FLASH,需要什么软件做的? 满有兴趣的,不知道需要哪些软件才能做, 有人讲直接在三D里面做,再用flash 来接起来的.?听说3D...

  • 问问opengl 和 3Dmax 还有maya的关系,该如何处理

    问问opengl 和 3Dmax 还有maya的关系 想问问 是不是 3D max 和maya 会取代opengl? 因为画三维图形, maya和 3dmax比 opengl 方便...

  • 能从.X文件中读取场景中物体信息么,该怎么处理

    能从.X文件中读取场景中物体信息么 比如说物体的名字,高度,类型,每个物体的贴图名字等等 ------解决方案-------------------- 物...

  • 动画制作,该怎么解决

    动画制作 要制作一个固体物理中的晶体形成的动画,求教,简单的动画 ------解决方案-------------------- 你是要教程还是要实例?...

  • 请问:3D人物动画有关问题

    请教:3D人物动画问题 我用poser7.0做了模型和几个动作比如微笑,摆手,点头等,我要在程序中使用这个模型和动作,模型保存的是3ds格式,动作...

  • 求名词解释 DirectX OpenGL 3Dmax Maya,该如何处理

    求名词解释 DirectX OpenGL 3Dmax Maya DirectX OpenGL 3Dmax Maya 求名词解释 这些软件之间有什么联系?什么区别? ------解决方...

  • 请问 怎么学好3ds max

    请教 如何学好3ds max 我是大二的学生,因为要做三维地图,要学习3ds max, 学习的主要是3ds max在建筑物建模的方面,求问有什么 好的方...

热门推荐: