首页 > 技术文章 > 流媒体HLS和TS

embedded-linux 2017-04-30 18:56 原文

一、HLS

HLS协议HTTP Live Streaming用于播放.ts视频,它是苹果公司实现的基于HTTP的流媒体传输协议,可以实现流媒体的直播和点播。关键组成有m3u8和多个视频分片.ts,其中m3u8指定视频分片的地址。

官网:http://developer.apple.com/resources/http-streaming/

M3U8文件(hls的index文件)

M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。

#EXTM3U
#EXT-X-TARGETDURATION:5
#EXTINF:5,
./0.ts
#EXTINF:5,
./1.ts

#EXTM3U:每个M3U8文件第一行必须是这个tag。

#EXT-X-TARGETDURATION:指定最大的媒体段时间长度(秒),#EXTINF中指定的时间长度必须小于或等于这个最大值。该值只能出现一次。

#EXTINF:描述单个媒体文件的长度。后面为媒体文件,如./0.ts

二、TS流

ts流最早应用于数字电视领域,其格式非常复杂包含的配置信息表多达十几个,视频格式主要是mpeg2。苹果公司发明的http live stream流媒体是基于ts文件的,不过他大大简化了传统的ts流,只需要2个最基本的配置表PAT和PMT,再加上音视频内容就可以了,hls流媒体视频编码的主要格式为h264/mpeg4,音频为aac/mp3。

ts文件分为三层:ts层(Transport Stream)、pes层(Packet Elemental Stream)、es层(Elementary Stream)。es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层是在pes层上加入了数据流识别和传输的必要信息。

  • ts stream structrue:

ts包大小固定为188字节,ts层分为三个部分:ts header、adaptation field、payload。ts header固定4个字节;adaptation field可能存在也可能不存在,主要作用是给不足188字节的数据做填充;payload是pes数据。

三、实践

通过ffmpeg将本地的xxx.mp4进行切片处理,生成m3u8播放列表(索引文件)和N多个 .ts文件,并将其(m3u8、N个ts)放置在本地搭建好的webServer服务器的指定目录下,我就可以得到一个可实时播放的URL(类似于:http://localhost/xxx/xxx.m3u8),最终将该URL运用于之前简易封装的AVPlayer和VLC播放器中测试播放。参考:HLS-m3u8播放列表和ts切片(2)

ffmpeg -i XXX.mp4 -c:v libx264 -c:a copy -f hls XXX.m3u8

其中,XXX.mp4为本地视频文件,XXX.m3u8为最终生成的播放索引列表,与此同时还有N多个ts文件。

 

参考:

1. ts && hls 知乎

2. MPEG-TS 格式解析

3. 浅析mpeg-ts封装结构

4. hls之m3u8、ts流格式详解

5. HLS-m3u8播放列表和ts切片(2)

6. TS流格式(转) 王纲

推荐阅读