简介

尝试仿制了一下bilibili弹幕网的直播功能的小(小小小)Demo,之后可能应该会仿照b站的直播间样式进行更新,甚至还会把普通视频的播放也做出来(

项目地址:https://github.com/SHIDi233/html5-live-bili

开始

flvjs

官方介绍:

一个HTML5 Flash视频(FLV)播放器,使用纯JavaScript编写,不使用Flash。FLV万岁!
此项目依赖于Media Source Extensions来工作。
该项目是bilibili公司的开源项目,项目地址:https://github.com/Bilibili/flv.js/

功能:

1.FLV 容器,具有 H.264 + AAC 编解码器播放功能
2.多部分分段视频播放
3.HTTP FLV 低延迟实时流播放
4.FLV 通过 WebSocket 实时流播放
5.兼容 Chrome, FireFox, Safari 10, IE11 和 Edge
6.低开销,能使用浏览器进行硬件加速

可以选择项目进行编译或直接下载release版本,将其中flv.js与flv.min.js提取放置于网页同级文件夹下。
image

h5界面

既然flvjs将flv流切成了mp4片段,我们可以使用html5中的video标签直接进行播放。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>直播页面</title>
<meta name="description" content="仿Bilibili HTML5播放">
<meta name=" keywords" content="仿Bilibili HTML5播放">
</head>

<body>
<div class="play-video wrapper clearfix" style="width: 1215px; margin: 0 auto;">
<!-- 左边 -->
<div class="play-left" style="float: left;width: 644px;">
<!-- 视频 -->
<div class="bigvideo" style="position: relative;width: 1144px;box-shadow: 0 0 3px 3px #ccc;">
<video id="video" controls autoplay width="1144" height="644"></video> //视频播放器大小,可自行调整
<!-- 备注 -->
<div class="info">
<p>直播测试</p>
<p>2023.04.27</p>
</div>
</div>
</div>
<script src="flv.min.js"></script>
<script>
var player = document.getElementById('video');

if (flvjs.isSupported()) {
var flvPlayer = flvjs.createPlayer({
type: 'flv',
"isLive": true,
url: 'http://123.57.221.224:7001/live/test.flv',//拉流url
});
flvPlayer.attachMediaElement(video);
flvPlayer.load(); //加载
flv_start();
}
function flv_start() {
player.play();
}
function flv_pause() {
player.pause();
}
function flv_destroy() {
player.pause();
player.unload();
player.detachMediaElement();
player.destroy();
player = null;
}
</script>
</body>

效果图:
image

rtmp转http-flv

这里使用livego插件进行流的转换,应该也可以使用FFmpeg(没试)。
livego下载地址:https://github.com/gwuhaolin/livego/releases
这个项目使用的livego为0.0.4版本,新版本会有报错,原因未知。

下载解压后使用cmd命令行运行livego.exe即可开启服务,我们要使用两个端口,分别是1935(RTMP推流)和7001(Http-flv拉流),如果我们使用了云服务器,记得在安全策略里将相关端口开放。
image

obs推流

万能推流神器,不多评价,好用就完事了。

image

将推流地址设置为你的服务器地址,秘钥随便写一个(记得在html代码同步更改)。
在首页点击开始直播即可。

效果

有一说一效果比我想的好很多,本地搭建服务的话延迟小于3秒。

使用之前比赛的阿里服务器还没过期,带宽只有1M,我尝试使用800Kbps码率进行推流可以达到60fps的流畅直播。因为流的性质,在画面迅速时画质很低,在比较静态时画质较高。但1M还要什么自行车啊。

【泠鸢·翻唱】流年如歌 [拜年祭金曲翻唱~]

b站地址:https://www.bilibili.com/video/BV1BE411p7oi

比较静态时:

image

【泠鸢·原创】夏日已所剩无几【WING翼】【茜色诗集】

b站地址:https://www.bilibili.com/video/BV1xs411r7Mq
画面切换迅速时:

image

诶。。。听着泠鸢这首夏日已所剩无几,又回想到了高考结束的日子。。。

《原神》角色演示-「钟离:听书人」

b站地址:https://www.bilibili.com/video/BV1hD4y1X7Rm

比较静态时:

image

画面切换 非常 迅速时:

image

未完待续。。。