H5播放HLS之video标签播放

视频推流

为了产生HLS视频,我们可以借助srs来实现rtmp推流并生成HLS流,具体详细使用可以参考我之前的文章,这里不再赘述。

我们要实现web端播放传统的音视频,最重要的实现就是rtmp实时视频推送至srs集群,为了演示我这里只启动一个srs简单应用,重点放在web端播放相关技术的讲解,关于srs实时视频推送一块,我在《SRS直播集群方案》一文已经做了很详细的介绍,这里不再赘述。

首先,我们可以使用ffmpeg或者obs采集本地视频并推送到srs协转服务中,这里我使用obs进行采集与推送(ffmpeg每次都需要敲命令),打开obs=>来源一栏添加“视频捕获设备”=>右下角“设置”,具体如图下所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为了生成HLS流,我们需要配置srs开启HLS直播,该配置如下:

listen              1935;
max_connections     1000;
srs_log_tank        file;
srs_log_file        ./objs/srs.log;
http_api {
    enabled         on;
    listen          1985;
}
http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}
stats {
    network         0;
    disk            sda sdb xvda xvdb;
}
vhost __defaultVhost__ {
    gop_cache       off;
    queue_length    10;
    min_latency     on;
    mr {
        enabled     off;
    }
    mw_latency      100;
    tcp_nodelay     on;
    hls {
        enabled         on;
        hls_fragment    1;
        hls_window      6;
        hls_path        ./objs/nginx/html;
        hls_m3u8_file   [app]/[stream].m3u8;
        hls_ts_file     [app]/[stream]-[seq].ts;
        hls_cleanup     on;#是否清理过期ts文件片
        hls_dispose     5;#清理过期文件时间
    }
}

这里的几个重要参数我觉得还是要稍微说明一下的:

  • hls_fragment:秒,指定 ts 切片的最小长度。实际上 ts 文件的长度由以下公式决定:
ts文件时长 = 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,参考 Rewrite HLS写入ts部分
  • hls_aof_ratio:倍数。纯音频时,当 ts 时长超过配置的 hls_fragment 乘以这个系数时就切割文件。例如,但hls_fragment 是 10 秒,hls_aof_ratio 是 2.0 时,对于纯音频,10s*2.0=20秒时就切割 ts 文件。
  • 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 切片,即等待到关键帧后开始切片。测试发现 OS X 和 android 上可以不用按 gop 切片。

启动srs

./objs/srs -c srs/conf
tailf ./objs/srs.log

obs开始推送流
obs开始推送流
使用vlc测试rtmp

rtmp://192.168.12.187:1935/live/1

在这里插入图片描述
在这里插入图片描述
使用vlc测试HLS
在这里插入图片描述
在这里插入图片描述
可以看到rtmp和hls都可以点播,那么接下来的时间我们就基于这两条流开发web前端的页面来点播视频。

H5-video播放HLS

1、手机播放

视频播放的场景主要是手机以及PC机。通过video标签播放.m3u8格式视频需要两个条件:

  • 支持H5的video标签;

  • 在条件1的基础上同时需要支持.m3u8类型的视频播放。
    由于HLS这种协议是由Apple公司定义的,所以苹果手机能够很好的支持.m3u8视频的播放;android手机浏览器只要支持H5的video标签就基本上支持.m3u8这种类型的视频播放;而PC端浏览器即使支持H5的video标签,也不支持.m3u8视频的播放

  • 针对手机端H5页面直接使用video标签就可以播放视频了,video标签使用如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <video 	class="tvhou" width="100%" height="100%"
    		controls="controls" autoplay="autoplay"
		    x-webkit-airplay="true" x5-video-player-fullscreen="true"
		    preload="auto" playsinline="true" webkit-playsinline
		    x5-video-player-typ="h5">
	    <source type="application/x-mpegURL" src="http://192.168.12.187:8080/live/1.m3u8">
	</video> 
	<!-- 
	<video width="640" height="360"
        autoplay controls autobuffer 
        src="http://192.168.12.187:8080/live/1.m3u8"
        type="application/vnd.apple.mpegurl">
	</video>-->
</body>
</html>
  • PC端使用video标签播放
    对于PC端,由于不支持.m3u8类型视频的播放,所以基于flash进行播放;而对于苹果的ios以及mac系统都支持该类型视频播放的,android4.0以上版本应该也没啥问题。而解决问题的关键就是找到一个播放器!
<!DOCTYPE html>
<html>
	<head>
		<title>the5fire m3u8 test</title>
		<script src="js/swfobject.js"></script>
	</head>
	<body>
		<div id="player"></div>
		<script>
		    var flashvars = {
		        // M3U8 url, or any other url which compatible with SMP player (flv, mp4, f4m)
		        // escaped it for urls with ampersands
		        src: escape("http://192.168.12.187:8080/live/1.m3u8"),
		        // url to OSMF HLS Plugin
		        plugin_m3u8: "js/HLSProviderOSMF.swf",
		    };
		    var params = {
		        // self-explained parameters
		        allowFullScreen: true,
		        allowScriptAccess: "always",
		        bgcolor: "#000000"
		    };
		    var attrs = {
		        name: "player"
		    };
		 
		    swfobject.embedSWF(
		        // url to SMP player
		        "js/StrobeMediaPlayback.swf",
		        // div id where player will be place
		        "player",
		        // width, height
		        "800", "485",
		        // minimum flash player version required
		        "10.2",
		        // other parameters
		        null, flashvars, params, attrs
		    );
		</script>
	</body>
</html>

经过测试延迟也在7s左右,比hls.min.js稍微慢一丢丢,但是播放器效果稍微好看一点!
在这里插入图片描述
源码获取、合作、技术交流请获取如下联系方式:
QQ交流群:961179337
在这里插入图片描述

微信账号:lixiang6153
公众号:IT技术快餐
电子邮箱:lixx2048@163.com

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: H5播放HLS(Hypertext Live Streaming)是指使用HTML5技术在网页中播放HLS格式的视频流。HLS是一种基于HTTP协议的流媒体传输协议,它通过将视频流分割成小的TS文件,并使用M3U8文件作为索引,实现视频的分段加载和播放。 为了在网页中实现H5播放HLS,可以使用hls.js库(hls.min.js)。hls.js是一个开源的JavaScript库,它提供了一个HLS播放器,可以在支持HTML5的浏览器中播放HLS视频。 使用hls.js库,需要在网页中引入hls.min.js文件,并创建一个Hls对象。然后,根据视频地址创建一个video元素,并将其作为参数传递给Hls对象的attachMedia方法。接下来,可以监听Hls对象的一些事件(如Hls.Events.MANIFEST_PARSED),根据需要设置一些配置选项,如自动播放、循环播放等。最后,调用Hls对象的loadSource方法并传入视频地址,开始加载并播放HLS视频。 使用hls.js库,可以实现在网页中无插件地播放HLS视频,而无需依赖Flash等第三方插件。它还提供了一些功能,如自适应码率切换、缓冲控制、清晰度切换等,来提升用户体验。总的来说,hls.js库为开发者提供了一种简单、可靠的方式来实现H5播放HLS视频的功能。 ### 回答2: h5播放HLS(HTTP Live Streaming)是一种流媒体传输协议,可以在网络不稳定或带宽较低的情况下流畅播放视频。为了实现在H5页面上播放HLS格式的视频,我们可以使用hls.min.js库。 hls.min.js是一个开源的JavaScript库,它是HLS.js的压缩版本。HLS.js是一个在Web平台上实现HLS播放的JavaScript库,它使用Media Source Extension(MSE)技术来实现HLS的解析和播放。 在使用hls.min.js之前,我们需要先在HTML页面中引入该库的脚本。可以通过在<script>标签中增加src属性指向hls.min.js文件所在的URL来进行引入。例如: <script src="hls.min.js"></script> 接下来,我们需要创建一个HLS对象并将其绑定到video元素上。这可以通过以下代码来实现: var videoElement = document.getElementById('video'); var hls = new Hls(); hls.loadSource('video_url.m3u8'); hls.attachMedia(videoElement); 在上面的代码中,videoElement是我们在HTML中定义的video元素,'video_url.m3u8'是HLS视频流的URL。通过loadSource()方法来加载HLS视频流,并通过attachMedia()方法将HLS对象绑定到video元素上。 最后,我们需要监听HLS对象的一些事件来处理播放状态的变化。例如,我们可以监听HLS对象的'Hls.Events.MANIFEST_PARSED'事件来确保视频流已经解析完毕并可以开始播放hls.on(Hls.Events.MANIFEST_PARSED, function() { videoElement.play(); }); 通过以上步骤,我们就可以在H5页面上使用hls.min.js库来播放HLS格式的视频了。 ### 回答3: hls.min.js是一个用于播放HLS(HTTP Live Streaming)视频的JavaScript库。HLS是一种基于HTTP的流媒体传输协议,它将视频切分成小片段,并通过HTTP协议逐个下载和播放这些片段。 hls.min.js库可以实现在支持HTML5的浏览器中播放HLS视频流。它提供了一些API和事件监听器,用于控制和管理视频的播放。 首先,我们需要在HTML页面中引入hls.min.js库文件。然后,通过创建一个新的Hls对象来初始化播放器。使用Hls对象的loadSource方法可以加载一个HLS视频流的URL。一旦视频流加载完毕,可以通过调用Hls对象的attachMedia方法将视频流与HTML中的video元素关联起来。 hls.min.js库还提供了一些事件监听器,例如在视频播放开始或结束时触发的事件。我们可以通过添加这些事件监听器来执行自定义的操作,例如在视频播放结束后自动加载下一个视频片段。 此外,hls.min.js还支持视频流的动态切换。如果视频有多个分辨率或质量选项,可以通过调用Hls对象的startLoad或nextLevel方法来切换视频的质量。 总之,hls.min.js库是一个方便并且易于使用的工具,可以使开发者在HTML5中实现HLS视频的播放。它提供了一系列的API和事件监听器,用于控制和管理视频的播放过程,并且支持视频流的动态切换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝壳里的沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值