【基于libRTMP的流媒体直播之 AAC、H264 解析】

   前文我们说到如何在基于 libRTMP 库的流媒体直播过程中推送 AAC 、H264 音视频流。本文以上文为基础,阐释如何对 RTMP 包进行解析、重组得到原始的 AAC 音频帧以及 H264 码流。

        在继续阅读本文之前,我们首先假设读者已经能够使用 libRTMP 库从 RTMP 直播服务器不断地获取 RTMP 包,如前提不成立,请自行阅读 [抛开flash,自己开发实现C++ RTMP直播流播放器] 一文,实现一个简单的 RtmpDownloader 测试用例。这一部分恕 Bill 不再赘述。

        废话颇多,下面让我们一起来看看如何对 RTMP 包进行解析和重组。

        根据前文所述,我们在推送音、视频包之前,会首先向服务器推送一个音、视频同步包,该包包含了 AAC 音频帧以及 H264 码流的解码信息。因此当我们首次向服务器请求 RTMP 包之后,服务器会下发给我们对应的音、视频同步包,这将决定我们如何解析并重组音、视频。

 

RTMP 音频包的解析及 AAC 重组                 

        当我们得到服务器下发的第一个音频包(音频同步包)之后,即可按照前文所述的封包顺序进行逆操作,解析得到我们所需要的 AAC 音频信息,根据这些信息,我们便可重组在推送时被我们去掉的那 7 个(或 9 个)字节:ADTS(Audio Data Transport Stream),请参见维基百科 [ADTS]。一旦 ADTS 构造完毕,直接在其后添加原始 AAC 音频数据即完成了整个 AAC 音频帧的重组。

        根据 ADTS 属性的描述,我们不难抽象出一个反映该信息的结构体如下:

 

        接着让我们回顾一下前文提到的音频同步包的结构:

        我们只需要从服务器获得的音频同步包中获取 AACDecoderSpecificInfo 以及 AudioSpecificConfig 这 4 个字节,并将其中的内容解析到 RtmpLiveAudioMetadataTy 这个结构中以备使用。示例代码如下:

 

        在获得了 AAC 音频所必要的信息之后,我们便可构造 ADTS 并重组 RTMP 服务器下发来的后续音频包。构造 ADTS 示例代码如下:

 

 

        至此,ADTS 7个字节便重构完毕,我们只需要在这 7 个字节后面添加上 AAC 的原始数据便可重组一个 AAC 音频帧。针对之后的每一个 RTMP 音频包,都进行上述步骤,不断将重组后的 AAC 音频帧写入文件,使用支持的播放器播放以验证解析正确与否。

 

 

RTMP 视频包的解析及 H.264 重组               

        与重组音频帧类似的,我们首先会从服务器获得视频同步包,首先对视频同步包进行拆包解析,得到本次 H264 码流的 Sps 以及 Pps,并从 Sps 中获取视频的宽高信息以备使用。根据前文提到的视频同步包封包流程,我们进行逆向解析的示例如下:

 

        其中从 Sps 获取视频的宽高信息请读者自行 Google,Bill 不再赘述。解析完视频同步包,我们只需要对接下来的视频包进行分类即可,针对 H264 P 帧,我们直接将原始数据写入文件,针对 I 帧,我们在其前面添加保存好的 Sps 以及 Pps,然后写入原始数据即可。针对之后从 RTMP 服务器接收的每一个视频包,均进行上述重组操作,并将获得的 H264 编码写入文件,使用 Elecard StreamEye Tools 播放即可。

 

 

参考博文

[1][抛开flash,自己开发实现C++ RTMP直播流播放器]

[2][使用 libRtmp 进行 H264 与 AAC 直播]

[3][RTMP直播到FMS中的AAC音频直播]

时间: 2024-10-18 14:20:33

【基于libRTMP的流媒体直播之 AAC、H264 解析】的相关文章

【基于libRTMP的流媒体直播之 AAC、H264 推送】

这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以及网上没说清楚的地方分享给各位.         RTMP 协议栈的实现,Bill 直接使用的 libRTMP,关于 libRTMP 的编译.基本使用方法,以及简单的流媒体直播框架,请参见博文[C++实现RTMP协议发送H.264编码及AAC编码的音视频],言简意赅,故不再赘述.         言

基于libRTMP的流媒体直播之 AAC、H264 推送

 这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以及网上没说清楚的地方分享给各位.         RTMP 协议栈的实现,Bill 直接使用的 libRTMP,关于 libRTMP 的编译.基本使用方法,以及简单的流媒体直播框架,请参见博文[C++实现RTMP协议发送H.264编码及AAC编码的音视频],言简意赅,故不再赘述.         

使用nginx搭建流媒体直播平台(该方式不适用与多人聊天)

一 概要说明 使用nginx搭建流媒体直播平台,目的就是要支持rtmp协议,实现用户使用rtmp(rtmp://192.168.201.128/myapp)协议推送流到服务器.然后其他用户点播该用户推送的视频流信息.既然是rtmp协议,所以客户端可以是flash程序,也可以OBS(Open Broadcaster Software)这种比较大众化的直播客户端.个人是比较喜欢使用OBS的,老实说我其实也是flash和flex开发者,开发个多款WEB视频程序和视频会议系统.java水平也是很高的.欢

流媒体直播游戏平台获得了媒体与投资者更多的关注

摘要: 编者按:本文来自@杨剑的投稿,前阿里巴巴集团专家,前媒体人,做技术出身的文字爱好者,关注科技互联网一切可以侃的产品和业务,交流者可联系99629463@qq.com 我之所以发这篇投稿 编者按:本文来自@杨剑的投稿,前阿里巴巴集团专家,前媒体人,做技术出身的文字爱好者,关注科技互联网一切可以侃的产品和业务,交流者可联系99629463@qq.com 我之所以发这篇投稿,一是因为类似问题在很多行业都可能出现,尤其版权纷争最近很多领域都出现了:二还是因为Twitch被收购后游戏主播身价火箭式

英特尔携手AT&T和爱立信进行DIRECTV NOW流媒体直播服务的5G试验

英特尔联手AT&T和爱立信进行第二次5G试验,利用毫米波技术为美国奥斯汀更多地区带来超高速5G网络体验.AT&T今天宣布,参与此次试验的住宅区.小型和大型企业用户能够在固定5G无线网络上观看AT&T提供的优质的DIRECTV NOW流媒体直播,并享受更快速的宽带服务. 本次试验采用了英特尔 5G移动试验平台(用于快速集成和测试5G设备与无线接入点)和爱立信的5G无线接入网络. 英特尔高级副总裁兼网络平台事业部总经理Sandra Rivera表示:"作为我们与AT&

YouTube将开始支持4K流媒体直播

据外媒报道, 全球最大的视频分享网站YouTube将从当地时间12月1日开始推出4K流媒体直播功能. YouTube将从太平洋标准时间(PST)12月1日下午3点开始对有游戏界奥斯卡之称的The Game Awards颁奖典礼进行4K直播. YouTube表示这项功能将主要适用于演唱会或其他活动,为观众带来身临其境的4K视频直播体验. YouTube表示:"对于创作者来说,这意味着他们将可以利用令人难以置信的清晰画面的优势来记录.他们将能利用硬件(以及他们的才华)来创作出最美丽的图像或视频.作好

EMIPLIB 1.1.0发布 一个基于IP的流媒体库

EMIPLIB是一个库,以方便需要基于IP的流媒体的几种方案的发展.库包含了几种可以在各种方式联系在一起的组件,从而提供一个灵活的框架.它还提供了一些现成的使用基于IP的音频和视频传输的类.流来自相同的参与者可以同步. 基本上这个库的目的就是要完成一个多媒体的网络传输库,方便多种媒体在网络上进行传输.从上面可以看到,它提供了从底层的数据采集.编码解码.传输等功能.当然,它不是独立的,比如,我是在window下做一个开发,对于音频它使用了winmm.lib库,对于视频使用了Dshow以及QT fo

基于OpenFlow的流媒体云服务迁移方法

基于OpenFlow的流媒体云服务迁移方法 战立松 奚宏生 王子磊 传统基于应用层中间件或代理的服务迁移技术容易造成单点故障且扩展性差,并且流媒体的交互性和长会话特性使其难以实现对用户透明.为此,提出一种基于OpenFlow的流媒体云服务迁移方法.通过在网络层进行流媒体云迁移实现对用户的服务透明,同时针对网络层的服务迁移代价问题,提出一种基于用户请求预测的迁移策略,在提升系统容量的同时优化服务迁移数.实验结果表明,该迁移策略可有效地提高服务请求接受率,进而增强系统服务能力. 基于OpenFlow

独家干货|基于大数据的人体组织微结构的解析与构建

◆ ◆ ◆ 导读  清华大数据思享会医疗大数据系列之"基于大数据的人体组织微结构的解析与构建"于2016年09月22日下午在清数D-LAB成功举办. 深圳艾科赛龙公司创始人赵小文深刻阐述了医学大数据的技术架构,以及对骨骼.血管等人体组织微结构的量化简析和构建的方法,并将这种方法延展到蛋白结构的量化解析和构建上,为再生医学的发展奠定了个性化的组织工程学基础.以下为演讲全文: (感谢主办方提供演讲速记及照片,速记整理|刘道全) ◆ ◆ ◆ 一.技术趋势 医学大数据的架构具有很强的扩展性,在