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

  • 科普
  • 前期准备
    • 安装ffmpeg
    • 将ffmpeg的库文件添加到Qt项目的.pro文件中
    • 在源文件用引入头文件
  • 第一步:先查看本机支持哪种硬件加速
  • 第二步:查看这个硬件加速方案支持哪种编码器&解码器
  • 第三步:在Qt源码中指定使用哪个编码器或解码器
    • 核心代码
    • MacBook自带摄像头参数设置
  • 总结

科普

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 developersbuilt 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=jacklibavutil      56. 31.100 / 56. 31.100libavcodec     58. 54.100 / 58. 54.100libavformat    58. 29.100 / 58. 29.100libavdevice    58.  8.100 / 58.  8.100libavfilter     7. 57.100 /  7. 57.100libavresample   4.  0.  0 /  4.  0.  0libswscale      5.  5.100 /  5.  5.100libswresample   3.  5.100 /  3.  5.100libpostproc    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 developersbuilt 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=jacklibavutil      56. 31.100 / 56. 31.100libavcodec     58. 54.100 / 58. 54.100libavformat    58. 29.100 / 58. 29.100libavdevice    58.  8.100 / 58.  8.100libavfilter     7. 57.100 /  7. 57.100libavresample   4.  0.  0 /  4.  0.  0libswscale      5.  5.100 /  5.  5.100libswresample   3.  5.100 /  3.  5.100libpostproc    55.  5.100 / 55.  5.100DEV.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++开发环境使用,后续遇到问题再进一步补充。

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

  1. 音视频开发入门(3):视频编解码之编码基础

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关实时 ...

  2. 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...

  3. 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4

    前言: 最近闲这没事,整理了一下之前开发过的音视频编解码库,主要基于ffmpeg,实现音视频的编解码.视频流添加文字,音视频同步到MP4等功能.有需要的小伙伴可以参考参考,如果写的有什么不对的地方,欢 ...

  4. 即时通讯音视频开发(三):视频编解码之编码基础

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的. 系列文 ...

  5. 视频编解码的编码结构

    初识编码结构 全帧内编码结构(AI) 低延迟编码结构(LP) 随机接入编码结构(RA) GOP(Group of picture) 首先根据参考软件中的cfg可知,我以VTM6.0为例共有4个配置文件 ...

  6. FFmpeg 工具:音视频开发都用它,快@你兄弟来看丨音视频工具

    (本文基本逻辑:ffmpeg 常用命令介绍 → ffplay 常用命令介绍 → ffprobe 常用命令介绍) 从事音视频开发的程序员几乎都应该知道或使用过 FFmpeg.FFmpeg 是一个开源软件 ...

  7. ffmpeg硬解码与软解码的压测对比

    文章目录 ffmpeg硬解码与软解码的压测 一.基本知识 二.压测实验 1. 实验条件及工具说明 2. 压测脚本 3. 实验数据结果 ffmpeg硬解码与软解码的压测 一.基本知识 本文基于intel ...

  8. 基于iOS/Mac平台实现H.265硬编解码

    本文我们会着重介绍如何在iOS/Mac上使用系统API进行H.265硬编硬解功能,读者需要有使用VideoToolBox进行硬编/解码的相关经验. 一般提到H.265,都难免要和H.264对比一番,以 ...

  9. 音视频编解码流程与如何使用 FFMPEG 命令进行音视频处理

    一.前言 FFMPEG 是特别强大的专门用于处理音视频的开源库.你既可以使用它的 API 对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频 ...

最新文章

  1. @Transactional-同一个类中方法自调,调用方法事物失效
  2. Zookeeper客户端
  3. star-cd linux安装,linux 使用PXE方式,kickstar网络安装系统
  4. MFC 定时器使用方式
  5. 谷歌入职邮件_为什么我全职学习了8个月以接受Google采访
  6. arcgis中的python字符串比较
  7. dedecms代码研究六
  8. mac应用打包成为dmg的方法
  9. 判断整除(动态规划,递推)
  10. vivo正式公布全新子品牌iQOO手机:冲击5千元+旗舰手机档
  11. json数据类型基本转换
  12. 【面试官系列】10个必会JavaScript高频手写题,思路和相关知识点都给你备好了,不会看不懂了
  13. veu中点击商品详情打开新窗口
  14. 指数型组织:未来组织发展的必然趋势
  15. 2、使用FTP客户端连接FTP服务器
  16. 基于微信小程序的兼职发布接单系统
  17. python培训教程百度云盘
  18. 程序自我保护 c语言编程,C语言时尚编程百例
  19. 怎么把视频生成二维码?微信扫二维码就可以观看?不要广告的
  20. mysql8.0.18用什么jdk_centos7 安装jdk及mysql8

热门文章

  1. python语言中缩进是强制的吗_python缩进是强制吗
  2. BZOJ 1023: [SHOI2008]cactus仙人掌图
  3. kNN算法与手写数字识别
  4. 自媒体平台运营规则和推荐机制详解
  5. 使用ffmpeg解决网页端 视频不能边加载边播放的问题
  6. 曾经和人谈到情,句句不离你
  7. TS之类的继承与super
  8. 地图绘制初探——基于maptalks的2.5D地图绘制
  9. docker启动redis
  10. 安装Windows 7的XP模式