音视频直播核心技术介绍
直播流程
采集:
是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,比如 iOS、Android、Mac、Windows 等。
前处理:
主要就是美颜美型技术,以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。
编码:
就是音视频数据的压缩,便于传输,一般有软编码和硬编码,软编码有 x264、x265、openh264等,硬编码有 iOS 的 VideoToolBox、Android 的 mediacodec,Windows 的QSV 和NVIDIA等等。
推流:
就是数据传输从主播端到服务端的过程,推流需要不同的网络协议支持,如 RTMP 等。
转码:
为了让采集端的流适配各个平台端不同协议,一般都会在服务端进行转码处理,将视频文件转成不同格式,支持 RTMP、HLS 和 FLV 等不同的协议。
分发:
应对视频应用的高并发需求,采用 CDN(Content Delivery Network,即内容分发网络) 进行内容分发加速,实现高并发等能力。
拉流与解码:
拉流即使视频数据从服务端到观众端的过程,解码就是渲染播放,让观众看到主播的视频画面。
直播卡顿
一般造成直播卡顿的原因主要有设备、视频流、网络三个方向。
方向 | 原因 |
---|---|
设备 | 设备硬件配置太差、播放器问题等 |
视频流 | 时间戳问题、编码参数、编码码率等 |
网络 | 推流端网络太差、播放端网络太差、服务端传输压力过大等 |
直播延迟
延迟主要指推流端到拉流端的时间差,在音视频生产消费过程中,在不同阶段都会产生延迟,如下表所示。
分类 | 产生原因 |
---|---|
设备端上延迟 | 采集、前处理、编码、解码、渲染播放都可能产生延迟 |
设备端与服务端之间的延迟 | 推流端到服务端的延迟,服务端到拉流端的延迟 |
服务端与服务端之间的延迟 | 服务端的数据传输、数据排队、数据的处理等延迟 |
阿里云技术介绍一片直播延迟的源头,如下图:
声网技术介绍了直播延迟的不同程度所适应的应用场景,如下图:
视频分辨率
分辨率是用于度量图像内数据量多少的一个参数,通常表示成ppi。一般直观表现出视频的画面细腻程度。常见的分辨率如下表。
首屏秒开
首屏耗时,指第一次点播播放后,肉眼看到画面所等待的时间。技术上指播放器解码第一帧渲染显示画面所花的耗时。通常所说的“秒开”,指点击播放后,一秒内即可以看到播放画面。首屏打开越快,说明用户体验越好。首屏耗时原因主要有DNS 解析、缓存获取首帧内容
、网络延迟
、播放器缓存策略
等。
直播花屏与绿屏
花屏与绿屏由不同原因造成的,主要如下脑图罗列。
视频直播的痛点
观看视频直播最大的痛点主要包括:卡顿
、模糊
、延迟
、内容
等。
流媒体
流媒体是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网络上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送,因此称为流媒体。
如果不使用此技术,就必须在使用前下载整个媒体文件。流媒体的本质上是原始画面,经过视频采集设备,然后通过编码器编码压缩,生成点播文件或者直播流,经过网络的传输,在各种终端进行解压解码,然后播放器进行画面渲染,最终展示在用户眼前。
流媒体可以分为点播和直播。
直播与点播
直播是有实时性的要求,直播的数据都是存在内存中,过时的数据会被丢掉。视频直播,一定是一个**“边生产,边传输,边消费”**的过程.
如果需要持久化的视频数据,就必须对直播流进行录制,转化为视频文件保存起来,这样就可以转化为点播的内容。
点播的内容源是静态的,直播的数据源是动态的。
实现点播需要解决视频转码
和流媒体下载
两个问题;而实现直播本质需要解决视频数据编解码
和视频数据网络传输
两个问题。
直播与RTC
RTC的一个具体应用是直播场景中的直播连麦(或PK),也就是低延时直播。普通直播,一般采用TCP协议(RTMP),使用CDN进行内容分发,会有几秒甚至十几秒的延时,主播和观众的互动只能通过文字短消息或送礼来进行。
而直播连麦,使用UDP协议(QUIC),内容实时传输,主播和观众可以进行音视频连麦互动,实时沟通,延时一般低至几百毫秒。
因此直播和 RTC 最大的区别主要体现再协议的使用以及音视频处理技术策略等。
项目 | RTMP | RTP/RTCP |
---|---|---|
传输协议 | TCP | UDP |
延迟程度 | 高 | 低 |
使用场景 | 普通直播 | RTC/连麦直播 |
相关文章:

音视频直播核心技术介绍
直播流程 采集: 是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,比如 iOS、Android、Mac、Windows 等。 前处理:主要就是美颜美型技术,以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。 编码&#…...

JNDI注入Log4jFastJson白盒审计不回显处理
目录 0x00 前言 0x01 Maven 仓库及配置 0x02 JNDI 注入简介 0x03 Java-第三方组件-Log4J&JNDI 0x04 Java-第三方组件-FastJson&反射 0x05 白盒审计 - FastJson 0x06 白盒审计 - Log4j 0x07 不回显的处理方法 0x00 前言 希望和各位大佬一起学习,如果…...
FPGA实现腐蚀和膨胀算法verilog设计及仿真 加报告
要在FPGA上实现腐蚀和膨胀算法,你可以按照以下步骤进行: 图像存储:首先,你需要设计一个图像存储器来存储待处理的图像数据。这可以采用FPGA内部存储器或外部存储器。 读取图像数据:使用适当的接口从图像存储器中读取图像数据,并将其加载到FPGA的计算单元中。 结构元素定义…...
核和值域的关系:什么是矩阵的秩?
核和值域的关系:什么是矩阵的秩? 这篇博客将介绍一个任意矩阵的核和值域的关系,并由此说明矩阵秩的意义、子空间维数、子空间正交。 1、矩阵的核:N(A) A ∈ C m n A\in C^{m\times n} A∈Cmn,矩阵的核,记…...

【MyBatis Plus】Service Mapper内置接口讲解
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《MyBatis-Plus》。🎯🎯 &am…...

制作一个简单 的maven plugin
流程 首先, 你需要创建一个Maven项目,推荐用idea 创建项目 会自动配置插件 pom.xml文件中添加以下配置: <project> <!-- 项目的基本信息 --> <groupId>com.example</groupId> <artifactId>my-maven-plugi…...

基于linux系统的Tomcat+Mysql+Jdk环境搭建(三)centos7 安装Tomcat
Tomcat下载官网: Apache Tomcat - Which Version Do I Want? JDK下载官网: Java Downloads | Oracle 中国 如果不知道Tomcat的哪个版本应该对应哪个版本的JDK可以打开官网,点击Whitch Version 下滑,有低版本的,如…...
Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤
环境搭建 1.Boost安装 下载Boost源码 : https://www.boost.org/users/download/ 编译安装 首先安装编译所需依赖 sudo apt-get install build-essential g sudo apt-get install installpython-dev autotools-dev sudo apt-get install installlibicu-dev buil…...

maven 项目导入异常问题
问题如下 一、 tomcat正再运行的包是哪一个 不同构建、打包情况下分别运行 out\artifacts下 当直接去Project Structure下去构建artifacts 后,运行tomcat 则会在out下target下 reimport项目后,则会在artifacts自动生成部署包。删除tomcat之前deployment 下的包(同…...

在 VMware 虚拟机上安装黑苹果(Hackintosh):免费 macOS ISO 镜像下载及安装教程
在 VMware 虚拟机上安装黑苹果(Hackintosh):免费 macOS ISO 镜像下载及安装教程 VMware 虚拟机解锁 macOS 安装选项使用 macOS iso 系统镜像安装使用 OpenCore 做引导程序安装 在 VMware 虚拟机上安装黑苹果(Hackintosh):免费 macOS ISO 镜像下载及安装…...

国产ToolLLM的课代表---OpenBMB机构(清华NLP)旗下ToolBench的安装部署与运行(附各种填坑说明)
ToolBench项目可以理解为一个能直接提供训练ToolLLM的平台,该平台同时构建了ToolLLM的一个开源训练指令集。,该项目是OpenBMB机构(面壁智能与清华NLP联合成立)旗下的一款产品,OpenBMB机构名下还同时拥有另外一款明星产…...
串口通信(5)-C#串口通信数据接收不完整解决方案
本文讲解C#串口通信数据接收不完整解决方案。 目录 一、概述 二、Modbus RTU介绍 三、解决思路 四、实例 一、概述 串口处理接收数据是串口程序编写的关键...
大数据分析岗是干什么的?
大数据分析岗主要负责从大规模数据集中提取、整理、分析和解释有关业务、市场或其他相关领域的信息的职位。 主要的职责和工作内容如下: 1. 数据收集和整理 收集各种数据源(包括结构化、非结构化和半结构化数据),并将其整理成可…...
hadoop运行jar遇到的一个报错
报错信息: 2023-12-19 14:28:25,893 INFO mapreduce.Job: Job job_1702967272525_0001 failed with state FAILED due to: Application application_1702967272525_0001 failed 2 times due to AM Container for appattempt_1702967272525_0001_000002 exited with…...

长短期记忆(LSTM)神经网络-多输入分类
目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分程序: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…...

开启创意之旅:免费、开源的噪波贴图(noise texture)生成网站——noisecreater.com详细介绍
在当今数字创意领域,噪波贴图(Noise Texture)是游戏渲染、游戏开发、美术设计以及影视制作等行业不可或缺的艺术素材之一。为了满足广大创作者的需求,noisecreater.com应运而生,成为一款免费、开源的噪波贴图生成工具。…...

Android Studio问题解决:Gradle Download 下载超时 Connect reset
文章目录 一、遇到问题二、解决办法 一、遇到问题 Gradle Download下载超时Sync了很多次,一直失败 二、解决办法 手动通过gradle网站下载 https://gradle.org/releases/可能也会出现超时,最好开个VPN软件会比较快。 下载好的软件,放到本机的…...
【Python百宝箱】云上翱翔:Python编程者的AWS奇妙之旅
雲端箴言:用Python主持AWS管理交響樂 前言 随着云计算的普及,AWS(Amazon Web Services)成为了许多组织和开发者首选的云服务提供商。作为Python工程师,深入了解AWS管理工具和库对于高效利用云资源至关重要。本文将引…...

抖音直播间websocket礼物和弹幕消息推送可能出现重复的情况,解决办法
在抖音直播间里,通过websocket收到的礼物消息数据格式如下: {common: {method: WebcastGiftMessage,msgId: 7283420150152942632,roomId: 7283413007005207308,createTime: 1695803662805,isShowMsg: True,describe: 莎***:送给主播 1个入团卡,priority…...

【设计模式--行为型--访问者模式】
设计模式--行为型--访问者模式 访问者模式定义结构案例优缺点使用场景扩展分派动态分派静态分派双分派 访问者模式 定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。 结构 抽象访问者角色&…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...