`

http live streaming(m3u8 streaming)(mpeg2-ts)

    博客分类:
  • IOS
 
阅读更多

上篇介绍了m3u8文件,本篇介绍MPEG2-TS文件:

MPEG2-TS是一种封装格式,所有的video,audio以及辅助信息(PAT,PMT)都被封装成为188bytes的TS_packet.在TS中用PID来区分不同的stream.其中有一些特殊的PID,如PAT的pid固定是0x0000.

标准是:iso13818-1

优点是每个包都有固定大小,在网络传输中和文件切割时比较方便;

缺点是因为每个包都是188bytes,所以必然会有padding;从而浪费一定的空间,当sample比较小的时候浪费是比较严重的,此时能够通过将多个sample压缩进行打包的方式来实现。

在http live streaming中只需要实现部分标准。

PSI(program specific information)信息:

PAT(program_association_table):是由program_association_section构成。

每个PAS的结构如下图所示:


由上图可以看出PAS用来指定program_map_pid和network PID。对于m3u8 streaming 中network PID 并不需要实现。


PMT(program_map_table):用来指定每个节目中有几路es stream,其中每个stream的PID以及一些相关的描述信息。


PES_packet():用来打包es的格式。其中比较重要的信息有DTS、PTS信息。详细信息请查阅iso13818-1标准。

TS_packet(transport_packet):用来打包PES_packet和PSI信息。

在MPEG2-TS中PID是一个很重要的概念,PID是流的唯一标示符,相同的PID指定的是相同类型的内容。服务器和客户端端是通过PID来实现复用和解复用的。

客户端的解码过程:

1.找到TS_packet的开始位0x47。

3.找到PID为0x0000的PAT,将PAT进行解包,得到每路节目对应的PMT PID(在m3u8 streaming中只有一路节目)。

4.根据PAT解包得到的PMT PID得到PMT,同理将PMT进行解包得到ES pid和对应的类型。

5.根据PMT解包得到的ES PID,将该路流解包得到PES_packet,从而得到ES流和DTS,PTS。此时就能送到decoder去解码了。

服务器端的编码过程:

1.更具PMT PID来生成PAT,并打包成TS_packet来写入文件。

2.根据ES的PID和类型生成PMT,并打包成TS_packet来写入文件。

4.接收video/audio sample,并将一个或者多个sample打包成为PES_packet.

5.将打包好的PES_packet封装成TS_packet写入文件。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics