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

这篇具有很好参考价值的文章主要介绍了FFmpeg直播能力更新计划与新版本发布。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  //  

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

文/刘歧

整理/LiveVideoStack

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

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

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

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

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

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

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

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

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

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

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

-01-

FFmpeg支持Enhanced FLV

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-02-

FFmpeg支持WHIP

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

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

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

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

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

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

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

Pion随后也反馈宣布支持。

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

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

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

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

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

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

-03-

更多有趣的事情

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

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

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

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

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


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

▼点击下方阅读原文 ▼

进入LiveVideoStackCon 2023深圳站官网 了解更多精彩演讲文章来源地址https://www.toymoban.com/news/detail-742133.html

到了这里,关于FFmpeg直播能力更新计划与新版本发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于新版FFmpeg(FFmpeg 6.1)的音视频复用(不涉及编解码)

    FFmpeg库常用函数介绍(一)-CSDN博客 FFmpeg库常用函数介绍(二)-CSDN博客 FFmpeg库常用函数介绍(三)-CSDN博客 这篇文章介绍的是基于新版FFmpeg(FFmpeg 6.1)的音视频复用器的实现,可以实现音频和视频文件复用为一个视频文件,具体功能如下表所示。 输入视频文件 输入音频文

    2024年01月17日
    浏览(27)
  • FFmpeg/opencv + C++ 实现直播拉流和直播推流(对视频帧进行处理)

    本文主要使用C++ ffmpeg库实现对除去webrtc的视频流进行拉流,而后经过自身的处理,而后通过将处理后的视频帧进行编码,最后进行推流处理。详情请看代码 参考链接: https://blog.csdn.net/weixin_45807901/article/details/129086344 https://blog.csdn.net/T__zxt/article/details/126827167

    2024年02月16日
    浏览(23)
  • 树莓派3B+ /+ CSI摄像头 + FFmpeg + SRS 实现直播推流

    手头有一个树莓派3B+ 和一块CSI摄像头,想要实现一个推拉流直播的效果。 所需材料: 开发板(我用的是树莓派3B+)、CIS摄像头、云服务器(用来搭建SRS服务器) 使用树莓派+CSI摄像头来做画面采集,然后使用FFmpeg推流到SRS云服务器上,然后用户可以拉取SRS服务器上的视频流

    2024年01月22日
    浏览(21)
  • 3种ffmpeg-web端视频直播推流方案

    记录了三种 ffmpeg 工具进行推流的方法,并在web端实现直播效果。 安装node-media-server依赖,新建app.js运行 执行ffmpeg推流 官网下载ffmpeg并配置把bin目录添加到环境变量 ffmpeg -version 查看版本 mpeg -list_devices true -f dshow -i dummy 查看可用以音视频设备 使用本地摄像头推流 使用网络摄像

    2024年01月17日
    浏览(15)
  • OpenCV+FFmpeg 实现人脸检测Rtmp直播推流(Python快速实现)

    windows平台笔记本摄像头视频采集、人脸识别,识别后将视频推流到RTMP流媒体服务器,在任意客户端可以进行RTMP拉流播放。 效果如图: 使用VLC播放器进行拉流。 需要先安装OpenCV的python包以及FFmpeg。 对于ffmpeg有两种调用方式,但这两种方式都需要先安装ffmpeg,调用的具体区别

    2024年02月12日
    浏览(15)
  • 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能

    一、FFmpeg简介。 二、FFmpeg常用参数及命令。 三、FFmpeg在Unity 3D中的使用。 1、FFmpeg 录屏。 2、FFmpeg 推流。 3、FFmpeg 其他功能简述。 对于FFmpeg,其官网上是这样介绍的: FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything th

    2024年02月09日
    浏览(20)
  • 米尔瑞萨RZ/G2L开发板-02 ffmpeg的使用和RTMP直播

    最近不知道是不是熬夜太多,然后记忆力减退了? 因为板子回来以后我就迫不及待的试了一下板子,然后发现板子有SSH,但是并没有ffmpeg,最近总是在玩,然后今天说是把板子还原一下哇,然后把官方的固件刷了进去,然后惊奇的事情发生了,现在板子没有SSH,但是有ffmpe

    2024年02月12日
    浏览(15)
  • FFmpeg开发笔记(五)更新MSYS的密钥环

    ​  《FFmpeg开发实战:从零基础到短视频上线》一书提到:使用MSYS对FFmpeg进行交叉编译时,需要事先安装交叉编译工具链,也就是执行下面命令。 一般情况可以正常安装交叉编译工具链,不过有时会提示错误“signature from \\\"David Macek david.macek.0@gmail.com\\\" is unknown trust”,这是因

    2024年03月16日
    浏览(12)
  • ffmpeg tensorrt c++多拉流硬解码yolov5 yolov7 bytetrack 人流追踪统计 硬件编码推流直播

    ffmpeg拉流硬解码yolov5 bytetrack 人流追踪统计 硬件编码推流直播 编程语言C++,所以环境搭建可能比较复杂,需要有耐心。 CPU:I5 12490F GPU:RTX2060 6GB RAM:16x2 GB双通道 我测试运行可以25路(很极限了),20路比较稳,不会爆显存。 多路编码推流有个问题,就是NVIDIA对消费级显卡编

    2024年02月14日
    浏览(11)
  • uniapp - 微信小程序新版本发布之后用户端怎么更新?updateManager ?

    微信小程序在版本更新后,从上面标题栏进去,发现还是没有更新,存在缓存问题 这就要说到微信小程序更新机制 解决办法--微信提供的wx.getUpdateManager()(我的uniapp)uni.getUpdateManager(),链接:uni.getUpdateManager() | uni-app官网 1)定期检查发现版本更新 微信运行时,会定期检查最近使

    2024年02月06日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包