FFmpeg直播能力更新计划与新版本发布

  //  

编者按:客户端作为直接面向用户大众的接口,随着技术的发展进化与时俱进,实现更好的服务是十分必要的。FFmpeg作为最受欢迎的视频和图像处理开源软件,被相关行业的大量用户青睐,而随着HEVC标准的发布到广泛使用,相信国内很多网络流媒体从业者都在长期关注FFmpeg FLV支持HEVC的官方更新。LiveVideoStackCon 2023 上海站邀请了来自快手的音视频首席架构师刘歧,为大家带来他关于FFmpeg 直播能力的更新计划。

文/刘歧

整理/LiveVideoStack

大家好,下面由我和大家分享近期FFmpeg的最新技术、部分未来的发展方向以及一些我个人的经验思考。

5a12ff6bf8c3ba4028592164555eb137.png

首先向大家做一个自我介绍,本人浸淫音视频行业多年,目前是FFmpeg/SRS社区委员会的成员,曾参与编写《FFmpeg 从入门到精通》一书,也是腾讯云最具价值专家TVP。

我于2007年参加工作,早期曾从事图形图像库、Flash解析引擎开发工作。2011年我正式参与音视频流媒体技术开发。2016年受邀成为FFmpeg维护者。2017年成为FFmpeg官方顾问,创业成立了OnVideo。2019年成为FFmpeg决策委员会委员,并开始担任FFmpeg GSoC Mentor。2020年,OnVideo被快手收购,我也随之进入快手工作。

6493f5f439a620d9062b739e12775622.png

接下来简单介绍我做出本次分享的契机。

首先,FFmpeg FFplay的官方版本目前仍然无法实现FLV对封装HEVC、VVC、VP9、AV1、OPUS等现代化编码格式的支持,随着音视频技术的发展,FLV需要随之改变。

第二,业界有声音提出重视HLS、DASH、LLHLS、LLDASH等协议。但目前看来,这些协议的实时性还很差。在CDN分发过程中,链路稍有卡顿就很容易影响广域用户的观看体验。

第三是WebRTC等低延迟协议对当前大规模使用的RTMP、FLV发出了挑战。

8244d102ef91eb180f4703ef4f25e95f.png

基于前述的问题和我们开展的工作,本次分享分为以下四部分:一是介绍FFmpeg支持Enhanced FLV的有关情况;二是介绍FFmpeg支持WHIP的进展;最后是关于未来一些更多有趣的事情。

-01-

FFmpeg支持Enhanced FLV

4598fbe93c1a10ea9a0c0d5caf6c4ae8.png

首先,从官方标准来看,目前FLV的视频Codec ID不包括HEVC,但现有Codec ID可从8拓展到15。

3f1801d37879469f5968b1a95a9fc5a3.png

目前国内一些大厂出于业务需要会拓展官方标准。例如上图,其中视频codec ID增加了12对应的HEVC。但这种方式不适用同时引入多个编码格式,且各企业、厂商对codec ID不同的自定义风格容易导致公共环境混乱。

fbe59750557cbd45fb9c370a0569df5a.png

官方标准内音频编码的定义已经被占满,引入OPUS等新格式的难度较大。

92d34273146f66034126864ec263c6e0.png

我也曾进行过类似尝试,于2014年向FFmpeg team提交了关于FLV支持HEVC编码格式的补丁,但由于没有可供参考的公认标准遭到了反对,实际上该版本也无法播放泛式的FLV视频。

55b9b25f98cabf57280d856de224e808.png

2021年,一位活跃的开发者James Almer做了同样的工作,但由于相同的问题最终未能实现合并。

18d1b5027047924d73064ecb7c14e8a8.png

SRS作为国内主要的CDN服务供应端,早期已经实现了对HEVC编码的支持,并曾向FFmpeg team发出了相关呼吁。可以看到,很多音视频从业者都曾为HEVC over HTTP-FLV的官方化做出努力。

d5c65741cfe2e95fa06f0a46bb0f9d66.png

后来我们意识到,推动Adobe修订现有参考标准才是关键。于是在接下来一段时间里,我们与Adobe的相关人员积极沟通,询问关于参考标准的修订计划。虽然得到了积极回复,但一直没有实质性的进展。

153cd89de33d94ca51110b1688ccea86.png

期间我们也对可用在直播场景的其他网络协议进行了检讨。但目前看来,HLS、DASH、HDS的延迟远大于RTMP/FLV。LLHLS、LLDASH仅在技术上有优于RTMP/FLV的可能,经过实际测试效果并不好。SRT的延迟足够低,但在PC、手机端等多平台的可用性还有不足。

e8187b62d7d0e09696f7b9a3525b4201.png

为了加快实现我们的目标,经过查访,我们与RTMP、FLV的实际维护方,Adobe旗下的Veriskope建立了联系。

f6999f283fd38fcbff0aebc9f0e1bbd5.png

与此同时,从更好地兼容现状这一角度出发。在和Veriskope沟通前,我们利用FourCC代码完成了Enhanced FLV方案。该方案解决了仅依靠修改视频Codec ID可拓展的编码格式数量有限这一缺陷,可实现无限制数量的拓展。

ab3ca703d9e896e0f934b970543fa668.png

相较于传统参考标准,我们针对FrameType增加了拓展模式,以定义对应的读包方式和编码格式。

a852c08b8091e300bf7124e29c6e49f0.png

针对不同FourCC值指向的编码格式,可以对其HVCC和VPCC进行拓展读取。

921f2de0306a19aadf29927b5bb0d9ef.png

在我们向FFmpeg team提交Enhanced FLV补丁的过程中,有videoline的开发者提出疑问:在拓展RTMP时如何明确服务端支持的编码格式。

我们查找了Enhanced RTMP标准,发现只要在conncet command内加入FourCClist即可解决这个问题。

68db7db933aaf30185d30addceb1a915.png

开发完成后,我使用RTMP通过Youtube测试了AV1推流。但发现无论推流何种格式,最终得到的都是VP9格式的流。针对该现象目前我还在等待Youtube开发者的回复解释。

fb343f80f4db5dae28dc266e2bb3d85e.png

相较于HLS和DASH,RTMP/FLV的延迟虽然较低,但链路质量变化或推流抖动等因素同样会引起播放的卡顿和延迟累加,因此我们考虑引入WebRTC进行推流。

-02-

FFmpeg支持WHIP

4f05bf5bf731878d9107df280406370c.png

FFmpeg 支持WHIP这一项目的诞生起于SRS作者杨成立的倡导。当时,现场演示端到端普通推流的延迟仅有500毫秒,可以推定,引入WebRTC是十分可行的。

f6347a24f95fa7dbd158de69a4634927.png

WHIP易于实施。为了建立推流会话,WHIP客户端将向WHIP终端发送包括SDP Offer的HTTP POST请求,返回“201 Created”响应,建立一个SDP。随后WHIP客户端和媒体服务器之间建立ICE/DTLS会话,通过RTP/RTCP开始视频、音频流传输。推流结束后,执行HTTP DELETE请求即可结束ICE/DTLS会话,整个过程只需要实现如上所示的四个简单标准。

47a8ca47ea2e69a4a60086da5aa6bff7.png

我在2023年5月发布了第一版补丁,具体的代码大家可以在Github上找到,Cloudflare的工程师首先响应宣布了支持。

e27a39526cb5b3a48a3de9191e28cbe1.png

Pion随后也反馈宣布支持。

7ab1a62879f760e1139f6a706043e475.png

经过测试,我们发现Janus、Millicast、TRTC等开源服务器均可支持。目前FFmpeg WebRTC可以直接对接这些服务器进行推流。

1d19626576eab4c24706d9ccffdfa410.png

使用WebRTC从采集、推流到播放的延迟经实测约为132毫秒。

4a26f76dd5bd0e897e33bae430657d15.png

但引入WebRTC也带来了一些风险。首先是有可能导致五花八门的网络传输优化算法泛滥,其次是大幅增加了代码量,提高了维护的难度。

-03-

更多有趣的事情

791ffa4b01835999211fc69d5e0c548d.png

最后和大家分享一些有趣的事情。首先是关于FFmpeg,6.1准备发布了,当然也可能会跳过。主要的操作包含实现了Muxer和Demuxer的拆分,实现了format和commandline层的多线程支持,相较于历史版本单线程处理DASH、HLS、MXF等大数据量音视频封装的方式进一步提升了速度;scale支持切slice多线程处理,缩放、色彩转换的性能得到大幅提升;支持了VVC解码;支持了软件无线电(Software Defined Radio),可以收听一些广播节目;支持了Enhanced FLV和Enhanced RTMP。

然后,我同其他作者共同编写了《深入理解FFmpeg》一书,此次在介绍FFmpeg基本组成的基础上进一步结合实例讲解了API的使用,目前已经全渠道开售了,大家可以在京东、当当、淘宝买到。

2ceeeffcd54750bb74900c3eaa7e1913.png

我本次的分享就到这里,谢谢大家!


f56a8af95dff0fc12f6c0ab1d0283dce.png

▼点击下方阅读原文 ▼

进入LiveVideoStackCon 2023深圳站官网 了解更多精彩演讲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/117322.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot整合Mybatis-plus

MyBatis-Plus与MyBatis区别&#xff1a; 导入坐标不同数据层实现简化 1.创建项目 2.选择依赖 3.pom文件 说明&#xff1a;配置pom.xml文件 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>&…

DB-GPT介绍

DB-GPT介绍 引言DB-GPT项目简介DB-GPT架构关键特性私域问答&数据处理多数据源&可视化自动化微调Multi-Agents&Plugins多模型支持与管理隐私安全支持数据源 子模块DB-GPT-Hub微调参考文献 引言 随着数据量的不断增长和数据分析的需求日益增多&#xff0c;将自然语言…

P9831 [ICPC2020 Shanghai R] Gitignore

P9831 [ICPC2020 Shanghai R] Gitignore - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 只看题意翻译这道题是做不出来的&#xff0c;还要去看英文里面的规定&#xff08;这里就不放英文了&#xff09;&#xff0c;主要问题是不要公用子文件夹。 例如: 1 / a / 2 2 / a / 3…

Java Jar 包还不知道怎么反编译,赶紧看看这个 IDEA 插件!

前言 当我们使用 Java 开发时&#xff0c;经常会遇到一种情况&#xff1a;我们拿到了一个 JAR 文件&#xff0c;但是却没有源代码。这时候&#xff0c;我们就需要使用反编译工具来帮助我们还原出源代码。 反编译工具可以将编译后的 JAR 文件转换回可读的 Java 源代码。这样&a…

Mysql库操作

一&#xff1a;库的操作 1&#xff1a;创建数据库 mysql> create database test1; Query OK, 1 row affected (0.00 sec)mysql> create database test2 charsetutf8;create database test2 character utf8;Query OK, 1 row affected (0.00 sec)mysql> create databa…

差生文具多之(一)eBPF

前言 在问题排查过程中, 通常包含: 整体观测, 数据采集, 数据分析这几个阶段. 对于简单问题的排查, 可以跳过前两个步骤, 无需额外收集数据, 直接通过分析日志中的关键信息就可以定位根因; 而对于复杂问题的排查, 为了对应用的行为有更完整的了解, 可以通过以下形式收集更多的…

掌握Maven和SpringBoot的灵活性:定制化lib目录和依赖范围

前言 在开发基于Maven和SpringBoot的项目时&#xff0c;我们经常会使用第三方库来满足需求。然而&#xff0c;有时候我们需要更灵活地控制这些库的依赖范围和加载方式。本文将介绍如何使用Maven和SpringBoot实现定制化的lib目录和依赖范围。经过如下定制化后&#xff0c;打包执…

【算法 | 哈希表 No.2】leetcode 219. 存在重复元素II

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

JVM类的声明周期

文章目录 版权声明生命周期概述加载阶段查看内存中的对象 连接阶段连接阶段之验证连接阶段之准备连接阶段之解析 初始化阶段练习题目一练习题目二练习题目三练习题目四 使用阶段卸载阶段总结 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明…

Microsoft Edge不能工作了,可能原因不少,那么如何修复呢

Microsoft Edge打不开或不能加载网页是用户在Windows 10、Android、Mac和iOS设备上的网络浏览器上遇到的许多错误之一。其他Microsoft Edge问题可能包括浏览器窗口和选项卡冻结、网站崩溃、互联网连接错误消息以及丢失Microsoft Edge书签、收藏夹、密码和收藏。 Microsoft Edg…

【安全】Java幂等性校验解决重复点击(6种实现方式)

目录 一、简介1.1 什么是幂等&#xff1f;1.2 为什么需要幂等性&#xff1f;1.3 接口超时&#xff0c;应该如何处理&#xff1f;1.4 幂等性对系统的影响 二、Restful API 接口的幂等性三、实现方式3.1 数据库层面&#xff0c;主键/唯一索引冲突3.2 数据库层面&#xff0c;乐观锁…

学习Opencv(蝴蝶书/C++)相关——1. 前言 和 第1章.概述

文章目录 1. 整体架构1.1 OpenCV3.01.2 Opencv4.xX. 在线文档X.1 Opencv cheatsheet(小抄)1. 整体架构 1.1 OpenCV3.0 对于Opencv3.x版本,网上最常见的图,图自OpenCV Tutorial-Itseez 现在已经不是500+的算法了,而是2500+,详见:About

STM32G030F6P6 芯片实验 (二)

STM32G030F6P6 芯片实验 (二) Hello World - GPIO LED 尝试了下, 从 0 开始建 MDK HAL M0plus Project, 成功点亮 LED了。 但是 ST-LINK跑着跑着, 码飞了! 不知飞哪去了。 只好拿 MX 建了个 MDK Base。 呼叫 SysTick HAL_Delay(), 切换 LED。 基本上都是一样的用法, 只是换…

ICCV2023 Tracking paper汇总(一)(多目标跟随、单目标跟随等)

一、PVT: A Simple End-to-End Latency-Aware Visual Tracking Framework paper&#xff1a; https://openaccess.thecvf.com/content/ICCV2023/papers/Li_PVT_A_Simple_End-to-End_Latency-Aware_Visual_Tracking_Framework_ICCV_2023_paper.pdf github&#xff1a; https://…

java EE 进阶

java EE 主要是学框架(框架的使用,框架的原理) 框架可以说是实现了部分功能的半成品,还没装修的毛坯房,然后我们再自己打造成自己喜欢的成品 这里学习四个框架 : Spring ,Spring Boot, Spring MVC, Mybatis JavaEE 一定要多练习,才能学好 Maven 目前我们主要用的两个功能: …

图像新型拼接

道路摄像头拼接 拼接道路上的摄像头&#xff0c;比较麻烦&#xff0c;如图所示 前后的摄像头都是如此&#xff0c;那么如何拼接摄像头画面呢&#xff0c;像下面这样拼接 测试代码 测试一下代码&#xff0c;使用python import cv2 import numpy as npimg cv2.imread("…

antv/g6之交互模式mode

什么是mode 在 AntV G6 中&#xff0c;“mode” 是用于配置图表交互模式的一种属性。通过设置 “mode”&#xff0c;可以控制图表的行为&#xff0c;以满足不同的交互需求。可能在不同的场景需要展现的交互行为不一样。比如查看模式下点击一个点就选中的状态&#xff0c;在编辑…

数据可视化:折线图

1.初看效果 &#xff08;1&#xff09;效果一 &#xff08;2&#xff09;数据来源 2.JSON数据格式 其实JSON数据在JAVA后期的学习过程中我已经是很了解了&#xff0c;基本上后端服务器和前端交互数据大多是采用JSON字符串的形式 &#xff08;1&#xff09;JSON的作用 &#…

本地idea远程调试服务器程序

本文主要介绍idea本地调试远程服务器程序的方式。相信很多同行跟我一样&#xff0c;在最初接触公司项目的时候&#xff0c;遇到测试提出的缺陷&#xff0c;往往会在本地进行调试、替换jar包远程调试等方式&#xff0c;本地调试往往会导致数据和环境不一致的问题使得问题无法复现…

没想到这么齐全!这份 Python 实战干货yyds

今天我分享一些Python学习神器资料&#xff0c;有需要的小伙文末自行免费领取。 1.200Python练手案例&#xff1a; 2.Python全套视频教程等&#xff1a; 3.浙大Python学习套装&#xff1a; * 4.Python实战案例&#xff1a; 5.Pandas学习大礼包 6.学习手册大礼包 Python知识…