植物百科网
当前位置: 首页 农业百科

ffmpeg编辑工具(FFMPEG视音频流媒体服务器开发)

时间:2023-06-29 作者: 小编 阅读量: 2 栏目名: 农业百科

从系统日志上没有找到相关日志,于是进行了长期的软件模块排除法检查问题原因,做了解码、解码滤波、滤波编码等单元模块组挂机测试,仍然无法找到系统crash问题原因。优点是音视频处理全交付于gpu处理,省下大片cpu时间。可惜系统crash问题依然存在。7)、移植到微服务框架,进一步增强程序扩展性。

流媒体服务框架设计 总结有福利

基于公司项目需求设计流媒体服务器,考虑到扩展性,分离了业务与音视频处理,便于后期音视频处理服务能做水平扩展,同时还能更替音视频处理方案。

登录服开发

基于公有协议栈,管理用户登录、缓存、出入房间动态等等、迎合Docker特点、单独用户数据库缓存。

ffmpeg音视频合成服务开发

主要包括音视频相关内容的开发,也是开发投入时间最长的服务,主要经历了以下过程。

1)、最初基于ffmpeg的h264软件实现服务demo.

2)、然后尝试基于英特尔vaapi硬件加速驱动做h264硬解,对解码视频帧做软件overlay滤波进行音视频合成,再做vaapi硬编码。优点是此流程软件实现上会更为简洁快速,也比较稳定。但是后面发现系统会时不时crash。从系统日志上没有找到相关日志,于是进行了长期的软件模块排除法检查问题原因,做了解码、解码 滤波、滤波 编码等单元模块组挂机测试,仍然无法找到系统crash问题原因。同时也在微软的github仓库提交了bug/issue,但是恢复较慢。

3)、起初怀疑是vaapi驱动问题,于是尝试使用英特尔qsv硬件加速驱动硬解,对解码视频帧做硬件overlay_qsv滤波进行音视频合成,再做qsv硬编码。优点是音视频处理全交付于gpu处理,省下大片cpu时间。缺点是硬件帧上下文关系密切,做视频自动切换上,需要做更多软件处理,编码上略微复杂。可惜系统crash问题依然存在。

4)、ffmpeg原生工具命令行测试系统crash问题,发现确实有这个问题,而且更换很多个ffmpeg版本都会出现,只是概率可能会有浮动:快的几分钟到几小时crash、慢的一星期可能不会出现,但是不改任何参数再次尝试依然可能crash.

5)、移植音视频服务从linux到windows系统下、经过长期测试windows下运行intel加速方案确实没有系统宕机问题了、同时因为登录服基于muduo库实现,移植复杂,改将登录服打包进docker容器运行。

6)、完善及优化音视频服务框架及功能。包括:添加适当rtp缓存解决公网环境udp包波动问题、添加音视频同步机制、增加相应业务功能接口。

7)、移植到微服务框架,进一步增强程序扩展性。

流媒体服务开发小结

音视频合成简要组成模块如下

rtp处理

rtp手写,未用ffmpeg的avformat库,这样我更便于管理网络处理部分

需要注意的是udp在公网上可能存在网络抖动问题,开一块rtp缓存消抖,按seq做最小堆。我直接用的golang的heap包实现。

然后将音频包和视频包按相对时间戳,做堆排序放进一块rtp缓存里(av_rtp_handler),这样是为了方便做音视频同步,记录第一个到达的rtp包时间戳、后续rtp的相对时间加上timestamp的增量换算来的时钟,然后用来标志这个包的相对时间。例如 h264 90000的时钟 、 30的帧率 、 : 假如第一包为3000时间戳增量 那么本包相对时间假定为 3000 / 90000 = 33.33333ms, 假如下一包增量也是3000,第二包相对时间就是33.3 33.3 = 66.6ms依此类推。

rtp时间的同步 : av_rtp_handler里所有rtp包都带了我一个换算出来的相对时间戳的、 只需要将音视频的包做一次最小堆插入、每次取堆顶时间戳最小的rtp包即可、 是音频包就丢进音频解码器、视频包就丢进视频解码器。

视频的合成&音视频缓冲区

我想了很久音视频进行合成结构后发现有一个很重要的东西、那就是音视频帧的缓冲区、而且这个缓冲区真的很重要、它能做到以下效果:

1、控制帧率

2、解决多路流的音视频帧抖动问题

1、 通过一个定时器、你能很方便地控制帧率、例如隔33ms往合成器发送一组音视频帧进行合成即可。修改帧率你只需要更改定时器的种子值。

2、消抖、每路流到达的时间肯定是不稳定的、可能通道3一下子除了了5包数据、一下子来了10帧数据、而其他路还只有1到2帧或者没有、但是你要保持实时性肯定不能把所有帧全部保存下来、所以你必须控制每路的缓冲大小得把挤出来的非I帧删掉、注意是非I帧不然可能会花屏。

然后就是音视频合成、音频用amix、视频用overlay、

视频帧合成麻烦在qsv有一个硬件帧上下文、qsvframecontext 每次做屏幕的自动切换、或者屏幕位置交换、需要重新生成filter、而你就需要费工夫去更新这个qsvframecontext 极为麻烦、后面想到的方法是设计一张ffmpeg filter输入的映射

就是在不该ffmpeg滤波器描述符的情况下、而是直接交换filter的输入位置。

一个草图将就下: 相当于 就是打乱正当的输入顺序、做一张映射、这样子不用更改filter的描述符即可做滤波器的切换,要便利极多!

音频合成没什么好说的、就是每路的输出可能不能包含自己的通道声音、不然可能存在回音、可以弄个集合记录需要合成的流输入id的集合、合成的时候把自己的id去掉再合成就行了,还有不同编码合成可以做重采样来保证filter输入的一致性。

音视频编码

编码好像没什么重点东西、打包的时候打上个合适的时间戳即可。

音视频部分功能演示

因为csdn限制了gif的大小为5m,博客园好像是10m,所以用ffmpeg压缩了大小和帧率,比较模糊。

首先5个推流客户端

用了两个demo视频使用推流工具: https://github.com/ailumiyana/streaming一直往创建音视频服务的音频端口和视频端口发rtp数据

5对流的登录

配置登录流的地址,流标识依次为 “ai“, "lu", "mi", "ya", “na“同时自动合成一条流,并用ffplay播放出来。

总结;详细教程资料关注 后台私信;资料;两个字可以免费视频领取 文档 各大厂面试题 资料内容包括:C/C,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等。,
    推荐阅读
  • 空气含量中最多的气体(空气含量中最多的气体介绍)

    空气中含量最多的气体是氮气,氮气约占空气体积分数的百分比约为78%。通过实验测定,空气的成分按体积计算,氮气大约占78%、氧气占21%、稀有气体0.94%、二氧化碳0.03%、其他气体和杂质0.03%,也就是说空气中含量最多的物质是氮气。氮气化学性质很不活泼,在高温高压及催化剂条件下才能和氢气反应生成氨气;在放电的情况下才能和氧气化合生成一氧化氮;即使Ca、Mg、Sr和Ba等活泼金属也只有在加热的情形下才能与其反应。

  • 文思豆腐羹如何做好吃(文思豆腐羹用什么豆腐)

    文思豆腐是一道有名的淮扬菜,需要的就是精湛的刀工,这样做出的文思豆腐会有嫩滑的口感,打造入口即化的口感。文思豆腐羹如何做好吃文思豆腐羹材料和做法步骤一、文思豆腐羹材料准备好豆腐400克,鸡脯肉,火腿还有香菇,再有准备好生菜,冬笋,调料需要准备盐和味精。

  • 结构性存款可以买理财吗(结构性存款是存款吗)

    雪球产品就是今年年初监管向信托公司进行窗口指导,要求叫停的产品。简单的说,这是一种高风险的金融衍生品,它通过持有一定结构的金融衍生品,来实现在某一特定情况下获利。这样的投资结构就能保证我不论涨,还是跌,只要在一定幅度内都可以盈利。交易期权等金融衍生品,是非常高风险的投资。

  • 正言厉色意思(正言厉色的意思)

    下面内容希望能帮助到你,我们来一起看看吧!正言厉色意思正言厉色,汉语成语,拼音是zhènɡyánlìsè,意思是形容板着脸,神情非常严厉。出自《汉书·王莽传》。宝玉突然想出一个主意,一本正经地给她讲扬州黛山林子洞耗子精偷香芋的故事,黛玉见他正言厉色,以为真有其事,后来才发现原来是在取笑她。

  • 面谈调薪酬有什么技巧(跟老板谈调薪的技巧有哪些)

    如果你在老板心目中分量很大,一般老板都会给你加薪的。和老板谈加薪时目的一定要明确,让老板知道你只是为了加薪,而不是辞职走人。和老板谈加薪后,一定要给老板一个考虑的时间,不要咄咄逼人,逼着老板加薪。老板也要有足够的思考时间,来考虑你是否值得加薪,给你加薪后对公司有没有什么影响。不仅口头上要表示感谢,工作中要更加努力,让老板觉得给你加薪是值得的。

  • 杏花有没有香味(杏花闻起来会特别香吗)

    杏树是中国著名的观赏树木,可配植于庭前、墙隅、道路旁、水边,也可群植、片植于山坡、水畔,是春季主要的观赏树种。杏花直径2至3厘米,先于叶开放。花梗短,长1至3毫米,被短柔毛。花萼紫绿色,萼筒圆筒形,外面基部被短柔毛。萼片卵形至卵状长圆形,先端急尖或圆钝,花后反折。花瓣圆形至倒卵形,白色或带红色,具短爪。

  • 减肥减肚子的方法(怎么减肚子呢)

    减肥减肚子的方法食用健康食品:酸奶与发酵的牛奶能激活消化必须的物质,有助于改善肠道微生物系统,从而防止腹部隆起。走路、喝水、按摩:走路及喝水有利腹部扁平。

  • 新坑翡翠手镯多少钱(新坑翡翠手镯的价格)

    新坑翡翠手镯多少钱?新坑翡翠手镯多少钱翡翠手镯作为大件翡翠制品,用料特别多,只有大块、质量好的翡翠原石才能打造成手镯,因此翡翠手镯的价格都比较高,商家们拿到质量比较好的原石也尽可能打造成手镯。具体到新坑种翡翠,因为大多数新坑种翡翠透明度都不高,质地也不够细腻,因此种水一般都是以糯种或豆种为主,极少出现冰种或冰种以上的种水,这样的翡翠价格价格自然不会太高,一个品质比较好的糯种翡翠手镯大概在十万以内。

  • 宁波毛蚶做法水煮几分钟(毛蚶煮多长时间可以吃)

    宁波毛蚶做法水煮几分钟毛蚬是很多人喜欢吃的食物,不过建议大家在做之前都要先用开水煮以下。强精益气,提高精液质量,增强精子活力。适用于治疗肾阳虚所致的阳痿、腰痛、小便频数及补五脏之气不足。可治疗全身水肿,小便不利等。能软化和保护血管,有降低人体中血脂和胆固醇的作用。

  • 2022洛阳湿地公园最新名单 洛阳生态公园最新消息

    国家级湿地自然保护区河南黄河湿地国家级自然保护区,面积24000公顷。国家级湿地公园嵩县陆浑湖国家湿地公园,面积4222.39公顷伊川伊河国家湿地公园,面积1384.36公顷。