《视频直播技术详解》系列之一:开篇[通俗易懂]

《视频直播技术详解》系列之一:开篇[通俗易懂]此系列为七牛云的原创,仅转载备份,以供查看。随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基础设施也正在悄悄发生变革。手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域的关注,吸引了很多互联网创业者或者成熟企业进入该领域。七牛云作为一家以基础服务能力见长的云计算公司,于6月底发布了一个针对视频直播的实时流网络LiveNet和完整的直播云解决方案,很多

大家好,又见面了,我是你们的朋友全栈君。

此系列为七牛云的原创,仅转载备份,以供查看。

随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基础设施也正在悄悄发生变革。手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域的关注,吸引了很多互联网创业者或者成熟企业进入该领域。

七牛云作为一家以基础服务能力见长的云计算公司,于 6 月底发布了一个针对视频直播的实时流网络 LiveNet 和完整的直播云解决方案,很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣。

结合七牛实时流网络 LiveNet 和直播云解决方案的实践,我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面、深入地了解视频直播技术,更好地技术选型。
本系列文章大纲如下:

(一)开篇

(二)采集和处理

(三)编码和封装

(四)推流和传输

(无)现代播放器原理

(六)延迟优化

(七)SDK 性能测试模型


本文是《解密视频直播技术》系列之一:开篇,我们将从整体介绍直播中的各个环节。1

1.采集

采集是播放环节中的第一环,iOS 系统因为软硬件种类不多,硬件适配性较好,所以比较简单。Android 则不同,市面上硬件机型非常多,难以做到一个库适配所有硬件。PC 端的采集也跟各种摄像头驱动有关,推荐使用目前市面上最好用的 PC 端开源免费软件 OBS。

2.处理

「80% 的主播没有美颜根本没法看。」不光是美颜,很多其它的视频处理如模糊效果、水印等也都是在这个环节做。目前 iOS 端比较知名的是 GPUImage 这个库,提供了丰富端预处理效果,还可以基于这个库自己写算法实现更丰富端效果。Android 也有 GPUImage 这个库的移植,叫做 android-gpuimage。同时,Google 官方开源了一个伟大的库,覆盖了 Android 上面很多多媒体和图形图像相关的处理。

3.编码

编码主要难点有两个:1. 处理硬件兼容性问题。2. 在高 fps、低 bitrate 和音质画质之间找到平衡。iOS 端硬件兼容性较好,可以直接采用硬编。而 Android 的硬编的支持则难得多,需要支持各种硬件机型,推荐使用软编。

4.推流和传输

传输涉及到很多端:从主播端到服务端,从收流服务端到边缘节点,以及再从边缘节点到观众端。
推流端和分发端理论上需要支持的并发用户数应该都是亿级的,不过毕竟产生内容的推流端在少数,和消费内容端播放端不是一个量级,但是他们对推流稳定性和速度的要求比播放端高很多,这涉及到所有播放端能否看到直播,以及直播端质量如何。
很多人吐槽现在的 CDN 不靠谱,我也承认传统的 CDN 在新时代显得心有余力不足。你能够借助 CDN 快速实现大规模的流分发,但是稳定高速的推流上传可能还需要自己做很多工作。因此,我们七牛打造了一个直播专属的实时流网络,接下来我们会重点介绍这个网络和传统 CDN 的差别。

5.转码

为了让主播推上来的流适配各个平台端各种不同协议,需要在服务端做一些流处理工作,比如转码成不同格式支持不同协议如 RTMP、HLS 和 FLV,一路转多路流来适配各种不同的网络状况和不同分辨率的终端设备。
同时,为了配合一些运营需求,比如一些监管部门的要求,我们在服务端也提供了内容识别如鉴黄的功能。

6.解码和渲染

解码和渲染,也即音视频的播放,目前 iOS 端的播放兼容性较好,在延迟可接受的情况下使用 HLS 协议是最好的选择,我们也提供了能够播放 RTMP 和 HLS 的播放器 SDK。Android 的硬件解码和编码一样也存在兼容性问题,目前比较好的开源播放器是基于 ffplay 的 ijkplayer,我们也基于此实现了一个更好的 Android SDK。
除了 SDK 的介绍之外,我们将重点介绍播放器的原理,以及现代视频播放器的基本架构。

7.直播场景化解决方案

除了整个直播流程的介绍之外,我们将围绕当下最火的直播场景如社交直播和游戏直播,介绍它背后的技术方案。这些技术方案不仅涉及到七牛这样的直播基础服务,还可能涉及到和场景相关的其它技术,如社交直播下的聊天、点赞和弹幕的支持。

在下一篇连载中,我们将详细介绍下直播播放环节的前两个环节:采集和处理。

  • 面对市场上各种视频采集源,直播应用开发者应该如何去完整的覆盖?
  • 市场上主播的各种需求如美颜、水印、连麦互动等该怎么去满足?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162858.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月23日 下午9:46
下一篇 2022年7月23日 下午10:00


相关推荐

  • linux tso gso关系,1.3.1 TSO/GSO

    linux tso gso关系,1.3.1 TSO/GSO1 3 1TSO GSOTSO 是通过网络设备进行 TCP 段的分割 从而来提高网络性能的一种技术 较大的数据包 超过标准 1518B 的帧 可以使用该技术 使操作系统减少必须处理的数据数量以提高性能 通常 当请求大量数据时 TCP 发送方必须将数据拆分为 MSS 大小的数据块 然后进一步将其封装为数据包形式 以便最终可以在网络中进行传输 而当启用了 TSO 技术之后 TCP 发送方可以将数据拆分为 MSS 整数倍大小

    2026年3月17日
    2
  • python怎么安装pymysql_Python 之 PyMySQL 安装和使用

    python怎么安装pymysql_Python 之 PyMySQL 安装和使用Python 具有内置的 SQLite 支持 在本节中 我们将学习使用 MySQL 的相关概念和知识 在早期 Python 版本一般都使用 MySQLdb 模块 但这个 MySQL 的流行接口与 Python3 不兼容 因此 在教程中将使用 PyMySQL 模块 1 什么是 PyMySQL PyMySQL 是从 Python 连接到 MySQL 数据库服务器的接口 它实现了 Python 数据库 APIv2 0 并包含一个纯 Pytho

    2026年3月19日
    2
  • n8n-mcp与LangChain节点集成:构建AI增强型工作流的高级技巧

    n8n-mcp与LangChain节点集成:构建AI增强型工作流的高级技巧

    2026年3月15日
    3
  • 抽象工厂模式与工厂方法模式有哪些不同_抽象工厂模式java代码

    抽象工厂模式与工厂方法模式有哪些不同_抽象工厂模式java代码Abstract Factory动机实例模式定义结构要点总结笔记动机在软件系统中,经常面临着”一系列相互依赖的对象“的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作如果应对这种变换?如何绕过常规的对象创建方法(new),提供一种”封装机制“来避免客户程序和这种”多系列具体对象创建工作“的紧耦合?实例数据库连接的时候会有很多关联的对象,这些对象是一个整体朴素class EmployeeDAO{public: vector<EmployeeDAO> GetEm

    2022年8月11日
    5
  • 使用idea创建web项目

    使用idea创建web项目前言 很高兴能够用自己所学知识为你提供答疑 今天我就来操作下如何使用 idea 这款软件创建 web 项目 步骤 1 创建项目首先新建一个项目然后选择最后一个 创建一个空白的 Java 项目 点击 Next 这个时候给项目命名 我在这里命名为 java web 下面那个可以更改项目存放的路径 我这里放到自定的路径 点击 Finish 刚进来的时候 idea 会提醒你是否新建一个模块 先点击 一会我们再创建模块 2 配置 jdk 这个时候 我们先来配置 jdk 的路径 以及 tomcat 的路径 方便之后

    2026年3月27日
    7
  • Java中static的作用详解_Java中static变量作用和用法详解

    Java中static的作用详解_Java中static变量作用和用法详解Java中static变量作用和用法详解发布于2020-7-23|复制链接Java中被static修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问.下面我们来详细了解一下吧前言static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Jav…

    2022年7月15日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号