`

h264 封装 RTMP中FLV数据的解析 rtmp协议简单解析以及用其发送h264的flv文件

 
阅读更多

一个完整的多媒体文件是由音频和视频2部分组成的。H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式。字幕文件只是其中附带部分。

把视频编码和音频编码打包成一个完整的多媒体文件,可以有不同的方式,这种方式便是所谓的封装方式, 不同的封装方式有不同的后缀。由于有些封装方式具有很强的灵活性,它可以把各种不同的音视频文件打包成一个文件,因此会出现这么一种情况,虽然文件的后缀 是相同的,但有些可以正常播放,而有些不能播放,毕竟任何一种播放软件都不是万能的。部分先进的封装方式还可以同时封装多个音频编码文件,甚至同时封装进 字幕文件,如MKV封装方式。MKV文件可以做到一个文件包括多种语种发音,多语字幕以适合不同的人观看。

----------------------------------------------------------------------------------------------

目前有最常见的编码方式:

mpeg1:vcd使用的就是这种编码格式,分辨率是352*288,压缩比低

mpeg2:一般DVD使用,有NTSC(720*480)和PAL (720*576),和mpeg1一样属于即将被淘汰的编码格式。

mpeg4 :目前使用最多的技术,avi文件始祖,大大提高压缩比,而质量堪比DVD

divx:基于mpeg4开发的,有一定算法优化

xvid:divx技术封锁之后被人破解开发的,也是基于mpeg4的编码技术, 更先进,采用开放源码,画质更好

h.261:早期的低码率编码,应用于352x288和176x144,现在已不用

h.263:在低码率下能够提供比H.261更好的图像效果,改进一些算法

h.263+:h.263的改进型

h.264 :H.264集中了以往标准的优点,高效压缩,

RV.10 RV.13 RV.20 RV.30 RV40: real 公司推出的应用于网络的高压缩编码,是不同时期rm和rmvb的编码

-----------------------------------------------------------------------------------------

封装格式(也叫容器):所谓封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个 放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,或者一个锅,用来盛放饭菜的容器。

AVI:微软在90年代初创立的封装标准,是当时为对抗quicktime格式(mov)而推出的,只能支持固定CBR恒定

定比特率编码的声音文件。

ts和ps:PS封装只能在HDDVD原版,

mov: MOV是Quicktime封装

WMV:微软推出的,作为市场竞争

mkv:万能封装器,有良好的兼容和跨平台性、纠错性,可带外挂字幕。

flv: 这种封装方式可以很好的保护原始地址,不容易被下载到,目前一些视频分享网站都采用这种封装方式

rmvb/rm:Real Video,由RealNetworks开发的应用于rmvb和rm的不同封装方式。rm是固定码率,rmvb是动态

码率(就是静态画面采用用低码率,动态采用高码率)

MP4:主要应用于mpeg4的封装,主要在手机上使用。

3GP:目前主要应用于H.263的封装,主要在3G手机上使用

----------------------------------------------------------------------------------------------

理论上可以把任意一个视频文件和一个音频文件打包成一个完整的多媒体文件,但不同的封装方式有其不同的计算方式,它所要求的是在高压缩率的同时又要兼顾高 的清晰度效果。所以无论哪种封装方式都不会把任意的一个视频文件和一个音频文件打包在一起。例如MKV封装容器,基本无论什么样的组合都可以!但一般 MKV用的最多的就是H264+AAC组合,此组合文件体积最小,清晰度最高。因此网上很多MKV视频都是高清晰度的。

下面是一些常见的组合方式:

封装容器 视频流编码格式 音频流编码格式

AVI Xvid MP3

AVI Divx MP3

Matroska(后缀就是MKV) Xvid MP3

Matroska(后缀就是MKV) Xvid AAC

Matroska(后缀就是MKV) H264 AAC

MP4 Xvid MP3

MP4 H264 AAC

3GP H.263 AAC

--------------------------------------------------------------------------------------------

 

各种编码对应的最佳码率

 编码规范和封装格式多种多样,是因为它们对应的最佳码率不同。640x272低分辨率的主要是Real Video,最佳码率在350-600Kbps,封装文件格式为RM或者RMVB,我们经常在网上下载的300M左右的电影基本都是RealVideo规 范的RMVB文件;分辨率提升为1024x438时,一般就开始使用Xvid编码了,码率也在800-1300Kbps不等,封装文件经常是AVI,文件 体积在700MB左右;而720P影片,我们经常下载的X264/AVC编码MKV封装文件,码率5-6MB,音频部分可以达到5.1音效,影音效果很不 错,但文件体积都在4.3GB上下,一张DVD碟的容量,网上下载往往需要数天;1080P影片经常采用的有H.264编码和VC1编码,码率 30Mbps上下,体积达到22-40GB,虽然效果震撼,但是不方便网络共享。对于容量8GB左右的MP4,综合视频来源以及体积,最适合的是Xvid 编码、码率在1300Kbps左右、文件体积700MB-1.4GB的AVI,以及同样码率和体积的RV40编码RMVB,还有码率 350-600Kbps的RMVB。

 

比较常用的有以下封装格式

1 AVI

AVI容器-成熟的老技术

AVI是微软1992年推出用于对抗苹果Quicktime的技术,尽管国际学术界公认AVI已经属于被淘汰的技术,但是由于windows的通用性,和简单易懂的开发API,还在被广泛使用。

AVI的文件结构、分为头部, 主体和索引三部分. 主体中图像数据和声音数据是交互存放的。从尾部的索引可以索引跳到自己想放的位置。

AVI本身只是提供了这么一个框架,内部的图像数据和声音顺据格式可以是任意的编码形式。因为索引放在了文件尾部,所以在播internet流媒体时已属 力不从心。很简单的例子,从网络上下载的片子,如果没有下载完成,是很难正常播放出来。另外一个问题是AVI对高码率VBR音频文件支持不好。

VBR全称是Variable BitRate,就是动态比特率,可以根据当前的需要定义不同的比特率,避免了浪费,并且提高了利用率。随之问题也就来了,因为容器里的图像和声音是分开 的,所以播放时需要一个图像和声音的同步过程,如果CBR音轨的话因为码率是定值,同步不成为问题,可是VBR音轨是不断的在变换,而AVI没有时间戳去 让VBR音轨和图像同步,这样就会产生图像声音不同步的问题。后来VirtualDub提出了一种新的方法扩充了AVI对VBR音频的兼容,但是在高码率 时会产生丢失数据的问题,从而导致有损音效,这一点问题到现在都没有比较完美的解决方法。并且更加令人遗憾的是,对TrueHD, DTS-HD等音效更是完全不能支持。

2 ts和ps封装

因为HDDVD以及BD之争,尽管两家在编码上都统一采用MPEG2/VC-1/H.264,可在封装格式上又有所分岐。DVD论坛官方 所认可的HDDVD使用的是PS封装,即Program Stream(程序流),这和之前DVD所采用的MPEG2 Program Stream封装是一样的,PS流的后缀名是VOB以及EVO等。而BD在没有DVD论坛官方认证的情况下,自然不是PS封装,而是使用了MPEG2的另 一封装TS封装,即Transport Stream(传输流),TS流的后缀名为TS。它们都是MPEG2系统部分的两个不同的语法结构,而在现在仅仅在作为封装使用。TS流对于PS流来说更 易传输,不过由于其性质,也更易出错,所以在以前一般存储方面都是使用PS流,当然现在随着容错/纠错技术的提高,TS的适用范围越来越广。

现在网上大多流传以TS封装的HDTV remux版,PS封装只能在HDDVD原版才看到,所以我们来着重分析一下TS封装格式。

电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码 的。从结构上来说,TS是由头文件和主体所组成的,扩充过的TS流还包括时间戳。这样不管是什么格式的VBR音轨,都很容易通过时间戳来同步图像。当然, 对新的声音格式来说,需要新的分离器,解码器来实现解码。目前在不断改进开发中。

TS不像AVI,从诞生那天起,就考虑到了网络播放,所以很快成为了世界标准并广泛应用于电视台数字播放,手机等各个领域。

REMUX版本

Remux的意思是无损的提取出HD-DVD 和 BluRay-DVD里面的视频数据和音频数据,封装到我们熟悉的TS或者AVI文件中

3 MOV封装

 

不少HDRIP使用的封装格式一般是AVI,MKV和MOV。MOV是Quicktime封装,这一封装和AVI几乎是同一时代的,缺陷也不少,现在很少有人使用。

HDRIP:重新编码,即有损压缩过之后的视频。

4 MKV封装

MKV是Matroska的简称,它是一种新的多媒体封装格式,比较常见的搭配是X264+MKV。MKV封装十分新颖,而且也非常开放,它对比AVI的优势体现在以下几点:

1:可变帧率:这需要编码的配合,试想一下在回放变化比较慢(比如说静物)时以比较低的FPS来代替,可以节省不少资源。

2:错误检测以及修复:这无疑提供了纠错和容错性,在网络传输的今天尤为需要。

3:软字幕:经常看DVDrip以及HDrip的朋友了解到,字幕一般都是以其它文件形式存在,在MKV里它可以内嵌在封装里,但不会和视频混淆,也可以多字幕随意选择。这样在传输保存时比较方便。

4:流式传输:这和TS流的原因基本一致,通过时间戳来管理视频以及音频的同步问题,做到即下即看。

5:菜单:交互式的操作使得MKV更加人性化。

6:强大的兼容性:MKV最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流,即使是非常封闭的RealMedia及QuickTime也被它包括进去了,堪称万能的媒体容器。

7:开放性和跨平台性:Matroska使用的是一种开放的架构,拥有众多的先进特性,并且能跨平台使用。

不过Matroska相对于以上我们介绍的缺点也是显而易见的,它没有深厚的背景可以依托,这决定了它不可能在商业领域里有所作为。不过从 DVDrip里我们看到并非标准才是唯一,真正先进的技术在标准化商业化的道路上碰到很多非技术壁垒,而在网上而言,根本不存在这样那样的顾虑,所以 MKV可以网上快速流行起来。

不过MKV的缺点也是显而易见的,分离器方面比较好的仅有HAALI分离器,再加上民间标准的缘故,我们很难在PC以外的地方见到它的存在。

http://www.cnblogs.com/xkfz007/articles/2612932.html

 

http://www.cnblogs.com/zjoch/archive/2013/08/28/3286295.html

分享到:
评论

相关推荐

    rtmp flv aac h264

    本文将详细解析“rtmp flv aac h264”相关的知识点,并基于提供的压缩包子文件“rtmp_send”来阐述如何将FLV文件推送到RTMP服务器,如斗鱼直播平台。 首先,让我们了解这些关键词的含义: 1. **RTMP (Real-Time ...

    h264文件通过rtmp发布

    我们还将讨论涉及的关键技术,包括h264编码、FLV封装和RTMP协议。 首先,h264是一种高效的视频编码标准,全称为Advanced Video Coding,属于MPEG-4 Part 10。它在视频压缩领域广泛应用,因其能提供高质量的视频同时...

    rtmp2flv rtmp直播转httpflv

    2. **音视频分离与处理**:在解码后,需要将音频和视频数据分开,可能还会进行一些编码格式转换,如H.264视频编码和AAC音频编码。 3. **FLV封装**:将解码后的音视频帧封装成FLV格式的文件,FLV文件头包含时间戳、...

    C++实验RTMP协议发送 H.264编码

    在C++中实现RTMP协议发送H.264编码的音视频,涉及到多个关键步骤和技术,主要包括音视频采集、编码、封装以及RTMP协议的实现。以下是对这些知识点的详细解释: 1. **音视频采集**:通常使用DirectShow框架来捕获...

    librtmp 拉取rtmp流保存为flv或者h264

    本文将详细讲解如何使用librtmp库从RTMP流中拉取数据,并将其保存为FLV或H264编码的文件。 首先,我们需要了解librtmp库的基本功能。librtmp库是由Adobe Systems开发的,它提供了C语言接口,可以方便地建立和管理...

    ffmpeg的h264推流rtmp

    3. **推流流程**:推流过程通常涉及捕获视频源,将其编码为H264,然后通过RTMP协议发送到服务器。编码器(如libx264)会将原始视频帧转换为H264 NAL单元,这些单元随后会被封装到FLV容器中,再由FFmpeg的RTMP模块...

    IOS 下 H264封装FLV 源代码

    将H264编码的数据封装到FLV容器中,可以让这些视频在支持Flash的设备或平台,如网页浏览器,上播放。本文将深入探讨在iOS环境下,如何实现H264到FLV的封装过程,并基于提供的"IOS.H264ToFlv"源代码进行解析。 首先...

    内存H264+PCM发布rtmp.rar

    内存中的H264数据与PCM音频数据封装成FLV格式并发布到RTMP服务器是一项在多媒体处理领域常见的任务,特别是在实时流媒体传输中。这个压缩包文件"内存H264+PCM发布rtmp.rar"包含了一些源代码文件,如`rtmpstream.cpp`...

    支持对H265的rtmp推流,复用,解码,播放的FFMPEG

    在本文中,我们将深入探讨FFmpeg如何支持H265(High Efficiency Video Coding,高效视频编码)在RTMP(Real-Time Messaging Protocol,实时消息传输协议)推流、复用以及播放中的应用。 首先,H265是一种先进的视频...

    将rtmp流保存成MP4或者flv格式视频(参考资料包括:librtmp实现flv,ffmpeg实现MP4和mp4v2实现MP4)

    使用ffmpeg,我们可以从RTMP流中捕获数据并直接将其保存为MP4、TS、MKV或FLV等多种格式的视频文件。例如,命令行`ffmpeg -i rtmp://server/app/stream -c copy output.mp4`即可将RTMP流转存为MP4文件。ffmpeg的强大...

    H264 to FLVandRTMP

    在IT行业中,视频编码和流媒体传输是两个关键领域,H264、FLV以及RTMP都是其中的重要概念。本文将深入探讨这三个技术及其相互关系。 首先,H264,也称为AVC(Advanced Video Coding),是一种高效且广泛使用的视频...

    rtmpdump实现flv视频推流demo程序

    3. **实时推流**:RTMPDump能够实现实时地将数据推送到服务器,这意味着你需要持续地从视频源读取数据并将其发送到RTMP服务器。这个过程需要考虑到网络延迟和丢包,确保数据的连续性和完整性。 4. **错误处理和重试...

    RTMP 封装H264 AAC1

    本文将深入探讨RTMP如何封装H264视频和AAC音频数据,以及这种封装方式与FLV(Flash Video)格式的兼容性。 1. **RTMP与FLV的封装兼容性** RTMP和FLV之间的兼容性在于它们在封装音视频数据时采用了相似的结构。在...

    rtmp对g711a、g711u音频编码封装格式的抓包,视频为h264

    由于RTMP协议和G.711、H.264的广泛支持,大多数现代播放器,如Adobe Flash Player,都能够处理这种封装格式的数据。描述中提到的“在Adobe官方播放器可以正常播放,无杂音”,意味着已经成功地实现了音频和视频的...

    ffmpeg4.3.1源码 增加 flv 对H265/HEVC的支持

    2. **解析H265 NAL单元**:FLV中,H265的NAL单元(Network Abstraction Layer Unit)需要经过适当的包装,以适应FLV的帧结构。开发者可能在`Flvdec.c`中添加了处理NAL单元的逻辑,包括识别和拆分NAL单元,以及根据...

    java实现rtsp/rtmp转m3u8/flv/hls/mp4等实现web直播和回放测

    Java 实现 RTSP/RTMP 转 M3U8/FLV/HLS/MP4 等技术在Web直播和回放中的应用是现代互联网流媒体服务的关键组成部分。RTSP(Real-Time Streaming Protocol)和RTMP(Real-Time Messaging Protocol)主要用于实时视频...

    RTMP_H265推流直播技术研讨

    #### Rtmp数据封装:视频(H264&H265) 在RTMP协议中,视频数据被封装成特定格式的数据包进行传输。对于H264和H265这两种不同的视频编码格式,它们的数据封装方式有所区别。理解这些差异有助于更好地实现视频流的...

    rtmp封装类

    RTMP协议通常与FLV或F4V文件格式配合使用,这两种格式分别用于存储流媒体的音频和视频数据。 2. RTMP推流过程: 推流是将音视频数据推送到服务器的过程,一般包括以下步骤: - 建立连接:客户端通过TCP连接到...

    H264 FAAC音视频采集编码,并经由Rtmp发布测试代码

    H264 FAAC音视频采集编码,并经由Rtmp发布测试代码 1. 采用DirectShow实现摄像头视频数据和音频数据的采集 2. 采用x264/faac实现音视频的编码 3. 采用librtmp实现编码后音视频数据到Rtmp流媒体服务器的发布 4. 实际...

    rtmp-flv-demo.zip

    在本文中,我们将深入探讨如何使用树莓派作为推流设备,搭建一个直播服务器,并结合`rtmp-flv-demo.zip`中的`flv.js`文件,实现流畅的视频直播体验。这个过程涉及到的关键技术包括推流、直播服务器、FFmpeg以及RTMP...

Global site tag (gtag.js) - Google Analytics