一、MPEG RTP音频传输

相较H264的RTP传输格式,MPEGE音频传输格式则简单许多。

每一包MPEG音频RTP包都前缀一个4字节的Header,如下图(RFC2550)

“MBZ”必须为0(MustBeZero)。

“Frag_offset”为该包中有效的音频字节数。

myRtspClient的任务就是去掉每一个RTP包的前4字节的头,并将音频数据拼接并存入缓冲区,如图:

二、源码分析

在mpeg_types.cpp中,首先分析函数:

size_t FU_A::CopyData(uint8_t * buf, uint8_t * data, size_t size)

它的作用是将data中的数据复制到buf中,一共复制size个字节,返回实际复制的字节数。其中buf为用户的缓冲区,data为rtp接收的数据。

 1 size_t MPEG_Audio::CopyData(uint8_t * buf, uint8_t * data, size_t size)
 2 {
 3     size_t CopySize = 0;
 4     int Offset = 0;
 5     uint8_t * DataPointer = data;
 6
 7     if(!buf || !data) return 0;
 8     Offset = GetFlagOffset(DataPointer);
 9     if(Offset < MPEG_AUDIO_RTP_HEADER_SIZE) return 0;
10
11     memcpy(buf+CopySize, data + Offset, size - Offset);
12     CopySize += size - Offset;
13
14     return CopySize;
15 }

仔细看一下源码,我们会发现该函数先解析data的前4个字节的MPEG音频头(GetFlagOffset,源码如下),然后将data中的剩余数据保存进buf中。

1 int MPEG_Audio::GetFlagOffset(const uint8_t * rtp_payload)
2 {
3     int Offset = 0;
4
5     if(!rtp_payload) return -1;
6     Offset += MPEG_AUDIO_RTP_HEADER_SIZE;
7     Offset += (rtp_payload[2] << 8) + rtp_payload[3];
8     return Offset;
9 }

上一篇                 回目录                下一篇

转载于:https://www.cnblogs.com/ansersion/p/8431972.html

一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(八)RTP音视频传输解析层之MPA传输格式...相关推荐

  1. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(四)example代码解析...

    --------------------更新2018.08.20------------------- 添加http_tunnel_example.cpp作为RtspOverHttp示例程序. --- ...

  2. java安卓怎么开发一个新闻app,一个基于Android系统的新闻客户端(一)

    一个基于Android系统的新闻客户端(一) 一.整体概述 在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻. 服务端用WCF,宿主为window服务,客户端为Java写的 ...

  3. 从0开始写一个基于Flutter的开源中国客户端(5)——App整体布局框架搭建

    上一篇中我记录了Flutter中常用的一些布局,本篇开始开发基于Flutter的开源中国客户端了.在本篇博客中,要实现的是一个App的整体框架,包括页面底部的Tab导航菜单.页面的侧滑菜单以及跳转到新 ...

  4. 【上传文件】基于阿里云的视频点播VOD、对象存储OSS实现音视频图片等文件上传

    一.效果演示 a.测试界面初始化 b.点击[上传视频] c.点击[开始上传] d.点击[上传音频]选择音频之后点击[开始上传] c.点击[上传图片],注意图片上传为单按钮,选择文件之后自动完成上传 d ...

  5. [工具]利用EasyRTSPClient工具检查摄像机RTSP流不能播放原因以及排查音视频数据无法播放问题...

    出现问题 我们在做流媒体开发的过程中,进程会出现摄像机RTSP流莫名其妙无法播放的问题,而我们常用的vlc经常是直接弹出一个无法播放的提示框就完事了,没有说明出错的原因,或者在vlc的消息里面能看到日 ...

  6. 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)

    最近看了关于XMPP的框架,以文本聊天为例,需要发送的消息为: <message type="chat" from="kang@server.com" t ...

  7. [iPhone高级] 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)

    最近看了关于XMPP的框架,以文本聊天为例,需要发送的消息为: [html] view plaincopy <message type="chat" from="k ...

  8. bodhi linux 安装 ubuntu软件,Bodhi Linux 5.1.0 发布,基于Ubuntu的轻量级发行版

    Bodhi Linux是基于Ubuntu的轻量级发行版,具有Moksha桌面环境.现在有很多Linux发行版.有些是独特的,但很多是重复的,可能没有存在的必要.由于使用了Moksha桌面环境,一个基于 ...

  9. 基于 Vue 的轻量级静态网站生成器 VuePress

    Vue.js 的创始人尤雨溪大大在 twitter 上发布了一个全新的基于 Vue 的静态网站生成器-,这对于广大 Vue 爱好者来说无疑是一个好消息! 什么是VuePress VuePress由两部 ...

最新文章

  1. tensorflow2.0 基础一 常用数据类型及转换
  2. 蓝绿发布、滚动发布、灰度发布,有什么区别?这下明白了
  3. pip删除依赖、配置虚拟环境
  4. 笔记-高项案例题-2016年上-范围管理+沟通管理+进度管理+风险管理
  5. 是前端类库还是前端框架?
  6. 没有bug队——加贝——Python 练习实例 37,38
  7. 从BlackHat2013中我们收获了什么
  8. 协议圣经 四 rtspclient
  9. 《数据结构》双链循环线性表
  10. 文本获取和搜索引擎中的反馈模型
  11. 【预测模型】BP神经网络的预测
  12. 流程图绘制和符号含义
  13. Xposed 企业微信 Hook 微信
  14. 有哪些优秀的程序员社区
  15. 干货——MRD(市场需求文档)模板
  16. AI智能工具集(含AI语音合成、视频补帧、视频放大、目标检测、图片风格化等)
  17. 宠物动物有什么计算机专业岗位,宠物医院前台岗位职责
  18. 什么是Hash(哈希)?
  19. HSI彩色图像空间滤波
  20. 领存Xeon E5 6U VPX高性能计算刀片

热门文章

  1. iBatis报java.lang.RuntimeException: Error setting property错误
  2. STM32F103 系统启动时钟的选择和详细过程
  3. C# 中的委托(Delegate)
  4. mvc ---- ajax 提交过来的Json格式如何处理(解析)
  5. ie6不能播放视频问题
  6. 数据结构之C语言模拟整数数组实现
  7. 也做SQL查询:班级总成绩 前三名,总成绩有相等的情况
  8. 关于IIS和Serv-U在同一台服务器中端口冲突问题
  9. OpenCV的minEllipse函数(求轮廓的外接椭圆)一定要判断输入点是否大于5个
  10. HTTPS访问站点,出现证书问题解决