如何使用ffmpeg为Mac进行视频硬解码/硬编码(在Qt环境)
如何使用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环境)相关推荐
- 音视频开发入门(3):视频编解码之编码基础
前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关实时 ...
- 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...
- 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4
前言: 最近闲这没事,整理了一下之前开发过的音视频编解码库,主要基于ffmpeg,实现音视频的编解码.视频流添加文字,音视频同步到MP4等功能.有需要的小伙伴可以参考参考,如果写的有什么不对的地方,欢 ...
- 即时通讯音视频开发(三):视频编解码之编码基础
前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的. 系列文 ...
- 视频编解码的编码结构
初识编码结构 全帧内编码结构(AI) 低延迟编码结构(LP) 随机接入编码结构(RA) GOP(Group of picture) 首先根据参考软件中的cfg可知,我以VTM6.0为例共有4个配置文件 ...
- FFmpeg 工具:音视频开发都用它,快@你兄弟来看丨音视频工具
(本文基本逻辑:ffmpeg 常用命令介绍 → ffplay 常用命令介绍 → ffprobe 常用命令介绍) 从事音视频开发的程序员几乎都应该知道或使用过 FFmpeg.FFmpeg 是一个开源软件 ...
- ffmpeg硬解码与软解码的压测对比
文章目录 ffmpeg硬解码与软解码的压测 一.基本知识 二.压测实验 1. 实验条件及工具说明 2. 压测脚本 3. 实验数据结果 ffmpeg硬解码与软解码的压测 一.基本知识 本文基于intel ...
- 基于iOS/Mac平台实现H.265硬编解码
本文我们会着重介绍如何在iOS/Mac上使用系统API进行H.265硬编硬解功能,读者需要有使用VideoToolBox进行硬编/解码的相关经验. 一般提到H.265,都难免要和H.264对比一番,以 ...
- 音视频编解码流程与如何使用 FFMPEG 命令进行音视频处理
一.前言 FFMPEG 是特别强大的专门用于处理音视频的开源库.你既可以使用它的 API 对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频 ...
最新文章
- @Transactional-同一个类中方法自调,调用方法事物失效
- Zookeeper客户端
- star-cd linux安装,linux 使用PXE方式,kickstar网络安装系统
- MFC 定时器使用方式
- 谷歌入职邮件_为什么我全职学习了8个月以接受Google采访
- arcgis中的python字符串比较
- dedecms代码研究六
- mac应用打包成为dmg的方法
- 判断整除(动态规划,递推)
- vivo正式公布全新子品牌iQOO手机:冲击5千元+旗舰手机档
- json数据类型基本转换
- 【面试官系列】10个必会JavaScript高频手写题,思路和相关知识点都给你备好了,不会看不懂了
- veu中点击商品详情打开新窗口
- 指数型组织:未来组织发展的必然趋势
- 2、使用FTP客户端连接FTP服务器
- 基于微信小程序的兼职发布接单系统
- python培训教程百度云盘
- 程序自我保护 c语言编程,C语言时尚编程百例
- 怎么把视频生成二维码?微信扫二维码就可以观看?不要广告的
- mysql8.0.18用什么jdk_centos7 安装jdk及mysql8