当前位置:首页 > 世界杯资讯 > 正文内容

给大家科普一下哈尔滨红旗休闲娱乐(2022已更新(今日/知乎)

杏彩体育2年前 (2022-12-30)世界杯资讯28

发了一篇抖音直播技术原理解析的纯技术文章,发出去没 1 分钟直接被删,账号也被封,并且我的文章也找不到了,客服说无法提供我的文章备份,到底哪违规了也不说,就叫我理解,然后我发 10 几条消息过去,直接就不理我了。以后再也不在这上发东西了,后续文章发在公众号:羽月技术,和 github:https://github.com/oyuyue/blog

斗鱼直播相信大家都听说过,打开斗鱼官网就可以直接在浏览器中观看直播。那么斗鱼是如何实现浏览器视频直播的呢?本篇文章就来解析斗鱼是如何实现直播的,以及它是如何节省 80% 的 CDN 流量,要知道视频直播流量费并不便宜,斗鱼每个月光这些流量费都要支付几个亿,节省 CDN 流量就是省钱。

直播技术方案

在实际去斗鱼直播间调试视频直播之前,我就猜它肯定是使用 HTTP-FLV 方案来实现视频直播,因为国内几乎所有直播平台都是使用 HTTP-FLV 方案。

但是去斗鱼直播间并没有找到 .flv 的网络请求,而是找到了 .xs 的网络请求,如下图所示。

image.png

不过 .xs 网络请求的响应的 Content-Type 是 video/x-flv,原来只是后缀不同,看来我猜的果真没错,斗鱼就是用的 HTTP-FLV。

HTTP+P2P FLV 拉流

不过为什么后缀是 .xs 而不是 .flv 呢?其实这里是因为斗鱼默认并不完全使用 HTTP 去拉流,而是采用 CDN 和 P2P 两种方式同时去拉流,.xs 并不是一个完整的 FLV 流,而是一个子 FLV 流。

进入斗鱼直播间,斗鱼首先会去请求一个完整的 FLV 流,等 P2P 连接好了再去切换成子流。这是因为 P2P 连接比较慢,如果走来就走 P2P,那么视频起播速度会非常慢。

上图中第二个连接就是一个完整的 FLV 流,等 P2P 连接成功后会断开连接去拉子流。

在 P2P 连接成功后,还可以在网络面板看到一个 WebSocket 连接,如下图所示,它是斗鱼用来推送其他正在观看当前流的用户的,这样播放器就可以直接从推送的用户这里拉流。

斗鱼 P2P 是基于 WebRTC 的 DataChannel,可以打开 chrome 的 WebRTC 的调试页面,可以看到有很多 WebRTC 连接,它可以接收其他用户分享的视频数据,自己也会共享当前下载到的视频数据给其他用户。

斗鱼将一个完整的直播流进行切片,分成一个个小的视频分片并进行编号(这样方便用户之间共享)然后将这些小分片分为多个子流,通过 HTTP 从 CDN 拉一路子流,然后通过 P2P 去其他用户那里拉其他的子流。

但是通过 P2P 从其他用户那里拉流并不是很稳定,例如其他用户可以能退出了直播间,或者网络出了问题,这样就会导致接收它分享的用户直播断流。为了提升直播稳定性,如果在一定时间内没有收到其他用户分享的数据,斗鱼播放器就会立刻从 CDN 去拉对应的子流,并且 WebSocket 也会推荐新的用户给播放器。

可以发现,加上 P2P 拉流,大大增加了直播的复杂度。但是它带来的好处也非常的明显,就是可以省钱,省到就是赚到!因为流量费非常的贵,斗鱼每个月光直播带宽都得花好几个亿。利用 P2P 从其他用户那里拉流可以节省大量流量,例如一个直播流分为两个子流,一个从 CDN 拉,一个从其他用户那里拉,这样理论上就可以节省 50% 的流量,而斗鱼将一个直播流分成 6 个子流,一个从 CDN 拉,其余 5 个全部从其他用户那里拉,理论上可以节省超过 80% 的直播流量!

当然 P2P 拉流也有一些缺点,例如直播延迟较高,不适用于低延迟直播场景,对用户电脑和带宽有一定消耗,因为除了从其他用户那里拉流,当前用户自己还要上传视频数据给其他用户。

如果你想关闭 P2P,也比较简单,可以在网络面板屏蔽下图中的地址即可。

屏蔽之后,斗鱼就只会从 CDN 拉流,不走 P2P,如下图所示,可以发现流的地址变成正常的 .flv 后缀。

无论是只使用 HTTP,还是使用 HTTP + P2P,它们的最终目的是获取 FLV 视频数据。

FLV 格式

FLV 视频格式是由 Adobe 公司开发,在 2003 年发布,用于视频文件在网络上传输。在 Flash 时代几乎所有流媒体平台都在使用 FLV 格式,但是随着 Flash 技术的淘汰,FLV 也跟着没落了,目前国外已经没有流媒体平台在使用 FLV 了,但是在国内 FLV 却广泛用于网络直播场景。

不像 Flash,H5 的 video 元素是无法播放 FLV 视频的,我们需要借助 MSE 来自己控制视频播放,具体原理是将 FLV 转封装成 FMP4 视频格式,然后交给 MSE 播放即可。

MSE 全称是 Media Source Extensions API,它是 Web 流媒体的基础,所有 Web 流媒体平台最终都会用到它,如果对它感兴趣,欢迎查看 流媒体视频基础 MSE 入门 & FFmpeg 制作视频预览缩略图和 fmp4

目前有开源的 flv.js 来帮我们完成这件事,查看斗鱼 dist 后代码,斗鱼也是使用的 flv.js,不过在之上加了很多自定义的代码,例如加上了 h265 编码的支持,flv.js 是不支持 h265 编码的,FLV 官方规范也不支持,但是业务又有这种需求,所以一般将 FLV 视频编码 ID 等于 12 当作 h265 的流。在斗鱼直播中如果发现直播流是 h265 编码并且浏览器不支持 h265,斗鱼会利用 WASM 来软解播放视频。

直播时移

对于赛事直播斗鱼是支持直播时移的,如下图所示。

但是这个播放器的进度条体验不是很好,进度条的高度只有 3px,鼠标非要精准的放上去,才能有 Hover 的效果,这是没那么容易做到的。这里推荐个好用开源的播放器进度条 ppbar,你可以把它集成到任何播放器中去,非常的好用。

斗鱼直播时移是基于 HLS 的,如果点击一下进度条,斗鱼播放器会黑一下,将 FLV 切换成 HLS。

在刚开始进入直播间拉流的时候,斗鱼播放器可以获取到服务器返回的一个时间戳,单位是秒,当用户点击进度条跳转到前 10 分钟时,就直接用当前时间减去 600 秒就得到了前 10 分钟视频的时间戳,然后会用这个时间戳去请求请求一个 getVodStream 接口获取到 HLS 时移流地址,获取到 HLS 过后,就和普通 HLS 直播一样去播放即可。

和 FLV 一样,要在浏览器中播放 HLS 流,同样需要 MSE API 来播放,目前可以借助开源的 hls.js 来在浏览器中播放 HLS 流。查看斗鱼 dist 过后的代码,斗鱼应该没有使用 hls.js,而是自己实现在浏览器中播放 HLS。

总结

这篇文章介绍了斗鱼 H5 直播技术的原理,斗鱼不仅使用国内常用的 HTTP-FLV 方案,还加入了 P2P 拉流,从而节省 CDN 流量。对于赛事直播,斗鱼还支持直播时移,直播时移是使用 HLS 来实现的,用户在 seek 后会通过 seek 到的时间点去服务器换取对应的时移 HLS 流地址,然后走 HLS 拉流即可。

更多

CSS3 transform 和 canvas 背后不为人知的秘密这么炫酷可交互的网站,居然没有一行 JS 代码!NPlayer 支持任何流媒体和 B 站弹幕体验的视频播放器流媒体视频基础 MSE 入门 & FFmpeg 制作视频预览缩略图和 fmp4原来爱优腾等视频网站都是用这个来播放流媒体的3 秒左右的低延迟直播方案 - LHLS 和 LL-HLSLL-DASH CMAF 低延迟直播

扫描二维码推送至手机访问。

版权声明:本文由财神资讯-领先的体育资讯互动媒体转载发布,如需删除请联系。

本文链接:http://www.tengj.cn/?id=20387

分享给朋友:

“给大家科普一下哈尔滨红旗休闲娱乐(2022已更新(今日/知乎)” 的相关文章

给大家科普一下世界杯买彩票怎么看(2022已更新(今日/知乎)

给大家科普一下世界杯买彩票怎么看(2022已更新(今日/知乎)

《网球王子》会走上这条逆天道路也不奇怪,日本运动番许多都这个套路,前辈《足球小将》就是被称作杀人足球的,是走写实风还是超能力战斗全靠作者,人家《灌篮高手》就是写实风,写实风的特点要求作者必须得是内行,就是说人家《灌篮高手》的作者井上雄彦喜欢篮球又很懂篮球,为了画这部漫画专门去美国现场观看N...

给大家科普一下足球衣去哪里买正品(2022已更新(今日/知乎)

给大家科普一下足球衣去哪里买正品(2022已更新(今日/知乎)

作为一个刚刚开始打网球两个月、但坚持不断push 我家年糕打网球的鸡血妈妈,这个问题我可以回答! 这几年,作为育儿博主的我一直在宣扬,6 岁前,让孩子有快乐的童年、好的亲子关系比什么都重要。 我也确实是这样实践的。年...

给大家科普一下世界杯在哪买输赢官方(2022已更新(今日/知乎)

给大家科普一下世界杯在哪买输赢官方(2022已更新(今日/知乎)

  原标题:中国足球改革迷途:投资金额越来越大,世界排名越来越低   中国足球职业化至今已历时27年   投资金额越来越大,   足改方案接连不断   三级联赛(中超、中甲、中乙)   至今未能探索出一条可持续发展之路   中国足球改革迷途...

给大家科普一下什么是对赌交易(2022已更新(今日/知乎)

没想到评论区这么热闹,统一回复: 1.关于5万和2万,是人还是场次还是钱,我本以为虽然不带单位,但是联系上下文应该不难理解是一年中的比赛场次的,看来我高估了某些人的语文理解力了。 2. 比赛的场次的计算:不计算“约架...

给大家科普一下2021欧洲杯怎么投注才能赢钱(2022已更新(今日/知乎)

给大家科普一下2021欧洲杯怎么投注才能赢钱(2022已更新(今日/知乎)

世界杯看球指南·第8夜 11月27日18:00 日本VS哥斯达黎加 11月27日21:00 比利时VS摩洛哥 11月28日00:00 克罗地亚VS加拿大 11月28日03:00 西班牙VS德国 11月23日,西班牙队球员加维(右二)和队友庆祝攻入球队...

给大家科普一下重生国足打世界杯的小说(2022已更新(今日/知乎)

给大家科普一下重生国足打世界杯的小说(2022已更新(今日/知乎)

001 澳洲甲 西悉尼 vs 纽喷气机 前瞻:两队近10场交锋,西悉尼流浪者 胜1场, 平3场, 负6场,西悉尼流浪者是澳超联赛的一支足球俱乐部,本赛季近10场表现目前胜2场,平4场,负4场,打进13,失球15,暂列积分榜第22排名澳超联赛第10位 西悉尼流浪者上一场比赛1...