本文用个实际例子,简单说明HLS视频直播过程中,客户端与服务器之间的交互流程。
假设在web服务器里, 有个m3u8文件,文件名为playlist.m3u8,文件内容如下:
那么, 客户端请求直播流程如下:
1. 首先是客户端发出一个GET请求, GET /apple_media_dir/2/playlist.m3u8 HTTP/1.1。
2. 服务器响应 GET playlist.m3u8的请求, 将playlist.m3u8文件以application/octet-stream类型发送出去。
3. 客户端 GET segmenter-1400.ts。
4. 服务器响应 GET segmenter-1400.ts的请求, 发送segmenter-1400.ts文件。
5. 客户端 GET segmenter-1401.ts。
6. 服务器响应 GET segmenter-1401.ts的请求, 发送segmenter-1401.ts文件。
当服务器接收完segmenter-1401.ts后, 又重新请求playlist.m3u8,而已此时的playlist.m3u8是已经被更新过的,可能内容如下:
假设在web服务器里, 有个m3u8文件,文件名为playlist.m3u8,文件内容如下:
#EXTM3U
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:1400
#EXTINF:4,
segmenter-1400.ts
#EXTINF:4,
segmenter-1401.ts
那么, 客户端请求直播流程如下:
1. 首先是客户端发出一个GET请求, GET /apple_media_dir/2/playlist.m3u8 HTTP/1.1。
2. 服务器响应 GET playlist.m3u8的请求, 将playlist.m3u8文件以application/octet-stream类型发送出去。
3. 客户端 GET segmenter-1400.ts。
4. 服务器响应 GET segmenter-1400.ts的请求, 发送segmenter-1400.ts文件。
5. 客户端 GET segmenter-1401.ts。
6. 服务器响应 GET segmenter-1401.ts的请求, 发送segmenter-1401.ts文件。
当服务器接收完segmenter-1401.ts后, 又重新请求playlist.m3u8,而已此时的playlist.m3u8是已经被更新过的,可能内容如下:
#EXTM3U
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:1402
#EXTINF:4,
segmenter-1402.ts
#EXTINF:4,
segmenter-1403.ts