SRS配置HLS分发

一、HLS简介

HLS(HTTP Live Streaming) 是Appale公司在2009年发布的,可以通过普通的web服务器进行分发的新型流媒体协议。

HLS协议文件:http://tools.ietf.org/html/draft-pantos-http-live-streaming-07

HLS提供一个m3u8列表,播放地址像这样:http://IP[port]/[app]/live.m3u8,其实m3u8是一个ts的list,但是在这个list中要需要定义一些关键的参数,这些参数都有重要的意义。

一般HLS中ts切片的视频编码使用H264,音频编码使用AAC。

二、HLS m3u8介绍

下面是一个m3u8列表中的内容

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-MEDIA-SEQUENCE:64

#EXT-X-TARGETDURATION:12

#EXTINF:11.550

livestream-64.ts

#EXTINF:5.250

livestream-65.ts

#EXTINF:7.700

livestream-66.ts

#EXTINF:6.850

livestream-67.ts

有几个关键的参数,这些参数在SRS的配置文件中都有配置项:

    • EXT-X-TARGETDURATION:所有切片的最大时长。有些Apple设备这个参数不正确会无法播放。SRS会自动计算出ts文件的最大时长,然后更新m3u8时会自动更新这个值。用户不必自己配置。
    • EXTINF:ts切片的实际时长,SRS提供配置项hls_fragment,但实际上的ts时长还受gop影响,详见下面配置HLS的说明。
    • ts文件的数目:SRS可配置hls_window,指定m3u8中保存多少个切片,SRS会自动清理旧的切片。
    • livestream-67.ts:SRS会自动维护ts切片的文件名,在编码器重推之后,这个编号会继续增长,保证流的连续性。直到SRS重启,这个编号才重置为0。

譬如,每个ts切片为10秒,窗口为60秒,那么m3u8中会保存6个ts切片。

三、SRS的HLS工作流

RTMP编码器推流到SRS,视音频编码为,视频:H.264 音频:AAC,其他编码的,可以通过SRS进行直播转码后,输出到SRS的其他Vhost中,然后生成HLS

如果不是H264/AAC,则停止输出HLS。

四、SRS配置生成HLS

其他配置查看conf目录下的full.conf

vhost with-hls.srs.com {

hls {

#是否开启HLS,on:开启 off:关闭,默认是off 

enabled         on;

#单位秒,指定ts切片的最小长度。默认为10

        #ts文件长度 = max(hls_fragment, gop_size)

        #如果ffmpeg中指定fps(帧速率)为20帧/秒,gop为200帧,那么gop_size=gop/fps=10秒

        #那么实际ts的长度为max(5,10) =10秒。这样实际ts切片的长度就与设定的不同了。

hls_fragment    5;

 #倍数,控制m3u8的EXT-X-TARGETDURATION值,EXT-X-TARGETDURATION(整数)值标明了切片的最大时长。

        #m3u8列表文件中EXTINF的值必须小于等于EXT-X-TARGETDURATION的值。

        #EXT-X-TARGETDURATION在m3u8列表文件中必须出现一次。

hls_td_ratio    1.5;

#倍数。纯音频时,当ts时长超过配置的ls_fragment乘以这个系数时就切割文件。例如,当ls_fragment是10秒,hls_aof_ratio是2.0时,对于纯音频,10s*2.0=20秒时就切割ts文件。

hls_aof_ratio   2.0;

#单位:秒,指定HLS窗口大小,即m3u8中ts文件的时长之和,超过总时长后,丢弃第一个m3u8中的第一个切片,直到ts的总时长在这个配置项范围之内。即SRS保证:hls_window的值必须大于等于m3u8列表文件中所有ts切片时长的总和。

hls_window      60;

        #hls错误策略

        #    ignore:当错误发生时,忽略错误并停止输出hls(默认)

        #    disconnect:当发生错误时,断开推流连接

        #    continue:当发生错误时,忽略错误并继续输出hls

hls_on_error    ignore;

        #hls存储方式

        #    disk:把m3u8/ts写到磁盘(默认)

        #    ram:发送m3u8/ts到内存,但是必须使用srs自带的http server进行分发。

        #    both, disk and ram。

hls_storage     disk;

#当hls写到磁盘时,指定写入的目录。 

hls_path        ./objs/nginx/html;

 #生成hls的m3u8文件的文件名,有一些变量可用于生成m3u8文件的文件名:

        #    [vhost],原始流来的vhost,比如rtmp://v.flyfn.com:1935/live/livestream,对应到srs中,vhost应是v.flyfn.com

        #    [app], 源rtmp流中的app,对应上面的播放地址中,为live

        #    [stream],源rtmp流中的流名称,对应上面播放地址中,为livestream

        #m3u8文件的绝对路径为[SRS_Path]/objs/nginx/html/[app]/[stream].m3u8

hls_m3u8_file   [app]/[stream].m3u8;

        #生成的ts文件的名称,有许多的变量可用于生成ts文件的文件名:

        # [vhost], the vhost of stream.

        # [app], the app of stream.

        # [stream], the stream name of stream.

        # [2006], replace this const to current year.

        # [01], replace this const to current month.

        # [02], replace this const to current date.

        # [15], replace this const to current hour.

        # [04], repleace this const to current minute.

        # [05], repleace this const to current second.

        # [999], repleace this const to current millisecond.

        # [timestamp],replace this const to current UNIX timestamp in ms.

        # [seq], the sequence number of ts,顺序号,0,1,2...n

        #生成的ts文件的绝对路径:[SRS_Path]/objs/nginx/html/[app]/[stream]-[seq].ts

        #例如:[app]/[stream]/[2006][01]/[02]/[timestamp].ts生成的ts文件的绝对路径是:

        #[SRS_Path]/objs/nginx/html/[app]/[stream]/201505/15/1431619258.ts

hls_ts_file     [app]/[stream]-[seq].ts;

#是否使用floor的方式生成hls ts文件的路径。如实hls_ts_floor on; 使用timestamp/hls_fragment作为[timestamp]变量,即[timestamp]=timestamp/hls_fragment,并且使用enahanced算法生成下一个切片的差值。

hls_ts_floor    off;

        #hls_entry_prefix: TS的base url。可选默认为空字符串;非空时加在ts前面作为base url。

        #对于ts切片:live/livestream-0.ts

        #若配置为:hls_entry_prefix http://your-server;

        #则最后的TS的URL是:http://your-server/live/livestream-0.ts

hls_entry_prefix http://your-server;

hls_mount       [vhost]/[app]/[stream].m3u8;

hls_acodec      aac;

hls_vcodec      h264;

hls_cleanup     on;

hls_nb_notify   64;

hls_wait_keyframe       on;

}

}

详细信息参考:https://github.com/simple-rtmp-server/srs/wiki/v2_CN_DeliveryHLS

时间: 2024-12-12 16:09:07

SRS配置HLS分发的相关文章

SRS之HLS部署实例源码分析

1. 综述 SRS 关于 HLS 的具体配置可见: HLS部署实例 SRS 关于 hls 的配置文件内容如下: listen 1935; max_connections 1000; daemon off; srs_log_tank console; vhost __defaultVhost__ { hls { enabled on; hls_fragment 10; hls_window 60; hls_path ./objs/nginx/html; hls_m3u8_file [app]/[s

srs配置-基本RTMP配置 && 日志配置

1.RTMP URL rtmp://HOST:PORT/app/stream_name rtmp: 协议头 HOST:注意的IP地址或域名 app: 应用名称 stream_name:流名称 2.SRS中基本RTMP的配置 listen              1935; pid                 ./objs/srs.pid; chunk_size          60000; ff_log_dir          ./objs; srs_log_tank        f

服务器 ‘xxxx‘ 已被定义为分发服务器。若要将该服务器重新配置为分发服务器,必须首先卸载现有的分发服务

使用AWS DMS(Database Migration Service)将SQL Server数据库同步到AWS的Data Lake上,需要在本地源数据库上配置复制,在配置分发向导最后一步时,遇到下面错误: TITLE: Microsoft.SqlServer.ConnectionInfo ------------------------------   SQL Server could not configure 'xxxx' as a Distributor.   ------------

配置重分发实现主机之间的互联互通

实验目的:配置重分发实现主机之间的互联互通 实验对象:六台路由器,四台PC机 实验环境:GNS3,CRT 实验原理::ospf的ASBR路由重分发 实验步骤: 1.拖拽6台路由器和4台PC机至拓扑区,摆放好 2.先配置路由器属性,每台都增加128M磁盘容量,配置业务单板,这里面我配置的是16口的二层业务单板 3.打开接口信息,连线,配置实验数据,记得检验一遍4.实验思路先分析一波: 拓扑图中,OSPF区域有两个,分别是AREA0 骨干区域和AREA 1非骨干区域,非骨干区域与骨干区域直接相连,起

SRS配置HDS流

HDS指Adobe的Http Dynamic Stream,与HLS类似. 如果要让SRS支持HDS输出,那么在编译SRS的时候需要在编译选项中加--with-hds HDS配置: vhost __defaultVhost__ { hds { # HDS开关 # default: off enabled         on; #秒,切片时长 # default: 10 hds_fragment    10; # HDS列表的窗口大小, # default: 60 hds_window    

SRS配置采集(ingest)

via:https://github.com/simple-rtmp-server/srs/wiki/v1_CN_Ingest 一.什么是ingest(采集) 采集(Ingest)指的是将文件(flv,mp4,mkv,avi,rmvb等等),流(RTMP,RTMPT,RTMPS,RTSP,HTTP,HLS等等),设备等的数据,转封装为RTMP流(若编码不是h264/aac则需要转码),推送到SRS. 采集基本上就是使用FFMPEG作为编码器,或者转封装器,将外部流主动抓取到SRS. 二.inge

srs 配置http flv集群

源站配置 vhost __defaultVhost__ {     min_latency     on;     mr {         enabled     off;         #latency     350;     }     mw_latency      100;     enabled         on;     gop_cache       off;     queue_length    10;     http_remux {             ena

srs(simple Rtmp Server )的一些说明

srs 是国人自己开发的一款视频服务器,采用支持rtmp和hls协议,可以做成容器,让客户端把流推过来来,也可以结合ffmpeg自己主动拉流,详细的说明可以查看srs的wiki: https://github.com/ossrs/srs/wiki/v2_CN_Home srs下载地址:http://ossrs.net/srs.release/releases/index.html srs网页播放器:http://www.ossrs.net/players/srs_player.html?stre

OSPF的高级应用之路由重分发与NSSA的配置

在一个大型网络中会出现很多问题,如路由条目过多.LSDB过大.OSPF和其他路由协议如何通信等问题,需要进一步的优化和解决.这次将介绍路由重分发和NSSA区域的概念和配置. 路由重分发及配置 上次介绍了LSA5,可以讲OSPF AS外的路由通告到OSPF系统内,这是如何实现的呢? 路由重分发 路由重分发通常在那些负责从一个自治系统学习路由,然后向另一个自治系统广播的路由器上进行配置.例如:一台路由器既运行OSPF又运行RIP,如果OSPF进程被配置为通告由RIP学到的路由到OSPF自治系统中,那