OBS 源码分析第一篇--踏石留印

作者介绍:况鹰,腾讯android高级工程师,目前主要负责手Q个性化增值及企鹅电竞pc助手业务开发与性能优化,在android和pc端都有丰富的经验,闲暇之余比较爱折腾和研究各种新技术。

在直播如此火热的 2016 年,OBS 作为一名元老级开源组件在主播和开发面前继续展示着它常青的魅力。自己接触其源码小半年,发现国内的分析篇要么篇幅太短文不达意,要么内容太杂枯燥难懂,总是不令人满意。失望之余便想尝试挑战自己的审美观来分析一下这位美人,今天就首先来分析一下美人的个人状态。

1、身世:OBS 的爸爸是 jp9000,自出生起发展截止目前主要分为两个阶段,第一代犹如未成熟的少女尚未绽开,在设计和代码上都存在较多的缺陷,追求者基本来自叫 Windows 的城市。随着工程的膨胀导致后期维护成本变高,jp9000 也不满足其发展,便对其进行了整容重构,工程的线条变得更加明朗婀娜,追求者也多了来自 Mac 和 Linux 的城市,人数直接翻了两倍多,而且在继续增长。

2、皮肤变身:第一版用的是底层 winapi 写的窗口,所以大家会发现皮肤上面有很多痘痘:

基本一个控件一个句柄,第二版由于兼容 Mac 和 Linux,嵌入了全球著名皮肤精华水 QT,像战网、YY、WPS、优酷客户端、Dropbox 等都用的这款牌子,OBS 也紧跟潮流,成为了又一名「形象代言人」。

3、琴棋书画:OBS 之所以吸引人,主要根源于其具备极多的才艺,可以极大的满足大家的视听,我们来尝试梳理一下套路:

  • 琴 - 音频编码:第一代用的 libfaac,第二代迁移到 ffmpeg,录制主要依靠就是 ffmpeg,利用管道跨进程写文件录播;
  • 棋 - 视频编码:软编 x264、硬编 qsv、硬编 nvenc,其中 qsv 主要用的 libmfx,属于 inter 流派,nvenc 顾名思义就是 2016 股民们熟悉的 nvidia 流派,相对于 cudaenc 在h264 编码方面性能更优 ;
  • 书 - 推流:第一代和第二代都用了鼎鼎大名的 rtmp 库,有推流地址和密钥便可以让所有主播上「电视」,斗鱼、熊猫、战旗、B站、全民直播都可以用这种方式推送;
  • 画 - 渲染引擎:第一代只支持 dx,第二代支持分别封装了 dx 和 opengl ,shader 渲染脚本可以共用一份无差使用,语法用的 hlsl,在 opengl 渲染时包装内会转换成 glsl,了解原理后可以非常方便的嵌入各种 effect,可以加入更多的特效。

4、杂耍:第二版由于追求者众多,每个人都想在 OBS 上留下自己的印记,OBS 除了学会了展示窗口、显示器、图片、幻灯片、视频、游戏、文字之外,还可以展示浏览器(基于 cef)、vlc 视频等。在第二版所以这些印记可以方便替代升级,希望你也能鼓足勇气去贡献一把。

第一篇先简单带领大家了解 OBS 美女的「个人情况」,下一篇我将为大家介绍 OBS 的五官构成 - 代码架构组成。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网开发者交流社区

WinForm之窗体应用程序

2053
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

3136
来自专栏张善友的专栏

Using sqlite with .NET

The other day I found that there is a .NET wrapper for sqlite. sqlite is a very ...

2488
来自专栏飞扬的花生

日志帮助类

 1.代码 using System; using System.Collections.Generic; using System.Linq; using S...

2019
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

22010
来自专栏菩提树下的杨过

MSDN官方的ASP.Net异步页面的经典示例代码

示例1.演示异步获取一个网址的内容,处理后显示在OutPut这一Label上 using System; using System.Web; using S...

2125
来自专栏菩提树下的杨过

SqlTransaction事务使用示例

using System; using System.Data; using System.Data.SqlClient; using System.Co...

1988
来自专栏跟着阿笨一起玩NET

C# 通过HttpWebRequest在后台对WebService进行调用

http://www.cnblogs.com/macroxu-1982/archive/2009/12/23/1630415.html

3282
来自专栏跟着阿笨一起玩NET

C#巧用Excel模版变成把Table打印出来

转载:http://blog.csdn.net/gwblue/article/details/38865525

1602
来自专栏码匠的流水账

聊聊EurekaRibbonClientConfiguration

spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframewor...

1421

扫码关注云+社区