“云无界、端无边” OGeek 技术峰会 9月17日 南京不见不散! 了解详情
写点什么

构建 Facebook Live 直播流中的挑战

  • 2017 年 3 月 31 日
  • 本文字数:1076 字

    阅读完需:约 4 分钟

Facebook Live 直播项目启动于两年前的一次黑客马拉松(hackathon),八个月后就匆匆上线。在近期的 QCon 伦敦大会上,Facebook 视频架构主管 Sachin Kulkarni 做了演讲并指出,如何处理同一直播流中数量变化无法预测的观看者是Facebook Live 的一个挑战。在报告中,Kulkarni 还介绍了构建Facebook Live 直播流时所面对的架构上和设计上的挑战。

从较高层次上看Facebook Live 架构,一旦一个观看者连接到最近的“接入点”(PoP,Point of Presence),就会启动一个Live 直播流。PoP 连接会被依次提交给数据中心,在数据中心中完成直播流的编码。之后,数据中心会将直播流发送给多个不同的PoP 和回放客户端。据Kulkarni 介绍,PoP 负责视频的缓存、终止观看直播的客户连接,并通过Facebook 自建网络将直播流传递给数据中心。自建网络传输更为可靠,并降低了往返时间。

针对在扩展性上的挑战,Kulkarni 指出,并发直播流的数量和全部直播流的总计观看者数量都是可预测的,因此并不存在多少挑战性问题。真正的问题在于,单一直播流上的观看者数量不定,从寥寥数人到门庭若市。因为观看者是不可预测的,也就无法对其做出规划。为解决该问题,Facebook 采用了缓存和直播流分配这两种方法。

Kulkarni 指出了相比于常规视频而言,Live 直播流中存在的其它一些挑战:

  • 因为直播内容是实时创建的,所以不可能预先建立缓存,任何形式的预缓存都是不可行的。
  • 对直播事件做预先规划并扩展资源,这一做法是存在问题的。
  • 难以预测由全球热点事件所导致的并发流和观看者的激增问题。

网络问题是直播流可靠性的主要挑战。为解决这些问题,Kulkarni 提出了三个建议:

  • 通过使用自适应码率进行调整,降低视频质量以适应较低的带宽,虽然这项技术常用于回放端,但他们也正在将其用于采集端了。
  • 使用客户端的临时缓存处理暂时性连接丢失。
  • 最坏的情况是带宽不够,这时需要将广播和回放转换成只提供音频。Facebook Live 认为,能听到要比能看到更重要。

Kulkarni 还给出了一些从项目中得到的经验教训:

  • 不积跬步,无以至千里。任何大型服务都是从细微之处开始的。动手去编写代码远胜于无休止地纸上谈兵。
  • 可靠性和可扩展性是设计中必须要考虑的问题。无论运行故障是否有规划,都应做出相应的设计。
  • 为交付大型项目,需要做出妥协。
  • 考虑未来的特性,应保持架构的灵活性,使得团队的演进可以超越架构的变更。

查看英文原文: Challenges Building Facebook Live Streams


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017 年 3 月 31 日 19:001369
用户头像

发布了 227 篇内容, 共 65.6 次阅读, 收获喜欢 26 次。

关注

评论

发布
暂无评论
发现更多内容

内存型数据库Redis,是如何实现持久化的?

Zhongger

redis

鼓舞人心!主席支持数字经济!央行数字货币研究所为世界制定区块链相关国际标准

CECBC

区块链 金融

为什么企业自主开发软件时,都会使用统一的模块化框架式开发平台?

Learun

敏捷开发 程序设计 开发工具 软件设计 技术方案

【基础架构】不同场景下的数据存储技术,你用对了吗?

嘉为蓝鲸

网络 存储 系统 raid 磁盘挂载

LeetCode题解:225. 用队列实现栈,两个队列, 压入 - O(n), 弹出 - O(1),JavaScript,详细注释

Lee Chen

大前端 LeetCode

Spring 5 中文解析测试篇-Spring测试

青年IT男

Spring5 JUnit

用 Python 实现一个简易版的 Pong 游戏 (一)

Matrix Chan

Python Turtle Python游戏

快来看看!AQS 和 CountDownLatch 有怎么样的关系?

程序员小航

Java AQS 源码阅读 CountDownLatch JUC

学习 Java,有什么书籍推荐?学习的方法和过程是怎样的?

沉默王二

Java 学习 程序员 书单

握草,你竟然在代码里下毒!

小傅哥

Java 程序员 小傅哥 bug 有毒代码

给DevOps加点料——融入安全性的DevSecOps

禅道项目管理

DevOps 运维 测试 开发 安全性

Golang Package sync 透析

卓丁

sync Go 语言

[翻译] Go Concurrency Patterns: Pipelines and cancellation[Go并发模式]

卓丁

channel pipeline

你问我答:容器平台改造后的安全是如何解决的?

BoCloud博云

云计算 容器 微服务 PaaS 博云

大数据管理:构建数据自己的“独门独院”

华为云开发者联盟

大数据 数据湖

ARTS打卡 第15周

引花眠

微服务 ARTS 打卡计划

有奖征文重磅来袭,来!一起玩把大的!

有只小耳朵

实战解读丨Linux下实现高并发socket最大连接数的配置方法

华为云开发者联盟

Linux TCP socket 高并发

云图说 | 一分钟带你扫盲云容器黑话

华为云开发者联盟

容器 节点 集群

Docker私有化部署gitlab gitlab-runner

Leon

gitlab 持续集成 runner

DB-Engines 9月数据库排名:ClickHouse一路猛冲,Redis坐稳第七

华章IT

MySQL 数据库 redis Clickhouse

oeasy教您玩转linux010206 蒸汽机车 sl

o

Redis 数据同步机制--主从模式

是老郭啊

redis 主从配置 主从同步 redis主从 主从复制

又踩Maven的两个坑

xiaoboey

maven Unknown lifecycle phase settings.xml 无效 PowerShell

不支持原子性的 Redis 事务也叫事务吗?

大头星

Java redis 事务

3. 站在使用层面,Bean Validation这些标准接口你需要烂熟于胸

YourBatman

Hibernate-Validator Bean Validation 数据校验

或许是史上最好的AQS源码分析了,你确定要错过?!

InfoQ_d2212957090d

一个银行客户经理的“变形记”

华为云开发者联盟

人工智能 金融科技

浅析LR.Net工作流引擎

Philips

敏捷开发 工作流 软件开发流程 开发工具

XSKY全新一代SDS一体机五大场景之存储+灾备

XSKY融合存储

北京城市副中心将试点法定数字货币

CECBC

数字货币 货币

首届腾讯云大数据峰会暨Techo TVP开发者峰会

首届腾讯云大数据峰会暨Techo TVP开发者峰会

构建Facebook Live直播流中的挑战_云计算_Jan Stenberg_InfoQ精选文章