![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AVD
文章平均质量分 79
深海Enoch
我们的目标是星辰大海~
展开
-
【Windows】使用 MinGW 编译 FFmpeg 踩坑记录
在 Windows 平台使用 MinGW 和 Git Bash 终端编译带 x264、fdk-aac 以及 nvdec 的 FFmpeg 静态库,遇到了很多坑,记录一下。原创 2023-01-31 17:49:08 · 1436 阅读 · 1 评论 -
【AVD】Linux 编译支持 Cuda 的 OpenCV 4.6,解决报错 throw_no_cuda
最近在做视频镜头切换检测功能,需要用 OpenCV 计算某一帧图像的直方图,于是尝试着在 Linux 上编译安装 OpenCV。原创 2022-10-13 20:31:18 · 3600 阅读 · 3 评论 -
【AVD】视频解码时如何获取 coded_width coded_height 即参与编码的宽高
基于字节对齐、宏块宽高等因素,导致一个宽 w 高 h 的视频其实际参与编码的某一帧的宽高并不一定等于 w 和 h,而是有一个 ffmpeg 称之为 coded_width 及 coded_height 的编码宽高。出于另一些原因,例如数据送出与读取、数据加载到纹理等需求,不仅需要知道 w h,还需要知道其 coded_width 及 coded_height(以下简称 cw ch),那么该如何尽可能早地获取到这两个值呢?原创 2022-10-13 00:04:18 · 1462 阅读 · 0 评论 -
【AVD】【转载翻译】NVDEC_VideoDecoder_API_ProgGuide
NVIDIA Video Codec SDK 解码文档翻译。转载 2022-09-28 00:05:47 · 1042 阅读 · 0 评论 -
【AVD】FFmpeg 音频编码时 SampleFormat 的选择,报错 “Specified sample format s16 is invalid or not supported.“ 的解决
最近业务需要一个转码接口,这个转码接口将用于各平台(Linux、Android、iOS 等),在开发过程中发现,整个接口在 Linux 上运行良好,但在 Android 端却无法正常转码,根据自己添加的 Log 发现,在初始化音频编码器时发生了问题。经调试发现,Android 端...原创 2022-03-22 09:54:23 · 1453 阅读 · 0 评论 -
【AVD】简述 C++ 解码 HEIF HEIC 图片
一个好用的 C++ 库解码 HEIC 格式图片原创 2021-12-25 23:46:56 · 3915 阅读 · 1 评论 -
【AVD】C++ 获取 PNG 图片宽高信息
之前写过一个使用 FFmpeg 类对图片实现了解码、转码、裁剪、缩放等功能,发现比 ImageMagic 快多了。详情见 【AVD】杀鸡用牛刀,FFmpeg API 加载存储图片,比 ImageMagic 和 stb_image 快多了。但是,在文章 【AVD】C++ 不解码获取 JPG 图片宽高、旋转信息等 EXIF 信息 中提到过,如果我们只需要获取图片的宽高信息,而不用解码图片时,现有的 FFmpeg 代码并不能在解码之前得到一些格式的图片,现在已知的 PNG、JPG 均不能获得,而 GIF 是可以.原创 2021-12-23 09:44:31 · 1353 阅读 · 0 评论 -
【AVD】C++ 不解码获取 JPG 图片宽高、旋转信息等 EXIF 信息
不解码,使用 C++ 类来快速获取 JPG 文件的宽高及旋转信息。原创 2021-12-22 21:54:34 · 3495 阅读 · 0 评论 -
【AVD】 FFmpeg 获取 JPG 图片旋转信息等 Exif 信息
前段时间写了篇 杀鸡用牛刀,FFmpeg API 加载存储图片,比 ImageMagic 和 stb_image 快多了,后来发现有个问题,有些 JPG 图片是带有旋转信息的,如果只解码,不获取它的旋转信息,将导致图片的方向错误。av_dict_get那如何才能用 FFmpeg 来获取 JPG 的旋转信息呢?查过很多资料,最后终于找到一种方法。由于再次查找时又要翻阅多篇文章,因此记录在此。答案就是使用 av_dict_get 这个方法。首先,要完成使用 FFmpeg 对 JPG 图片的解码过程,得.原创 2021-12-22 13:49:00 · 2900 阅读 · 0 评论 -
【AVD】解决 HarmonyOS 2.0.0 系统上 NDK MediaCodec 硬解码概率性失败的问题
之前参考 Google 官方 native codec demo 实现了一个 Android 机上硬解码的功能,期望能改善手机的 CPU 使用率,提高应用性能。但是后来同事报出说在 华为 Mate10 手机上解码失败,由于当时我手边没有 Mate10,只有 P30,而在 P30 、小米8 和 小米 MIX 2S 上测试均未复现。因此一直没处理,最近再次提上日程,本想给华为提 case,写了个硬解码 Demo,竟然解决了这一概率性失败的问题。原创 2021-12-16 14:04:37 · 4579 阅读 · 0 评论 -
【AVD】菜鸟工程师写给门外汉的离线音视频开发入门(基于FFmpeg)
自从去年7月份以来已接触离线音视频开发一年有余,到现在对音视频编解码开发有了一定的基础。做过小白,才更了解对音视频没什么基础的小白更想了解哪些内容。因此有了这篇文章。常见概念本文主要用通俗易懂的视角来描述几个在音视频开发中用到的概念及主要的编解码流程。这些概念包括:封装流包、帧、采样编码格式音视频开发编解码的常见流程是:#mermaid-svg-JqxhUY3TpkY2IXV1 .label{font-family:'trebuchet ms', verdana, arial;fon.原创 2021-10-18 11:09:52 · 850 阅读 · 6 评论 -
【AVD】aubio 编译过程中遇到的 relocation R_X86_64_PC32 against symbol `ff_pw_9‘... recompile with -fPIC
参考 文章 https://blog.csdn.net/zhrh0096/article/details/38703943 以为要想办法在 aubio 的编译脚本中加上 -Wl, -Bsymbolic 才行。但是找了一圈,终于在 wscript 这个文件中找到两处代码提到了 CFLAGS,于是加上,再跑,还是不行。还是报错。原来,在 /usr/local/lib 目录下只有 ffmpeg 的静态库,没有动态库,于是,我重新编译了 ffmpeg,且任其在默认的 /usr/local/lib/ 目录下生成动态原创 2021-08-24 17:22:53 · 592 阅读 · 0 评论 -
【AVD】NDK MediaCodec 编码中的坑 configure: err(-2147479551) error -38 Fatal signal 4 (SIGILL) ILL_ILLOPC
感觉程序开发的状态,大约是这样的,昨天,横看成岭侧成峰,远近高低各不同;今天,山重水复疑无路,柳暗花明又一村;明天,正入万山圈子里,一山放过一山拦。尤其是搞一些自己并不熟悉的领域,最开始,绞尽脑汁,不知道问题是怎么出现的,又该怎么解决;就在接近放弃之时,忽然通过查找资料、或者提问,找到了答案,豁然开朗;解决完问题之后再次试运行,咔,又崩了,又不知道是哪里又出了什么问题,又该怎么解决了。就这样循环往复。最近做 Android 平台音视频硬件编解码就是如此。...原创 2021-08-12 20:51:30 · 3976 阅读 · 3 评论 -
【AVD】简述某些视频在线播放时卡顿、本地播放时不卡顿的问题
曾经在业务中遇到过这样的问题,我们编码出来的视频在 Android、iOS 端,使用 ijkplayer 内核的播放器播放时卡顿,甚至无法任意定位播放位置,将导致卡顿无法播放。今天,又有同事遇到类似的问题,而我发现,我只写过一个《用 notepad++ 和 Excel 协助分析媒体文件包》,而并没有把当时遇到的问题分析记录下来。于是,在此简单说明一下。视频文件结构教科书般的教程、课程中对视频文件结构的描述非常详细,此处不赘述,简单地说,视频文件也是一种文件,是文件,就是一堆二进制数的集合,而且是一个.原创 2021-08-04 15:40:19 · 306444 阅读 · 0 评论 -
【AVD】FFmpeg + MediaCodec 实现 Android 硬件解码,中间有个大坑
最近在做移动端音视频编解码,首先要实现的是移动端视频的解码功能。纯的 FFmpeg 方法在移动端也能实现,但是效率上的确要慢一些,1080p 的视频还好,但是上到 2k、4k,那个解码速度(以肉眼可见的速度解码一帧),就没法忍受了。因此要搞移动端硬件解码,以加速解码速度,同时释放部分 CPU 资源。参考 FFmpeg 源码中 examples参考 FFmpeg 官方源码中的 examples 的相关功能实现,来实现自己的程序设计,应该是最快的思路。但是,关于视频解码,FFmpeg 官方源码中,有 d.原创 2021-07-29 12:49:25 · 2728 阅读 · 10 评论 -
【AVD】FFmpeg avcodec_open2 返回 -1 (Operation not permitted) 的一种解决方案
最近在搞 Android 硬解码。在 软解码 和 硬解码 的兼容实现上,进行了各种尝试。后来,忽然发现,无法正常解码了,竟然出现 Failed to open codec。使用 ret = avcodec_open2(ctx, codec, nullptr) 查看到 返回值为 -1,获取到的错误信息是 “Operation not permitted”。这让我很头疼,对 Android 开发而言,权限这种东西,唉。但是经过百度,发现,有网友称是因为 timebase.den 和 timebase.n.原创 2021-07-19 17:02:22 · 2259 阅读 · 1 评论 -
【AVD】杀鸡用牛刀,FFmpeg API 加载存储图片,比 ImageMagic 和 stb_image 快多了
最近工作中遇到一个需求。现有代码中的图形库使用 ImageMagic 加载图片并做简单处理,但是在移植到 iOS 平台的过程中遇到了些问题。于是找到我,看能否用 FFmpeg 实现图片的从文件中读取加载、存储到文件中、以及缩放、裁剪等简单处理,并对比与 ImageMagic 相关功能的效率于是就边学边做,用 FFmpeg API 接口实现了一个 MyImage 类,提供 Load(string filename), Load(uint8_t* buffer, int w, int h, AVPixelF.原创 2021-07-02 00:11:09 · 603 阅读 · 3 评论 -
【AVD】FFmpeg av_packet_unref() 不严谨导致的一次内存泄漏,每次 6MB
FFmpeg 中 av_read_frame 会对 AVPacket 进行初始化,申请 6MB 内存,无论读取成功或失败,均需要使用 av_packet_unref 进行释放。原创 2021-06-11 17:29:53 · 5459 阅读 · 0 评论 -
【转】Windows 下用 ndk-r20b/ndk-r22b 编译 FFmpeg 4.2 Android 库
1. FFmepg简介ffmepg是一个音视频的开发工具。一套可以用来记录、处理数字音频、视频,并将其转换为流的开源框架。采用 LPL、GPL许可制,提供了录制、转换以及流化音视频的完整解决方案。1.1 命令行工具概述下面是一些FFmepg使用时的基本命令,是最基础的内容,我们不用太熟悉FFmpeg里面的代码是如何写的,如我们只需调用:ffmpge -i input.avi -r 24 output.avi就可以把input.avi中的帧率变成24,输出的output.avi就是24fps的视频转载 2021-04-27 15:04:03 · 748 阅读 · 0 评论 -
【AVD】用 notepad++ 和 Excel 协助分析媒体文件包
最近业务上遇到一个比较奇葩的问题。服务器制作的视频在移动端应用页面无法正常播放,尤其是无法拖拽进度条,否则会非常卡顿导致无法播放。然而在小程序、Web不会有问题,下载后播放也不会有问题,在桌面端播放更不会有问题。如果用 FFmpeg 命令行制作,则不会有问题。初步分析,应该是时间戳的问题。因此,需要对比用 FFmpeg 命令行 和 用 FFmpeg api 库制作的两个视频有什么区别。ffprobe 可以查看媒体文件里每个 packet 的信息,但是一般来说音视频文件有很多 packet,终端显示的结果.原创 2021-02-08 23:39:49 · 561 阅读 · 0 评论 -
【Linux】【C++】使用 inotify 监控 ffmpeg 命令行分段渲染是否有分片完成
单线程使用 inotify 监控文件夹变动inotify 的用法网上也有不少,但是以讲解实现原理居多。几个示例也大多类似。本文总结一种单线程中,如何使用 inotify 监控文件夹中的文件变动。具体地说,就是 ffmpeg 命令行渲染音视频文件时,每渲染一帧,我需要知道是否有一个分片已经渲染完成。最新 inotify 用法#include <sys/inotify.h>....// when initint in_fd = inotify_init1(IN_NONBLOCK)原创 2020-11-17 09:40:24 · 349 阅读 · 0 评论