怎么做到微信直播,HTML5直播,低延时

html-css015

怎么做到微信直播,HTML5直播,低延时,第1张

功能模块概述

通过obs客户端推流到nginx流媒体服务器上,对流媒体用ffmpeg将流剪切为若干段ts流文件并保存到临时目录中,通过访问m3u8格式拼接ts流文件段来观看直播。

推流端

采用开源工具OBS客户端进行推流

根据项目的推流地址,填入OBS客户端(下载地址)中,并设置场景,保存后重启,便可开始推流。

为更加稳定的推流,建议使用以上链接中的v0.625稳定版本,按提示安装完成后,打开设定.在广播设定中,伺服器统一填写我们项目的流媒体接收流地址:

rtmp://127.0.0.1:1935/hls/

以上这几个数据都是可以更改的。

127.0.0.1——你的流媒体服务器ip

1935——你的rtmp端口号

hls——你的直播nginx配置模块

具体在下文中也有详细介绍

配置地址

回到主界面,右键来源,选择添加视频捕捉设备或获取窗口等(相关设置默认即可),点击开始串流,便可开始直播。

添加场景

图为添加视频捕捉设备后的直播画面:

直播中

流媒体服务器

Nginx接收推流模块

rtmp_auto_push on

rtmp {

server {

listen 1935

application hls {

live on

hls on

hls_path /tmp/hls

on_publish 项目地址/liveOnPublish

on_publish_done 项目地址/liveOnDone

notify_method get

}

}

}

配上我在word上的注解

注解1

Nginx处理直播流模块

http {

server {

listen 80

server_name localhost

location /hls {

secure_link $arg_st,$arg_e

secure_link_md5 key$arg_e

subs_filter .ts '.ts?st=$arg_st&e=$arg_e&clentip=$remote_addr'

subs_filter_types application/vnd.apple.mpegurl

if ($secure_link = "") {

return 402

}

if ($secure_link = "0") {

return 403

}

# Serve HLS fragments

types {

application/vnd.apple.mpegurl m3u8

video/mp2t ts

}

root /tmp

add_header Cache-Control no-cache

}

}

}

注解2

项目部署服务器

流媒体服务器不通过项目服务器,整个直播过程的推流和处理流都在流媒体服务器上进行。项目服务器主要进行直播地址加密处理意见推流开始和结束触发的方法(liveOnPublish(),liveOnDone())已及对直播地址加密.

播放端

直接通过HTML5中的<video>标签设置src来播放直播流。如:

<video src="pro/live.m3u8?st=UM/L8jdfTlY2b1j1F6XSxA==&e=1468548530

" controls="controls"></video>

存在的问题

延迟待测试(不科学的数据是安卓手机普遍在30-40s,苹果手机在20-30s)

并发待测试

掉帧待测试(网速影响大,网络好几乎不掉帧,网络差掉一半,用户体验差)

推荐使用ckplayer,

最新更新日期:2018-01-10

修正了不能播放部分rtmp视频的bug

增加了删除缓动的api

升级方法

替换ckplayer.swf及ckplayer.js中112行!(function() {以下的内容

在ckplayer.js及ckplayer.xml中搜索“addCallback”属性节点,列表中增加deleteAnimate属性

最新更新日期:2017-12-14

调用播放器初始化时增加了一个属性playerID,可以在同页面多播放器时用来区分不同的播放器发出的监听事件

修正了一些无关紧要的bug

增加了h5部分对于控制栏的限制以及相对应的api

统一了flashplayer和h5的右键设置

增加了播放器动作按钮点击的监听函数clickEvent

升级方法

替换ckplayer.swf及ckplayer.js中112行!(function() {以下的内容

更新日期:2017-12-08

修正了h5字幕文件显示样式控制不了的bug

增加了控制控制栏显示/隐藏的接口

升级方法

替换ckplayer.swf及ckplayer.js中113行!(function() {以下的内容

搜索ckplayer.js以及ckplayer.xml中的addCallback属性,在其最后添加:“,changeControlBarShow”

更新日期:2017-11-24

修正了html5环境中视频出错时播放器上方不显示错误提示的bug

升级方法

替换ckplayer.swf及ckplayer.js中113行!(function() {以下的内容

更新日期:2017-11-23

1:增加了flashplayer中调用视频地址包含逗号时出错的bug

2:修正了当删除ckplayer.js的配置logo被删除后html5环境出错的bug

3:修正了html5中缓冲图标没有动画效果的bug

升级方法,1:替换ckplayer.swf、2:替换ckplayer.js中112行!(function() {以下的内容、3:在ckplayer.js中找到“m3u8MaxBufferLength: 30,”,在该行下面增加“split:',',”、4:在ckplayer.xml中找到“<m3u8MaxBufferLength>30</m3u8MaxBufferLength>”,在该行下面增加“<split>,</split>”

更新日期:2017-11-16

1:修复了ipad不能播放m3u8的bug

2:修改移动端默认不使用ckplayer自定义风格

3:html5风格中增加了倍速播放按钮列表

4:html5环境中增加了倍速播放api

升级方法,只需要替换ckplayer.swf以及ckplayer.js中112行!(function() {以下的内容

更新日期:2017-11-10

HTML5环境支持视频的旋转和缩放,修改的文件为ckplayer.js,修改的内容是videoRotation()函数和videoZoom()函数

更新日期:2017-11-07,更新内容(如果你不是使用的rtmp则无需更新):

1:html5播放器统一使用ckplayerConfig()函数里指定的logo图片做为logo

2:修正了部分rtmp直播流无法播放的bug

3:修正了一些其它bug

ckplayer X版本升级说明,2017-11-01

一:重构代码

1:完全重构了ckplayer.js、ckplayer.xml,配置规则标准化。不再使用同一个属性定义多个值的形式进行配置。ckplayer.js中的html5部分采用自定义风格的功能。

2:完全重构了language.xml,语言包进行了可扩展升级。

3:完全重构了风格文件。不再采用以前版本的压缩包形式,而是仅采用style.xml进行配置,图片文件全部转化成base64使用,并且支持加密。保护您的插件。并且支持自定义按钮,图片或swf的功能。

二:功能方面的升级

1:广告部分增加了新的广告形式,插入广告,结尾广告,其它类型的广告(如横幅,角标等自定义显示时间),保留原来的前置广告,暂停广告。增加了广告展示监听,广告点击监听功能。

2:播放部分升级了对m3u8格式的内部支持,不再使用外部插件播放。

3:增加了flashplayer环境对m3u8文件的加密支持。

4:内置了清晰度支持功能,以及m3u8清晰度自动选择及显示的支持。

5:内置了弹幕显示功能,多种缓动效果。可以制作出多种弹幕显示效果。并且支持弹幕和播放器的互动,以前和js的互动。

6:重构了播放器的API

三:其它说明

本次升级是一次非常大的升级行为,跟之前版本基本毫无联系。调用播放器的代码更加简单高效智能化。