上篇介绍了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写入文件。
分享到:
相关推荐
”M3U”和”M3U8″文件都是苹果公司使用的HTTP Live Streaming格式的基础,这种格式可以在iPhone和Macbook等设备播放。简而言之,M3U8就是一个播放列表。所以问题来了,如果你想下载一个播放列表里的所有视频,然后...
HLS http live streaming 白皮书 draft-pantos-http-live-streaming
它最初由苹果公司开发,为HTTP Live Streaming(HLS)协议提供支持。M3U8文件采用UTF-8编码,包含了一系列URI链接,指向媒体文件或其他嵌套的M3U8文件。其结构简单清晰,常用于实现自适应码率、分片传输的视频播放。...
go-m3u8可以轻松生成和解析Apple发行的HTTP Live Streaming(HLS)Internet草案中定义的m3u8播放列表。 该库完全实现了HLS Internet Draft版本20。 提供从任何File,io.Reader或字符串将m3u8播放列表解析为对象...
它最初由苹果公司开发,为HTTP Live Streaming(HLS)协议提供支持。M3U8文件采用UTF-8编码,包含了一系列URI链接,指向媒体文件或其他嵌套的M3U8文件。其结构简单清晰,常用于实现自适应码率、分片传输的视频播放。...
m3u8-dl 一个CLI程序,用于下载m3u8播放列表中的视频,将其写入单个视频文件,然后使用ffmpeg将其转换为mp4。 在此处阅读有关m3u8的信息 依存关系 在激活virtualenv之后,使用pip install -r requirements.txt...
它最初由苹果公司开发,为HTTP Live Streaming(HLS)协议提供支持。M3U8文件采用UTF-8编码,包含了一系列URI链接,指向媒体文件或其他嵌套的M3U8文件。其结构简单清晰,常用于实现自适应码率、分片传输的视频播放。...
赠送jar包:flink-streaming-java_2.12-1.14.3.jar; 赠送原API文档:flink-streaming-java_2.12-1.14.3-javadoc.jar; 赠送源代码:flink-streaming-java_2.12-1.14.3-sources.jar; 赠送Maven依赖信息文件:flink-...
spark-streaming-kafka-0-8-assembly_2.11-2.4.0.jar
赠送jar包:flink-streaming-java_2.11-1.10.0.jar; 赠送原API文档:flink-streaming-java_2.11-1.10.0-javadoc.jar; 赠送源代码:flink-streaming-java_2.11-1.10.0-sources.jar; 赠送Maven依赖信息文件:flink-...
赠送jar包:flink-streaming-java_2.11-1.13.2.jar; 赠送原API文档:flink-streaming-java_2.11-1.13.2-javadoc.jar; 赠送源代码:flink-streaming-java_2.11-1.13.2-sources.jar; 赠送Maven依赖信息文件:flink-...
spark-streaming-kafka-0-8_2.11-2.4.0.jar
它最初由苹果公司开发,为HTTP Live Streaming(HLS)协议提供支持。M3U8文件采用UTF-8编码,包含了一系列URI链接,指向媒体文件或其他嵌套的M3U8文件。其结构简单清晰,常用于实现自适应码率、分片传输的视频播放。...
Streaming Data - Understanding the real-time pipeline
2012年3月HTTP Live Streaming (HLS) 视频直播技术的第8个版本的修订草案,常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西,目前比较方便又好用的我建议使用 ...
http live streaming protocol http live streaming protocol
spark streaming 链接kafka必用包,欢迎大家下载与使用
http live streaming guide
spark-streaming-kafka-0-10_2.11-2.4.0-cdh6.1.1.jar
spark-streaming-flume_2.11-2.1.0.jar