一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(八)RTP音视频传输解析层之MPA传输格式...
一、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传输格式...相关推荐
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(四)example代码解析...
--------------------更新2018.08.20------------------- 添加http_tunnel_example.cpp作为RtspOverHttp示例程序. --- ...
- java安卓怎么开发一个新闻app,一个基于Android系统的新闻客户端(一)
一个基于Android系统的新闻客户端(一) 一.整体概述 在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻. 服务端用WCF,宿主为window服务,客户端为Java写的 ...
- 从0开始写一个基于Flutter的开源中国客户端(5)——App整体布局框架搭建
上一篇中我记录了Flutter中常用的一些布局,本篇开始开发基于Flutter的开源中国客户端了.在本篇博客中,要实现的是一个App的整体框架,包括页面底部的Tab导航菜单.页面的侧滑菜单以及跳转到新 ...
- 【上传文件】基于阿里云的视频点播VOD、对象存储OSS实现音视频图片等文件上传
一.效果演示 a.测试界面初始化 b.点击[上传视频] c.点击[开始上传] d.点击[上传音频]选择音频之后点击[开始上传] c.点击[上传图片],注意图片上传为单按钮,选择文件之后自动完成上传 d ...
- [工具]利用EasyRTSPClient工具检查摄像机RTSP流不能播放原因以及排查音视频数据无法播放问题...
出现问题 我们在做流媒体开发的过程中,进程会出现摄像机RTSP流莫名其妙无法播放的问题,而我们常用的vlc经常是直接弹出一个无法播放的提示框就完事了,没有说明出错的原因,或者在vlc的消息里面能看到日 ...
- 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)
最近看了关于XMPP的框架,以文本聊天为例,需要发送的消息为: <message type="chat" from="kang@server.com" t ...
- [iPhone高级] 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)
最近看了关于XMPP的框架,以文本聊天为例,需要发送的消息为: [html] view plaincopy <message type="chat" from="k ...
- bodhi linux 安装 ubuntu软件,Bodhi Linux 5.1.0 发布,基于Ubuntu的轻量级发行版
Bodhi Linux是基于Ubuntu的轻量级发行版,具有Moksha桌面环境.现在有很多Linux发行版.有些是独特的,但很多是重复的,可能没有存在的必要.由于使用了Moksha桌面环境,一个基于 ...
- 基于 Vue 的轻量级静态网站生成器 VuePress
Vue.js 的创始人尤雨溪大大在 twitter 上发布了一个全新的基于 Vue 的静态网站生成器-,这对于广大 Vue 爱好者来说无疑是一个好消息! 什么是VuePress VuePress由两部 ...
最新文章
- tensorflow2.0 基础一 常用数据类型及转换
- 蓝绿发布、滚动发布、灰度发布,有什么区别?这下明白了
- pip删除依赖、配置虚拟环境
- 笔记-高项案例题-2016年上-范围管理+沟通管理+进度管理+风险管理
- 是前端类库还是前端框架?
- 没有bug队——加贝——Python 练习实例 37,38
- 从BlackHat2013中我们收获了什么
- 协议圣经 四 rtspclient
- 《数据结构》双链循环线性表
- 文本获取和搜索引擎中的反馈模型
- 【预测模型】BP神经网络的预测
- 流程图绘制和符号含义
- Xposed 企业微信 Hook 微信
- 有哪些优秀的程序员社区
- 干货——MRD(市场需求文档)模板
- AI智能工具集(含AI语音合成、视频补帧、视频放大、目标检测、图片风格化等)
- 宠物动物有什么计算机专业岗位,宠物医院前台岗位职责
- 什么是Hash(哈希)?
- HSI彩色图像空间滤波
- 领存Xeon E5 6U VPX高性能计算刀片
热门文章
- iBatis报java.lang.RuntimeException: Error setting property错误
- STM32F103 系统启动时钟的选择和详细过程
- C# 中的委托(Delegate)
- mvc ---- ajax 提交过来的Json格式如何处理(解析)
- ie6不能播放视频问题
- 数据结构之C语言模拟整数数组实现
- 也做SQL查询:班级总成绩 前三名,总成绩有相等的情况
- 关于IIS和Serv-U在同一台服务器中端口冲突问题
- OpenCV的minEllipse函数(求轮廓的外接椭圆)一定要判断输入点是否大于5个
- HTTPS访问站点,出现证书问题解决