关于直播平台的技术实现

2016-03-17 11:13:22 +08:00
 wjdimba

请教一下各位像斗鱼 战旗那种直播平台技术是自己开发的还是用国内第三方的服务商,如果自己想搭建一个类似的直播平台,改怎么做比较好。

12667 次点击
所在节点    程序员
26 条回复
typcn
2016-03-17 20:22:14 +08:00
@lisonfan 由于 h265 版权费高昂,目前世界上还没有一款支持 html5 h265 播放的浏览器,例如 Google 要在全套产品支持 h265 ,每年需要支付很数亿美元的版权费用。


@livepps
@vicence 国内直播占 CPU 的原因有两个:
1. Flash 本身就费 CPU ,用了别想低。。除了某些魔改过的 flash ,全部都是软解的。软解就软解,还没有任何优化,比起 ffmpeg 那一堆库出来的效率不知道低到哪里去了
2. 那些直播站还带弹幕,用 Flash 来实现弹幕本身就是一件非常蠢的事情, Flash 的文字渲染性能处在一种不可接受的程度。


HTML 5 直播有几种方案:
(当然为了照顾国内大环境, Flash fallback 还是得有的)
1. HLS
ajax 读分片, JS 转一下容器,加上 mp4 的 header/box ,用 media source extension 来播放,在移动端上可以直接播放。
优点: HTTP 协议, CDN 友好,还可以跟 iOS 必备的 HLS 用一套源,免得服务器切片一堆东西,支持所有主流浏览器。
缺点:比 dash 占用稍微高一点点,延迟至少一个 GOP + 网络传输时间。

2. DASH
ajax 读分片,利用 media source extension 来播放
优点: HTTP 协议, CDN 友好,比 HLS 稍快点,支持所有主流浏览器。
缺点:服务器需要切片 hls + dash 两套,降低 cdn 缓存利用率,延迟至少一个 GOP + 网络传输时间。

3. Matroska
真正意义上的流,<video> 标签直接播放,具体看这里: https://matroska.org/technical/streaming/index.html
注意别转码,别转码,别转码,直接封装 rtmp 推上来的 h264 进去,每个请求来的时候生成一份 metadata ,做重传,不用等到一个关键帧就可以播放。
优点:速度最快占用最低,延迟可以做到跟 rtmp 一个级别
缺点:只支持 Chromium-based 浏览器,没法用 CDN


直播不需要什么配置,大部分情况下都是重新封装一下视频容器,树莓派也能扛几千人。
除非你要转码,或者你用的 Java 写的媒体服务器。
AndyCrz
2016-03-17 21:55:05 +08:00
有开源的 OBS 系统,在 github 上很多
zacard
2016-03-18 09:29:15 +08:00
学习
wupher
2016-03-18 10:37:49 +08:00
@dellch 延时还好,关键看用户量级和网络质量。我们的直播端使用手机源,并且人在国外。观看的用户主要在国内,人数大约才刚过百。视网络质量,有时确实会有卡顿情况,但总体能接受。我也去研究了一下 YY 的手机端直播,坦白的说也是有卡顿,声音延迟等问题。当然 YY 的服务量级远远超出我们。

如果真的对实时性要求非常高,也可以考虑不使用 RTMP 协议,比如基于 UDP 协议上自己进行封装(个人怀疑 QQ 视频的实现可能是这种方式)。但是这样做一来开发难度与周期会加大,二来也无法使用 CDN 通用的 RTMP 加速,可能视服务情况需要自己构建 CDN 加速服务。

希望能帮上你。话说如果你们打算自已研发 UDP 协议,能开源让我学习一下就更好了

^_^
jiala
2017-10-20 16:32:49 +08:00
可以看看这个 http://www.meilibo.net
abcleeray
2018-10-07 23:38:21 +08:00
mark 现在用阿里云
以后看看能不能去自己实现!?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/264137

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX