最近在搞的一个项目,使用硬件加速,代替软件x265库进行H.265编码,好听点的叫法就是异构。

作为软件工程师,硬件算法的实现基本就和本人无关了,不过好在这块本身也不是兴趣所在~~   为了更好地讲硬件加速的效果进行展示,也为了省去许多工作,因此选用FFMPEG作为数据输入与输出的框架。

关于FFMPEG,网上资料也很多,雷神的博客也介绍得比较到位了,雷神侧重于讲解FFMPEG本身的代码框架及原理,这里的切入点不太一样,应用场景不同。

下面是主题。。

第一步,搞清楚FFMPEG框架能够完成的工作及特性

1. 修改点

仿照 libavcodec/libx265.c 写一个libh265.c,实现几个接口即可,没错,就是这么简单。。

init

close

encode2

libx265的结构体实现如下:

AVCodec ff_libx265_encoder = {.name             = "libx265",.long_name        = NULL_IF_CONFIG_SMALL("libx265 H.265 / HEVC"),.type             = AVMEDIA_TYPE_VIDEO,.id               = AV_CODEC_ID_HEVC,.init             = libx265_encode_init,.encode2          = libx265_encode_frame,.close            = libx265_encode_close,.capabilities     = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS,
};

事实上,init 和close就是一些初始化,关键就是实现encode2

2. FFMPEG框架本身具有诸多功能,能帮助读取数据,送到encode2进行编码(接收编码后的数据也在该接口完成),编码完成后还能将编码后数据进行封装、发送等

3. 借用一下libx265的代码说一下该encode2接口的特性及在该接口中我们需要完成的工作

static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,const AVFrame *pic, int *got_packet)

数据一帧一帧地从文件或其他源读入之后,信息存在AVFrame中传入(每次传入一帧,或者当数据下发完毕,发送完毕,纯接收数据时,该参数传入NULL),正常关心该结构中的几个成员即可:

data 指向数据

width/height 视频分辨率

pts 帧序号

接口中必需完成的工作:

1. 数据发送到编码器进行编码,软件直接调用编码库接口编码,硬件通过驱动发送数据

2. 检查回收结果,两种情况:

a. 无结果,上一次编码还没完成,我们不必傻乎乎等着,直接返回0,将got_packet 设0返回即可,FFMPEG自己会记录发送的包数量与接收的包数量,没收完全,它后面会传入 AVFrame 参数NULL来接收结果。

b. 有结果,可能是上次结果(正常都是如此,毕竟编码比数据读入慢多了),创建一个packet,将结果存入,结果信息记录在 AVPacket参数中返回

创建packet接口:

 ff_alloc_packet(pkt, payload);

将编码后数据拷贝到创建的packet中去

设置AVPacket信息,设置pts/dts

更新got_packet 的值并返回

3. 利用FFMPEG实现基本功能,实现以上接口实现就已经完成了,下面说几个在学习过程中的实验及发现。

4. FFMPEG多线程

多线程有两种形式

第一种,x265软件编码多线程,该多线程参数由FFMPEG带入,

    .capabilities     = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS,

例如两条frame处理的线程:

ffmpeg -i xxx -threads 2 -thread_type frame xxx

该参数会通过avctx参数带入到编码接口中,告诉软件编码器应当用几个线程进行并行编码,不设置的情况下默认是有多少个核开多少个线程

第二种,FFMPEG数据读取、调用encode2编码、收数据多线程:

   .capabilities     = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS | AV_CODEC_CAP_INTRA_ONLY,

会开启多个线程,并行读取数据,调用encode2接口进行编码、收数据

【显示技术 - 视频编码】硬件加速 - 对接FFMPEG框架的H.265编码相关推荐

  1. iPhone鼎力支持 H.265编码技术及画质PK

    ● H.265(HEVC)编码技术解析 具体的对比测试之前,我们需要明白什么是H.265视频编码技术.H.265编码技术由中国华为公司主导,华为拥有H.265编码最多的核心专利技术,2012年8月爱立 ...

  2. 建议收藏 | H.265编码原理入门

    视频编码的目的是为了压缩原始视频,压缩的主要思路是从空间.时间.编码.视觉等几个主要角度去除冗余信息.由于 H.264 出色的数据压缩比率和视频质量,成为当前市场上最为流行的编解码标准.而 H.265 ...

  3. H.265编码和H.264编码的区别

    目前很多摄像机采用了H.265的编码标准,H.264编码的摄像机逐渐减少,为什么H.265会流行?H.264和H.265有何不同? 一.什么是H.265 H.265是ITU-TVCEG继H.264之后 ...

  4. 显示卡影片播放硬件加速,作法原理完全解说

    原文地址:http://www.5i01.cn/newsdetail.php?id=4481 作者:G.F. 我还记得我装第一台电脑时,为了看VCD的....好看影片(羞),还特别去买一张VCD加速卡 ...

  5. 支持硬件加速的ffmpeg编译

    背景 为了降低cpu的使用率提升系统的接入能力,需要将编解码模块移至GPU处理,ffmpeg默认的发行版中不支持GPU加速,所以需要重新编译ffmpeg使其支持GPU硬件加速. ffmpeg官方编译指 ...

  6. 腾讯视频开启硬件加速

    这篇文章主要说的是如何下载腾讯视频到电脑_腾讯视频开启硬件加速,希望可以帮助大家.腾讯视频开启硬件加速返回暂停重播播放x 当我们使用腾讯视频观看本地或在线影视时,开启硬件加速可以明显提高画面质量以及减 ...

  7. 雄迈H.265+编码技术, 独领安防视频编码技术风潮

    H.265是ITU-T VCEG 继H.264之后所制定的新的视频编码标准.H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进.新技术使用先进的技术用以 ...

  8. 网页全终端安防视频流媒体播放器EasyPlayer.js如何实现在web浏览器播放H.265编码视频?

    目前安防监控行业,基本所有的摄像头都支持H264编码,但是已经有部分摄像头开始支持H265,并且支持H265的摄像机已经越来越多.H265相比H264有着很多优势,压缩更高,网络传输消耗的带宽更小,相 ...

  9. iOS RTMP 视频直播开发笔记(3)- 了解 H.264 编码

    iOS RTMP 视频直播开发笔记(3)- 了解 H.264 编码 本节内容整理自:H264–1–编码原理以及I帧B帧P帧,作者:dxpqxb H264是一种高压缩率的编码标准,如何压缩嘞?一般的视频 ...

最新文章

  1. python采用解释方式执行_Python初学(一)
  2. Python基础(11)--面向对象1
  3. Github Pages+Hexo+阿里云域名绑定
  4. SDNU 1263.C语言程序设计教程(第三版)课后习题10.5(约瑟夫环)
  5. RabbitMQ快速入门--简单队列模型
  6. 所谓高情商就是会说话--总结
  7. 腾讯安全携手华夏银行“论道”金融风控,传递在线反欺诈干货建议
  8. python代码规范准则_Python编码规范
  9. 【Day11】平时在项目开发中都做过哪些前端性能优化
  10. 支付宝上线“时间银行”:未来养老不用愁了
  11. 大数据Hadoop之——数据仓库Hive
  12. 游戏对战平台研究终结篇
  13. 制作分页工具类,实现分页操作JSP+Servlet+数据库
  14. 13-4Happy Mid-Autumn Festival
  15. 2023测绘资质申请条件
  16. Vertex Atrributes
  17. python中 xlrd/xlwt模块详解
  18. Data Masking-克隆“真实”的假数据
  19. vite+element-plus项目基础搭建
  20. ftl模板导出word 带多张图片

热门文章

  1. prusai3打印机使用教程_3d打印机prusai3diy全过程【分享全部源码电路图】
  2. scratch/mblock项目:跑酷闯关(侦测、条件语句、数据与变量的应用)
  3. 电商项目的并发量一般是多少_【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!...
  4. 身份证二要素验证的使用场景介绍
  5. 独立开发并发布自己的一款手游——SpaceWar
  6. 浅析mpeg-ts封装结构
  7. ofo小黄车创始人赴美创业,他还欠你押金不?
  8. 计算机毕业设计(3)python毕设作品之小说电子书阅读系统
  9. IDEA2021配置Maven
  10. 第9.8节 Python使用writelines函数写入文件内容