如何使用ffmpeg为Mac进行视频硬解码/硬编码(在Qt环境)

10 篇文章 0 订阅

科普

ffmpeg正确读法: f - f - m - peg
而不是每个字母分开读
基本市面上的播放器底层都是ffmpeg,例如最近挂掉的暴风影音,就知道这东西有多牛逼了。

前期准备

安装ffmpeg

直接使用homebrew安装就可以了,会自动把所有拓展都装齐

brew install ffmpeg

将ffmpeg的库文件添加到Qt项目的.pro文件中

INCLUDEPATH += /usr/local/Cellar/ffmpeg/4.2.2/include
LIBS += /usr/local/Cellar/ffmpeg/4.2.2/lib/lib*

在源文件用引入头文件

extern "C"
{
//引用格式 lib+库名/库名.h
#include "libavcodec/avcodec.h"
#include "libavdevice/avdevice.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
}

第一步:先查看本机支持哪种硬件加速

指令:ffmpeg -hwaccels

(base) liangyideMacBook-Pro-2:~ alexleung$ ffmpeg -hwaccels
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.16)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Hardware acceleration methods:
videotoolbox
videotoolbox

这里我们可以了解到设备硬件加速只支持videotoolbox,videotoolbox是苹果官方出品的硬件加速工具,mac和ios都是用这个。

第二步:查看这个硬件加速方案支持哪种编码器&解码器

指令:ffmpeg -codecs | grep videotoolbox

(base) liangyideMacBook-Pro-2:~ alexleung$ ffmpeg -codecs | grep videotoolbox
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.16)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (encoders: libx264 libx264rgb h264_videotoolbox )
 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (encoders: libx265 hevc_videotoolbox )

以上输出说明videotoolbox只支持H.264和H.265的硬编码(不支持解码),h264与hevc这两个都是编码器,要留意。

第三步:在Qt源码中指定使用哪个编码器或解码器

核心代码

// H.264视频编码
AVCodec *codec = avcodec_find_encoder_by_name("h264_videotoolbox");
// H.265视频编码
AVCodec *codec = avcodec_find_encoder_by_name("hevc_videotoolbox");
// 使用指定解码器, rawvideo - 我手上的mbp只支持这一种解码器
AVCodec *codec = avcodec_find_decoder_by_name("rawvideo");

MacBook带有自家的rawvideo解码器,生成的数据可直接输送视频流。

MacBook自带摄像头参数设置

//avfoundation苹果自己cocoa框架的AVFoundation
AVInputFormat *ifmt = av_find_input_format("avfoundation");
//mbp2017款的摄像头最高支持到30fps
av_dict_set(&pOptions, "framerate", "30", 0);
//支持两种分辨率640x480与1280x720
av_dict_set(&pOptions, "video_size", "640x480", 0);

以上任一参数超出范围程序就会crash掉。

总结

第一第二步流程适用于各种平台,来查看手上设备能够支持的硬件加速方案与编码解码器,而第三步代码也支持所有C++开发环境使用,后续遇到问题再进一步补充。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Qt中将FFmpeg的软解码改为解码是可行的。通过使用FFmpeg中提供的解码器,可以实现对视频进行解码。可以按照以下步骤进行操作: 1. 首先,确保你已经正确安装了支持解码FFmpeg版本,例如n5.1.2版本。 2. 在Qt中创建一个视频播放器的项目,并引入FFmpeg库。 3. 在代码中使用FFmpeg库来打开视频文件或者网络摄像头。对于打开摄像头的情况,与打开视频文件相比,会有一些额外的步骤。 4. 使用FFmpeg解码进行解码。在打开视频流后,可以通过选择相应的解码器来进行解码。可以参考FFmpeg的文档或者示例代码中的相关部分。 5. 使用QPainter或者其他绘图工具将解码后的视频进行绘制显示。 6. 如有需要,可以添加音频解码和播放功能。 通过以上步骤,你可以将Qt中的FFmpeg解码改为解码。这样可以提高视频解码的效率和性能,并减少CPU的占用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Qt-FFmpeg开发-视频播放(2)](https://blog.csdn.net/qq_43627907/article/details/127341133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Qt-FFmpeg开发-打开本地摄像头(6)](https://blog.csdn.net/qq_43627907/article/details/128184141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex-Leung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值