05
2017
10

媒体封装格式的时装show

花满楼原创,转载须授权。


小白:媒体就是声音、图像或文字之类的东东,这些东东也要穿衣服?

花满楼:一般穿了衣服才能被认出来,进而被扒掉衣服分析里面的数据的结构。

小白:说得很像叶孤城啊,他的逆向开发群专门做这样的事。

花满楼:只是打个比喻,衣服有衣服的结构,而衣服里面的又是另一个结构。也可以把封装理解为容器。

小白:那这个衣服是文件吗?

花满楼:可以是文件,也可以是网络上的数据包,所以说文件格式不准确,说封装格式更准确些。这次只介绍封装格式,下次再介绍编码格式。

小白:那就是讲衣服了,时装show!

本文简单介绍常见的多媒体封装格式。

小白:我看完这个时装秀后,有什么收获?

花满楼:可能没有收获!但如果要选择封装格式,可能有一点启示作用。

时装秀开始……

(1) mkv

时装秀1

mk,是matroska的缩写。matroska封装格式,是CoreCodec公司制定的格式,俗称“万能的容器”,基本上支持所有编码格式。

mkv,是视频容器,一般也包括音频与字幕,是matroska格式中应用最广泛的一种。

mka,只包括音频的matroska格式,可以包括多个音轨,比如国粤英三个音轨。

mks,只包括字幕流的matroska格式。

(2)mp4

时装秀2

mp4,是动态图像专家组(mpeg,从属于ISO)制定的封装格式。

mp4对编码格式有要求,只支持基于mpeg4的编码格式,比如视频的h264,音频的aac。对于其它编码格式,并非官方支持,比如ac3、mp3等。如果硬把非官方支持的编码格式塞到mp4容器,难以保证一定能被播放。

mp4对编码格式要求明确,是它能广泛应用的一个原因,特别在移动平台,比如ios系统上。

mp4如果只有音频,则文件有可能以m4a作为后缀,这是苹果公司起的名字,用来区分带有视频的一般的mp4。所以m4a文件也是mp4文件,从容器的角度。一般m4a里面的音频是aac压缩格式,但不排除塞了mp3、applelossless等格式的数据。

(3)ts

时装秀3

ts,transport stream的缩写,即传输流,从名字就知道它可以用于网络播放。

ts,全称是mpeg2-ts,早期广泛应用于数字电视,视频编码格式为mpeg2。

苹果公司制定的hls协议,使用ts作为数据的封装格式,同时也简化了ts的设计,让这种格式广泛应用于在线直播。简化后的ts,视频编码格式为h264,音频为aac或mp3。

每个ts包,能单独解码与播放。

(4)flv

时装秀4

flv,FlashVideo的缩写,是Macromedia公司(2005年被Adobe收购)制定的视频封装格式。

flv被广泛应用于网络视频播放。flash插件播放器的出现,使得在浏览器上可以轻松观看在线视频,免去安装本地播放器的麻烦。而flash播放器使用flv容器。

直播的兴起,也影响了flv的使用,比如rtmp流协议,使用的是flv封装格式。

(5)avi

时装秀5

avi,Audio Video Interleaved,即音视频交错格式,微软在1992年发布的封装格式,基于riff文件格式。

历史久远,但简单的开发接口与windows平台的影响,还有不少忠实粉丝。


小白:为什么有如此多的封装格式?

花满楼:一来不同的应用场景需要不同的封装格式,二来同样的场景,大公司都会制定自己的游戏标准并成为专利,不会屈服于别家的规则。

小白:原来如此,真是难为我们这么做开发的了!

花满楼:你也只是了解了解而已。


开心时间,起名字

我宝宝叫吴线网,英文名:wifi,大家都爱叫猫,你们敢说不火?

安陪给他女儿起了个俄罗斯名子,不日不舒服司机。

我儿子五十年不会有重名,他叫唐德龙冬强。

我的家族就是,建明,建军,建斌,建林,建华,建云,建峰,建国,
到了我就是建仁!

我的宝宝叫:梅川裤子,应该没重复的。

五十年后。 子涵大妈对紫函说:
芷涵约紫晗去梓菡家找子晗说紫菡家的子唅和紫晗家的子唅一起打了紫菡 ... 
心好累。

我姓朱,出生的时候天上有条龙,所以我叫朱有条。

我儿子出生时,一算命的说他将来比孙中山还更有能力,
于是我给他取名叫:孙串出!

我女儿名字周旖翾,全国就一个!

我的名字是爷爷翻了三遍新华字典才起的,我叫刘三遍。

多媒体开发,关联阅读

FFmpeg第一次约会

ffplay看直播,简洁是美

摄像头启动,开始监控

调试FFmpeg

组装FFmpeg,为我所用

从视频中抽几张图

流媒体服务器,给你好看

他们都在说的概念


想了解程序员团体?对音视频开发感兴趣?

请关注我们的公众号,并在输入框中发送数字5。

成就,只因一次随意的选择。

欢迎关注我们

上一篇:Android沉浸式状态栏(一) 下一篇:Android移动开发-使用多线程进行网络聊天室通信的实现