无GPU无核显用gstreamer实现推流视频的硬件加速视频压缩和转码 | gstreamer相关知识了解&简单测试

背景提要

安全堡垒机中需要保存大量录屏视频,包括操作员的视频操作指导、报错前的故障内容等,由于视频数量多、体积大,而项目需要长时间保存这些视频,这耗尽了存储资源,影响了系统功能的执行。因此考虑对推流视频进行压缩,在保证视频质量的前提下,压缩视频所需的占用空间。此外,经过测试发现ffmpeg视频压缩需要花费大量时间,所以还需实现对视频压缩过程进行加速

当前的推流转码方案,通过ffmpeg

插入到obs_record表之前把流名称的后缀名换一下

推流结束更新time_end时间后进行格式转换,如果命令执行成功就删除同名的flv文件  去掉while循环,因为一直没成功那就卡死在这了,只要时间把握对了,是在推流结束之后转就没问题,那个flv存在且不损坏,那基本上能转成功

考虑新方案,gstreamer可同时完成视频压缩和格式转换,需要测试硬件加速效率

存在问题:目前的压缩方案很多涉及到使用GPU等硬件,而厂站没有GPU硬件,也没有核显可以做硬件加速

解决过程:产品使用云涌的设备,他们的设备支持硬件加速,但是只支持gstreamer

参考gstreamer的官方手册:

Tutorials

首先参考这篇博文,了解GStreamer是什么

Gstreamer知识点

gstreamer的高性能主要体现在:

使用GLib的g_ mem_ chunk和非模块化分配算法使得内存分配尽可能最小。

插件之间的连接非常轻型(light-weight).

数据在管道中的传递使用最小的消耗,管道中插件之间的数据传递只会涉及指针废弃。

提供了一套对目标内存直接进行操作的机制。例如,插件可以向X server共享的内存空间直接写数据,缓冲区也可以指向任意的内存,如声卡的内部硬件缓冲区。

refcounting和写拷贝将memcpy减少到最低。

子缓冲区有效地将缓冲区分离为易于管理的块。

使用线程联合(cothreads)减少线程消耗。线程联合(cothreads)是简单又高速的方法来切换子程序,作为衡量最低消耗600个cpu周期的标准。

使用特殊的插件从而支持硬件加速

采用带有说明的插件注册,这样的话只在实际需要使用该插件才会去装载。

所有的判断数据都不用互斥锁。

Gstreamer的使用方式:

其实Gstreamer全是插件。每一次播放,编

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值