Nginx、HLS、M3U8、TS 搭建手记

  • Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。
Nginx 添加模块(nginx-rtmp-module)可以搭建hls流媒体服务器。

  • HLS

HTTP Live Streaming(HLS) , 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。
HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。
HLS是通过视频流切片成文件片段来直播的。客户端首先会请求一个m3u8文件,里面会有不同码率的流,或者直接是ts文件列表,通过给出的ts文件地址去依次播放。在直播的时候,客户端会不断请求m3u8文件,检查ts列表是否有新的ts切片。这种方式的实时性较差,不过优势是H5、IOS、Android都原生支持。

  • M3U8

m3u8 文件是HLS协议的部分内容,可以做多码率的适配,根据网络带宽,客户端选择适合自己码率的文件进行播放,保证视频流畅。
m3u8 文件使用文本方式对媒体文件进行描述,由一系列标签组成。
m3u8文件有两种应用场景:多码率适配/单码率适配流:

多码率适配流:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
http://example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000
http://example.com/hi.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"
http://example.com/audio-only.m3u8

单码率适配流,再分点播和直播:
点播:

#EXTM3U
#EXT-X-TARGETDURATION:5220
#EXTINF:5220,
http://media.example.com/entire.ts
#EXT-X-ENDLIST

直播(客户端会定时来请求新的M3U8文件):

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:12
#EXTINF:10.62,
1.ts
#EXTINF:10.06,
2.ts
#EXTINF:11.59,
3.ts

推荐《m3u8 文件格式详解》,写了一些注意事项,如通过EXT-X-PLAYLIST-TYPE区分点播源、直播源,某些标签不能同时设置等

  • TS

TS(transport stream) ,ts文件为传输流文件,是一种DVD的文件格式。
TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的,这种特性就决定了TS流文件主要用来实时传送的节目,比如实时广播的电视节目。
视频编码主要格式h264/mpeg4,音频为acc/MP3。
推荐《TS Stream 详解》,内容很详细,常用标签都介绍到了~

  • 通过nginx搭建hls流媒体服务器

由于nginx-rtmp-module支持HLS协议,所以可以通过安装带有nginx-rtmp-module模块的nginx,修改配置文件完成搭建流媒体服务器。
源码安装nginx并添加 nginx-rtmp-module,推荐《nginx 搭建 rtmp 服务器》,包括编译中的错误怎么解决,nginx的配置,很详细,感谢~
经过尝试,nginx本身(不添加nginx-rtmp-module模块)也可以提供读取m3u8文件的功能,
在server下添加:

server {
	#……
	location /media  {
		alias /mnt/m3u8/;
		add_header Cache-Control no-cache;
		}
}

把m3u8文件放到 /mnt/m3u8/下,启动nginx,可以直接访问m3u8文件。

你可能感兴趣的:(uWSGI,nginx)