欢迎光临散文网 会员登陆 & 注册

【吐槽向】为什么不推荐采用恒定质量模式进行直播推流

2021-11-04 22:44 作者:XSky晓天  | 我要投稿

观前提示:本文前半部分为干货,后半部分可能有言辞较为激烈的内容,请酌情观看。发现不适请关闭浏览器。


    本来是想仔仔细细好好诠释一下直播推流的目标和技术细节到底是什么。后来随着群友的讨论,以及陆续思考了一天,我实在觉得这东西根本没有那么多值得分析的。完完全全就是被错误的思路带歪了,分析那么多就是在浪费宝贵的时间。所以把之前已经写的废话截个图放到下面,想看就看看不想看跳过,然后直接简单粗暴把结论说出来。

防止峰值码率爆炸,影响用户体验。

    以下是之前写的废话,不想看可以跳过。

说了一堆废话试图保持客气和随和
又说了一堆大家都懂的废话

    至于用什么编码器,CPU占用不大比如不播游戏就直接x264(PC),占用偏大直接NVENC或者你的其他硬件编码器。甚至硬解优先度 >> CPU编码。我认为这也不用解释,谁卡顿,谁心里清楚。

    然后如果你非要用其他模式推流显得自己与众不同,想要不爆炸就把你用的编码器最大码率限制打开。比如nvenc就是max-bitrate,x264就是maxrate+bufsize。我这篇文章当然不会教你怎么调,而且我甚至会告诉你这种maxrate的峰值码率限制方式对于直播这种场景复杂度快速变化很可能限不住,这里不用我解释峰值码率过大直接丢包卡画面了吧?

    而且,举个已知例子就是采用vbr这种动态码率分配的会在码率快速增大的时候极易出色块。不信自己试试。

    所以,结论其实很简单。既然全世界(对,不止中国大陆)所有直播平台都推荐甚至强制采用CBR模式,哪怕CBR有的时候会「浪费」CDN宝贵的带宽,所以结论很简单:

只要你是直播推流,就推CBR,最简单粗暴效果反而会好。

对,OBS设置-输出-输出模式:简单

我自己就这么播的 默认就是cbr

    顺便一提,这一条明明白白的写在Nvidia官方的推流指南上,建议类似堡垒之夜的游戏走1600 x 900 60 fps 播。网址我也给大家放在这里:

https://www.nvidia.cn/geforce/guides/broadcasting-guide/

    这个网址其实还给出很多实用的建议,比如上行带宽有限的情况下,至少留 25% 的带宽用于其他应用;比如大家更容易注意到帧率降低而不是分辨率,所以推流码率超过 6 Mbps 就应该开 60 帧。这篇文章甚至也说了我强调的问题,照顾手机用户适当降低带宽。


NV官方建议的推流码率


    所以其实建议到现在,相当于没说,因为就是大家一直在用并且相安无事的东西。平时抱怨最多的糊了或者不糊无非就是码率给多给少的事。而开了过高的码率导致卡顿,我作为观众也经历过很多次了。纠结这些设置最立竿见影的办法就是把码率调合适。

    还有不懂的,给大家推荐几篇我写这篇文章的时候参考的分析:

    Using the right ‘Rate Control’ in OBS for streaming or recording

    https://blog.mobcrush.com/using-the-right-rate-control-in-obs-for-streaming-or-recording-4737e22895ed

    Understanding Rate Control Modes (x264, x265, vpx)

    https://slhck.info/video/2017/03/01/rate-control.html

    https://zhuanlan.zhihu.com/p/250585488(中文翻译)

    NVEncC 选项列表

    https://github.com/rigaya/NVEnc/blob/master/NVEncC_Options.zh-cn.md

    Video buffering verifier - Wikipedia

    https://en.wikipedia.org/wiki/Video_buffering_verifier

    [x264-devel] Making sense out of x264 rate control methods

    https://mailman.videolan.org/pipermail/x264-devel/2010-February/006944.html

    How can I use CRF encoding with nvenc in ffmpeg?

    https://superuser.com/questions/1236275/how-can-i-use-crf-encoding-with-nvenc-in-ffmpeg

   

   最后,就是在前面写x264参数分析这篇文章的时候说到的,这些编码器,任何参数如果你不熟悉,最好的方式就是别去动他,保持默认。出来的效果往往是比你瞎折腾还要好。


(正文部分结束,情绪输出开始,不想看的抓紧关闭浏览器)   

     谈点题外话吧。

    有一个道理,我想不单单是图形学或者计算机科学,可能对于任何事情都是适用的。那就是一件被普遍推荐、执行的措施,一定是有存在的道理的,绝不仅仅是所谓的惯性或者惰性。

    不要天天被成功学洗脑感觉自己多么与众不同想改变世界。能做到改变的人,至少会对事情有更清醒的认识和更理性的分析。

    我们就借着两篇文章的原文说。

    


(1)码率选择模式再谈

    用目标质量模式当然效果会比限制死码率来得好。该省的地方码率省下来,多的地方也不会欠码。只要你不限制,100 Mbps 都能达到,谁都知道他好。问题在于,你的目的是推流啊。都不说手机端的观众了,哪怕推流端,就算国内家宽提速了,上行有几个过 100 Mbps 的?连G管入户上行能给 100 Mbps 都算福利了。就算过 100 Mbps,稳定吗?跑推流跑得满吗?不然我们就做个调查,实际推流速度真不见得能达到号称峰值的 30 Mbps。我在各种最吃上行的PT群听到吐槽可是不少的。而且真正推流的决定因素可不止是你的连接性,叔叔的CDN还不一定稳呢,我天天在录播群看吐槽某某CDN动不动断线。配合省带宽的P2P加速,画面已经太美了。所以啊,考虑考虑你的观众,也考虑考虑你自己。

    真的不要用传统压制的思路去看待实时编码的推流。解释在我最前面发的图2里。场景是完全不一样的!!!


(2)为什么不推荐X264直接编码推流

    用x264低码率显然效果比nvenc效果来得好。这也是nonsense。你咋不看看CPU占用有多高。不玩游戏还好,你开个大型游戏试试,欧卡2都能卡。


    你别跟我说你的解释就是《去双机推流啊》、《你看哪个现在卖2000块的CPU带不动》。这就跟为啥游戏不直接照着3090最低配置做,然后就不用费劲优化了一样。顺便提醒一下,换U大概率意味着换平台换主板,甚至还要加上换散热、换电源。还是那句话,这不是常规方案和常规需求。

    但最关键的就是,当码率提高的时候,硬件编码器跟x264的肉眼的观感差异没有那么高。

    

(3)yuv模式选择 

  然后说回yuv的选择问题(i.e. 420还是444)首先就用这篇文章一直举的WoT的例子:红字在420下发生模糊,证明应该444而不是420。

    本身超过1440p的分辨率,那个字会有多小我也不用多解释。某多年的资深草船玩家直接告诉我,WoT那玩意儿本体优化就烂。还举了MC的例子,甚至我肉眼都看不太出来。为了这点优化,牺牲大量体积和兼容性,至少我认为没什么价值。

    那么这就完事了吗?不,在我们纠结444和420的同时,这篇专栏里原本引用的雯壕的话其实都说了:

    「目前大部分源成品就是420,重编码444是完全没有意义的。只会反而引入损失。」

    除非你就是硬盘太大,喜欢极致画质,才在纯录屏考虑yuv444。推流,没有意义,得不偿失。

    这里的经验就是尊重现有规范和标准。


(4)推流更好的编码、HDR

    我倒是支持采用高级编码,这是比上面所有优化都立竿见影的提升中低码率画质的方法。目前的AV1也好、还是HEVC都不错,但还是老话,还是兼容性。这里真不是移动端。就HEVC来说,主流移动设备硬解一点问题都没有。但PC因为浏览器的授权卡着就是不行。哪怕现在有基于WebAssembly的软解HEVC方案,也难以根本上解决这个问题。因此对新一代编码的期待其实就是如何提高普及度和降低专利壁垒的影响

    但HDR显示器的表现不用多解释,按标准来说至少HDR500标准以上才有较为显著的效果。那成本,呵呵。目前来看我对短期HDR内容并不抱太高预期。普及度还不如HEVC呢。


(5)为什么这么多年没有一个人把CRF应用到直播领域呢?我是开拓者啊


(6)为什么bilibili自己的直播软件不支持高级设置呢,多浪费带宽啊,建议开掉

    我赞同,但希望先把给 iOS 端因为发热就只给推 15 FPS 的那个神仙 PM 给开了。


(6.5)帧率

(7)WiFi 6 普及了!无线网不是问题了!

    emmm,反正我自己没用 WiFi 6。而且稳定性和用哪一代有什么关系。非要说低端 WiFi 6散热不好更容易炸(没错就是菊花厂的那个)。非网络专业,请运维来解释一下吧 @IT狂魔 。

    大概就是这样了。


(8)何不食肉糜

    文章排版其实也挺重要的。都是大字看着不太舒服。


(9)咱最后不要Cue那么多人了

    LP都沉迷把妹不理朝政了,某组实际扛把子其实是书记。


(10)原来你也玩⚪神

id: 100477160

    非要说⚪神在放技能的时候确实会有码率峰值。不过亲测开 8 Mbps 推流问题就不大了。录屏 20 Mbps 够用了。

    说不定你也能看到我直播打⚪神。

致谢

    出于隐私保护考虑,截图均隐去昵称头像。

    涉及渠道有私信、录播群、粉丝群、压制群、放流核心群等。

    感谢提供视频数据、测试环境、参数建议的各位小伙伴。

    希望浪费的一整天时间能让大家少走点弯路。

    再次声明,真的不是为了怼谁或者怎样,只是觉得有些观点不太合理。阐释一下我自己的看法。

    本文仅代表笔者个人立场,不代表任何组织。


重要的事情再说一遍:请用CBR推流!

    我专栏还有好康的。

    


【吐槽向】为什么不推荐采用恒定质量模式进行直播推流的评论 (共 条)

分享到微博请遵守国家法律