音视频直播核心技术介绍
直播流程
采集:
是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,比如 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…...

【设计模式--行为型--访问者模式】
设计模式--行为型--访问者模式 访问者模式定义结构案例优缺点使用场景扩展分派动态分派静态分派双分派 访问者模式 定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。 结构 抽象访问者角色&…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...

Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集
目录 一、引言:当爬虫遭遇"地域封锁"二、背景解析:分布式爬虫的两大技术挑战1. 传统Scrapy架构的局限性2. 地域限制的三种典型表现 三、架构设计:Scrapy-Redis 代理池的协同机制1. 分布式架构拓扑图2. 核心组件协同流程 四、技术实…...

Modbus转Ethernet IP深度解析:磨粉设备效率跃升的底层技术密码
在建材矿粉磨系统中,开疆智能Modbus转Ethernet IP网关KJ-EIP-101的应用案例是一个重要的技术革新。这个转换过程涉及到两种主要的通信协议:Modbus和Ethernet IP。Modbus是一种串行通信协议,广泛应用于工业控制系统中。它简单、易于部署和维护…...