网站首页 > 开源技术 正文
在流媒体领域中,因为网络条件变化,或者终端性能的差异,可能需要根据设备能力或者网络能力做帧率调整,以达到降低带宽,降低终端解码和渲染的开销。而常规的编码器特别是硬件编码器一般都不支持降帧率(目前只知道openh264 的frameskip相关的接口开源降低帧率),虽然编码初始化设置某个帧率,但这个帧率不决定编码器输出帧率,仅仅作用用输出SPS的帧率参数,实际决定编码器输出帧率还是采集后往编码器输入的帧率。笔者根据实际项目需要,设计了2个方案,以达到编码降帧率输出。
方案一 多线程方案
采集作为一个生产者线程A,将采集的一帧往buffer送,编码器做一个消费者线程B,从buffer里面读取数据。A线程根据前端采集帧(如摄像头帧率,桌面视频和游戏帧率)按既定帧率往buffer送,不管线程B是否消费,没有消费的话,就直接覆盖。而线程B按业务需求按帧率对应的时间间隔主动去读帧数据(当然AB线程要做好互斥和资源管理)。
该方案优点:实现简单,而且输出帧率稳定,且行对输入帧图像来说,输出丢帧均匀。缺点:需要改造软件框架,有些既有框架是采集和编码是同一个线程,如果是第三方写的代码,改造起来要估计比较困难。
方案二. 单线程方案
如果原来项目采集编码一个线程的话,且无法拆分双线程,就需要在送入解码器之前主动丢帧。具体思路如下。
该方案优点:在单线程框架下不需要改动框架,确保原有的代码的稳定性。缺点是:丢帧算法要设计合理,否则丢帧不均匀,会造成视频在客户端端播放卡顿,且前端采集帧率抖动会引发算法丢帧策略的调整,从而引发输出帧率的抖动,不过根据实际情况调节参数,尽量减少输出帧率抖动,尽量保证均匀间隔丢帧。
丢帧算法
设计原则:尽量做到均匀丢帧,防止不合理的连续丢帧造成卡顿
参数:r=fps_in/fps_out
其中:fps_in 代表丢帧算法模块的输入帧率,即采集输出帧率
fps_out 代表丢帧算法模块的输出这里,即编码器输入帧率
丢帧算法公式:
样例分析:
录屏游戏60fps,fps_out =30,r=2送入解码器帧为:1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59(隔一帧丢一帧)
录屏视频帧率为25,fps_out=15,r=1.6,送入解码器帧为:
1,3,5,7,9,11,13,15,17,19,21,22,23,24,25 (隔一帧丢一帧,丢完就连续送入)。
录屏视频帧率为25,fps_out=20,r=1.25送入解码器帧为:
1,2,3,5,6,7,9,10,11,13,14,15,17,18,19,21,22,23,24,25(隔三帧丢一帧, 丢完就连续送入)
经测试:
在远程桌面场视频25帧场景下,输出帧率测试结果如下:
本算法在理论上输出帧率是非常准的,同时丢帧也比较均匀。但实际项目中,如果fps_in存在大幅度抖动(主要是桌面采集,摄像头采集帧率一般都是固定的),算法策略需要调整,可能会产生输出帧率抖动,需要根据实际项目情况进行算法调优。更多更详细信息请关注公众号:AV_Chat
猜你喜欢
- 2024-12-30 ScalersTalk成长会Java小组第7周学习笔记
- 2024-12-30 ffmpeg cv:Mat编码成H265数据流 ffmpeg解码h265码流
- 2024-12-30 拆解五六年前的国产平板,这做工!
- 2024-12-30 avi如何转成mp4?几种把avi转换成mp4格式的方法推荐
- 2024-12-30 H5标签video,如何播放流视频 h5播放flv视频
- 2024-12-30 超实用干货!这可能是史上最全的视频格式详解
- 2024-12-30 什么是闭合GOP和开放GOP? 闭合型和开放型
- 2024-12-30 OpenCV中VideoCapture类打开视频的方式
- 2024-12-30 拆解五六年前的国产平板 国产平板怎么拆开
- 2024-12-30 如何使用PSV播放MP4 视频自动退出怎么办
你 发表评论:
欢迎- 05-16东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 05-16这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 05-16湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- 05-16Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- 05-16G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- 05-16DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 05-16上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- 05-16WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 最近发表
-
- 东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 湖人自媒体调查:89%球迷希望DFS回归 79%希望詹姆斯回归
- 一觉醒来湖人苦盼的纯3D终于到位 DFS能带给紫金军多少帮助
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)