当前位置: 首页 > Web前端 > HTML5

H5播放HLS的hls.min.js库

时间:2023-04-05 20:06:49 HTML5

视频流为了生成HLS视频,我们可以使用srs实现r??tmp流,生成HLS流。详细的使用可以参考我之前的文章,这里不再赘述。我们想在网络上播放传统的音频和视频。最重要的是将rtmp实时视频推送到srs集群。为了演示,我这里只起一个简单的srs应用,着重讲解网页播放的相关技术。关于srs实时视频推送一块,我在《SRS直播集群方案》一文中已经做了很详细的介绍,这里不再赘述。首先,我们可以使用ffmpeg或者obs抓取本地视频,推送到srs合传服务。这里我使用obs进行采集推送(ffmpeg每次都需要敲命令),打开obs=>source在右下角添加“视频采集设备”=>“设置”,如下图。为了生成HLS流,我们需要配置srs开启HLS直播,配置如下:listen1935;max_connections1000;srs_log_tankfile;srs_log_file./objs/srs.log;http_api{enabledon;听1985;}http_server{启用;听8080;dir./objs/nginx/html;}stats{网络0;磁盘sdasdbxvdaxvdb;}vhost__defaultVhost__{gop_cache关闭;队列长度10;min_latency开启;先生{启用关闭;}mw_latency100;tcp_nodelayon;hls{启用;hls_片段1;hls_window6;hls_path./objs/nginx/html;hls_m3u8_file[应用程序]/[流].m3u8;hls_ts_file[app]/[stream]-[seq].ts;hls_cleanup开启;#是否清理过期ts文件碎片hls_dispose5;#Cleanupexpiredfiletime}}这里有几个重要的参数我觉得应该稍微解释一下:hls_fragment:秒,指定tsslice的最小长度。其实ts文件的长度是由以下公式决定的:tsfilelength=max(hls_fragment,gop_size)hls_fragment:配置文件中的长度。例如:5秒。gop_size:编码器配置的gop长度。比如ffmpeg指定fps为每秒20帧,gop为200帧,则gop_size=gop/fps=10秒。然后,ts的最终持续时间为max(5,10)=10秒。这就是为什么有些流配置了hls_fragment,但是ts时长还是比这个大。hls_td_ratio:倍数。控制m3u8的EXT-X-TARGETDURATION,参考RewriteHLS写ts部分hls_aof_ratio:multiple。对于纯音频,当ts持续时间超过配置的hls_fragment乘以该系数时,文件将被剪切。例如,但是hls_fragment是10秒,hls_aof_ratio是2.0,对于纯音频,ts文件是按10s*2.0=20秒切的。hls_window:秒,指定HLS窗口大小,即m3u8中ts文件时长的总和。超过总时长后,丢弃第一个m3u8中的第一个分片,直到ts的总时长在该配置项的范围内。即SRS保证如下公式hls_window>=sum(m3u8中每个ts的时长)hls_cleanup:是否删除过期的ts切片,如果不在hls_window中则过期。可以关闭清空ts切片,实现时移和存储,使用自己的切片管理系统。hls_dispose:HLS清理的过期时间(秒)。当系统重启或者超过这个时间,所有的HLS文件,包括m3u8和ts,都会被清理掉。默认值为0,即不清理。hls_wait_keyframe:是否按gop切片,即等待关键帧开始切片。测试发现OSX和android不需要按gop进行切片。启动srs./objs/srs-csrs/conftailf./objs/srs.logobs开始推流使用vlc测试rtmprtmp://192.168.12.187:1935/live/1使用vlc测试HLS即可看到rtmp和hls都可以On-demand,那么接下来我们就根据这两个流开发web前端页面来播放视频。HPlayHLS关于HLS点播的第一种方式,我们可以使用hls.min.js库来实现我们web前端H5页面的web端点播。按照上面的配置,库的延迟大概是7s。为了减少延迟,可以适当调整以下参数:hls_fragment和hls_window取较小的值。文件快速生成和下载,无需等待太久;ts文件的大小与hls_fragment和gop有关,ts文件的时长取两者中的最大值,所以gop的i-frame间隔在采集端尽量小。更小的gopsize上面分析过,ts文件的大小与gop有关,采集端可以减小该值。如果GOP太大,服务器端的缓存也会变大。H264编码使用H.264基线配置文件来减少编码时间。音频尽量使用AAC-LCCodec,这样可以减少编码的时间。hls.min.js库的使用如下:H5播放m3u8文件body>测试经过测试,这个库的播放非常流畅,调整后延迟依然保持在7s左右。帐号:lixiang6153公众号:IT科技快餐邮箱:lixx2048@163.com