analysis of cntv streaming

0x0 总体流程

下图表示CBox播放的总体流程。
播放正式内容之前先播放广告。先访问Advertisement DNS得到视频广告文件保存的服务器,然后访问该服务器下载广告文件并播放。视频广告文件采用MP4格式保存。
节目内容采用HLS(HTTP Live Streaming)协议的方式进行播放,CBox先从HLS Server下载m3u8文件,得到需要下载的ts文件,然后再连接上HLS Server来下载ts文件并播放。

architecture

0x1 播放视频广告

播放视频广告的总体流程抓包如下。
playing_advertisement

0x11 通过HTTP获得广告文件的URL

CBox通过下面的GET方法获取。
GET /flash/vd/473fae2b16855f408335283ec9a3e29df44d4a9499406413ccc222e91bc93d85.mp4 HTTP/1.1
get_advertisement_url

0x12 服务器返回广告文件的URL

服务器对上一步GET方法进行响应,返回广告文件的URL。
Location: http://218.78.185.62/v.cctv.com/flash/vd/473fae2b16855f408335283ec9a3e29df44d4a9499406413ccc222e91bc93d85.mp4?wsrid_tag=5b4dfebd_PSshzjdxiu61_28643-17287&wsiphost=local\r\n

advertisement_url

0x13 获取广告文件

通过下面的GET方法获取广告文件。
GET /v.cctv.com/flash/vd/473fae2b16855f408335283ec9a3e29df44d4a9499406413ccc222e91bc93d85.mp4

get_advertisement

0x14 服务器发送广告文件给CBox

服务器通过http把视频广告文件发送给CBox。
playing_advertisement

0x2 播放节目

0x21 更新EPG

EPG是Electronic Program Guide的英文缩写,意思是电子节目指南,提供节目播放列表功能和节目单功能。
update_epg

0x22 和服务器之间进行安全认证

在播放之前对客户端进行安全认证。
tls

0x23 获取HLS的m3u8文件

m3u8 是一种基于HLS的文件视频格式,它主要存放整个视频的基本信息和分片(Segment)组成。Segment一般是ts格式的视频文件。
hls_download

0x24 从服务器中下载ts流并播放

解析上面下载得到的m3u8文件,得到需要下载的ts文件列表,然后访问服务器,通过http下载这些ts文件到本地并播放。
hls