自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我是一只小小小小鸟

想要飞却怎么样也飞不高。

  • 博客(107)
  • 收藏
  • 关注

翻译 【R】Advanced R —— 1 Introduction

我现在已经在R编程领域工作了15年以上,过去5年一直全职从事这项工作。这使我有了足够的时间来深入研究这门语言的工作原理。我努力尝试将我所学传授给你,以便你能够尽快、尽量不费力地理解R的复杂性。阅读它将帮助你避免我曾经犯过的错误和我曾经走过的死胡同,它将教会你有用的工具、技巧和习惯用法,可以帮助你解决许多类型的问题。在这个过程中,我希望能够展示,尽管它有时会有令人沮丧的怪癖,但R在本质上是一门优雅而美丽的语言,非常适合数据科学领域。

2023-09-10 10:08:15 119

翻译 【R】Advanced R —— Welcome & Preface

欢迎来到第二版。加强对重要概念的覆盖,这些概念在第一版出版后我才完全理解。减少对时间证明不太有用的主题的覆盖,或者我认为非常令人兴奋但实际上并不太实用的主题。通过更好的文本、更清晰的代码和更多的图表,使文章内容更易理解。如果你熟悉第一版,那么这个前言将描述主要的变化,这样你可以将阅读重点放在新领域上。如果你正在阅读印刷版的这本书,你会很快注意到一个很大的变化:现在是彩色的!这极大地改善了代码块的语法高亮显示,并使创建有用的图表变得更加容易。

2023-09-10 00:07:53 95

原创 【Windows】使用 MinGW 编译 FFmpeg 踩坑记录

在 Windows 平台使用 MinGW 和 Git Bash 终端编译带 x264、fdk-aac 以及 nvdec 的 FFmpeg 静态库,遇到了很多坑,记录一下。

2023-01-31 17:49:08 1283 1

原创 【Windows】快速解决 Git bash chmod+x filename 不生效

在 Windows git bash 上实现 +x 操作。

2023-01-26 12:48:32 1339

原创 【Windows】Windows 平台使用 MinGW 编译程序遇到报错 cannot execute binary file: Exec format error 的一种原因

exec format error 原因很多,其中一个原因可能是 ELF 文件依赖的某个静态依赖库存在问题。

2023-01-21 21:18:33 3436

原创 【AVD】Linux 编译支持 Cuda 的 OpenCV 4.6,解决报错 throw_no_cuda

最近在做视频镜头切换检测功能,需要用 OpenCV 计算某一帧图像的直方图,于是尝试着在 Linux 上编译安装 OpenCV。

2022-10-13 20:31:18 3316 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 1308

原创 【C++】慎用 erase(iterator),尤其在多线程中

不要使用 erase(iterator),除非你确定这个容器非空,并且 iterator 是正常值。

2022-10-10 18:43:12 404

转载 【AVD】【转载翻译】NVDEC_VideoDecoder_API_ProgGuide

NVIDIA Video Codec SDK 解码文档翻译。

2022-09-28 00:05:47 897

原创 【Mac】破解死循环,成功安装 Homebrew、curl、wget,快速配置 zsh

为配置 zsh,串联安装配置了 openssl、curl、Homebrew、wget。

2022-08-11 14:16:07 3282 2

转载 【Build】关于-fPIC, -fpic, -fpie, -fPIE的一点理解

fPIC fPIE 有什么区别

2022-07-01 16:24:20 994

原创 【Build】Linux / Android 动态库常用操作方法 查找、查看依赖、版本,pkg-config 用法

Linux快速查找机器上的库ldconfig -p | grep <lib_name>ldconfig -p 会打印出当前系统已经安装的动态库信息,然后使用grep找你的lib即可查看库的依赖readelf -d <lib_name> 该命令查看库依赖哪些库,但不能查看它依赖的库存放在机器的什么位置ldd <lib_name> 该命令能看到库依赖的那些库的具体路径及名称查看 Android 库的依赖使用位于 ndk 目录下的工具,例如~/Android/

2022-05-25 12:37:19 1720

原创 CMake include_directories 和 target_include_directories,头文件的搜索顺序

业务中遇到个问题,引用了 jsoncpp 这个库之后,需要引用其头文件,但其头文件进一步引用了 jsoncpp 安装位置的其他头文件,但如果一台 Linux 机器上在不同的路径安装了两个不同版本的 jsoncpp 库,并且这两个路径都是该项目的头文件包含路径,那么,编译器会先找哪个路径下的头文件呢?带着这个问题,我开始翻阅 camke 的官方文档,由于是全英文版,读起来还是很费劲,因此先翻译出来。翻译完之后发现,include 的顺序跟翻译关系不大,因此,又将文档翻译写到了后半段,而把实验写到了前半段。.

2022-05-10 18:30:46 2387

翻译 【Tool】Pipeline architecture(Pipeline 架构)

文章目录Basic PipelineDirected Acyclic Graph(有向无环图)PipelinesChild / Parent PipelinePipeline 是 GitLab CI/CD 中的基础构建块(building blocks)。本文记录了与其相关的几个重要概念。你有三种常见方法来设计(structure)你的 pipelines,它们各有优势。如有需要,这些方法也可以混用或连用(mixed and matched):Basic:适用于直观、简单的(straightforw

2022-04-05 23:06:47 684

原创 【Tool】Gitlab CI Runner 配置过程中的若干问题( yml 中因 host key 问题无法执行 git clone、yml invalid、backspace 键不能用 等)

最近工作中希望能实现 CI / CD,于是让我做个探索。从网上找了一堆资料,发现 Jenkins 不错。但经同公司不同部门同事建议,Gitlab runner 更简单直接。于是,就在其文档和相关博文的指导下搞了个基于 Gitlab runner 的 CI 工程。该文并非指导性博文,只是对配置 CI 工程过程中的若干琐碎问题的一个整理,因网上的相关教程,并未提及这些不太容易解决的问题。GitLab-Runner 的安装如果只参考官网的 GitLab Runner 安装文档,则有很大可能会陷入一个 cu.

2022-03-25 20:18:19 2429

原创 【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 1313

原创 【C++】编译时遇到链接器报错 undefined reference to `vtable for xxx::xxx()` 的一种原因

最近业务中编译代码时遇到个问题。搜索解决方案时有点儿费劲。特此记录一下。参考某 博文,报这个错的原因是父类xxx中有虚函数未实现。这个未实现的虚函数,不一定是构造函数和析构函数。而是这个父类中所有定义的虚函数。因此,解决这个报错,要么给虚函数一个默认实现,例如 virtual void Function() {},要么直接定义为纯虚函数,即 virtual void Function() = 0;。...

2022-03-17 10:40:49 1582

原创 【AVD】简述 C++ 解码 HEIF HEIC 图片

一个好用的 C++ 库解码 HEIC 格式图片

2021-12-25 23:46:56 3691 1

原创 【C++】fstream 读文件基本用法 以及 不要使用 using namespace std

不要使用 using namespace std;fstream 打开、读取文件的基本方法。

2021-12-24 11:26:53 1296

原创 【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 1287

原创 【AVD】C++ 不解码获取 JPG 图片宽高、旋转信息等 EXIF 信息

不解码,使用 C++ 类来快速获取 JPG 文件的宽高及旋转信息。

2021-12-22 21:54:34 3332

原创 【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 2759

原创 【C++】尽量使用 snprintf 而非 sprintf 来保证内存安全,防止类实例的私有成员变量被改写

类的实例的私有成员变量被改写最近业务中遇到一个很奇怪的问题,在某些状态下,一个实例的首个指针成员变量的值(即指针指向的地址)被修改。原本这个指针变量的值为 0x7555555aa5555580,结果在不知道何时被改写成了 0x7555555aa5555500。如果在这个类的声明时,在该指针成员变量之前声明一个 int,则发现那个 int 会在某刻被改写,虽然成功绕过了因指针成员变量的值被改写而导致的错误地址使用。但是,这并不是个优雅的解法。sprintf 的锅经过同事两三天研究尝试,终于发现,是在上层

2021-12-22 10:48:01 437 1

原创 【Tools】CMake 在 Linux C/C++ 编程中的极速入门

极简原理一般来说,一个 C/C++ 工程可以被编译为三种目标结果:静态库、动态库、可执行程序。无论要编译的工程是一个静态库、动态库还是可执行程序,一般来说,需要四大输入:头文件目录、源码、链接库目录、链接库名称。所以,CMakeLists.txt 的主要内容就是写好所需的目标结果、以及为了目标结果的输入。极简语法shell 中的语法CMakeLists.txt 是编译时的输入文件,即,在 shell 环境中输入 cmake <dir> 例如 cmake . 时,dir 目录 (例如

2021-12-16 21:42:57 872

原创 【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 4452

原创 【Tools】VSCode 不提示错误,VSCode C/C++ Intellicode 不用红色波浪线提示错误

在设置中关闭了按住 Ctrl 和 逗号, 或者 File->Preference->Settings(文件->首选项->设置),从 Settings(设置) 页面最上方的搜索栏里搜索 squiggles,有一项 Error Squiggles,把它改为 Enable 或者 EnabledIfIncludesResolve。在 settings.json 中关闭了如果从设置中打开了,还是不行。或者你发现,在你的 workspace 里,有的项目行,有的项目不行,那就很可能是项目设

2021-12-03 17:18:10 6660 9

原创 【AVD】菜鸟工程师写给门外汉的离线音视频开发入门(基于FFmpeg)

自从去年7月份以来已接触离线音视频开发一年有余,到现在对音视频编解码开发有了一定的基础。做过小白,才更了解对音视频没什么基础的小白更想了解哪些内容。因此有了这篇文章。常见概念本文主要用通俗易懂的视角来描述几个在音视频开发中用到的概念及主要的编解码流程。这些概念包括:封装流包、帧、采样编码格式音视频开发编解码的常见流程是:#mermaid-svg-JqxhUY3TpkY2IXV1 .label{font-family:'trebuchet ms', verdana, arial;fon.

2021-10-18 11:09:52 814 6

转载 C++中的delete和delete[ ]的区别

以前看书的时候,书上说使用new申请的内存,释放时用delete,使用new [ ]申请的内存释放时要用delete [ ]才行,这两个一定要记住,申请时用了方括号,则释放时也要加上方括号,否则就会出错。但是并没有解释为什么这样,会出什么错。今天正好看到这个,记录下。关于动态申请的内存,分两种情况:基本数据类型的分配和自定义数据类型的分配。两者不同。1、基本数据类型对于基本数据类型,假如有如下代码int *a = new int[10];…delete a; // 方式1delete [

2021-08-31 11:39:11 147

原创 【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 561

原创 【AVD】NDK MediaCodec 编码中的坑 configure: err(-2147479551) error -38 Fatal signal 4 (SIGILL) ILL_ILLOPC

感觉程序开发的状态,大约是这样的,昨天,横看成岭侧成峰,远近高低各不同;今天,山重水复疑无路,柳暗花明又一村;明天,正入万山圈子里,一山放过一山拦。尤其是搞一些自己并不熟悉的领域,最开始,绞尽脑汁,不知道问题是怎么出现的,又该怎么解决;就在接近放弃之时,忽然通过查找资料、或者提问,找到了答案,豁然开朗;解决完问题之后再次试运行,咔,又崩了,又不知道是哪里又出了什么问题,又该怎么解决了。就这样循环往复。最近做 Android 平台音视频硬件编解码就是如此。...

2021-08-12 20:51:30 3624 3

原创 【AVD】简述某些视频在线播放时卡顿、本地播放时不卡顿的问题

曾经在业务中遇到过这样的问题,我们编码出来的视频在 Android、iOS 端,使用 ijkplayer 内核的播放器播放时卡顿,甚至无法任意定位播放位置,将导致卡顿无法播放。今天,又有同事遇到类似的问题,而我发现,我只写过一个《用 notepad++ 和 Excel 协助分析媒体文件包》,而并没有把当时遇到的问题分析记录下来。于是,在此简单说明一下。视频文件结构教科书般的教程、课程中对视频文件结构的描述非常详细,此处不赘述,简单地说,视频文件也是一种文件,是文件,就是一堆二进制数的集合,而且是一个.

2021-08-04 15:40:19 276122

原创 【AVD】FFmpeg + MediaCodec 实现 Android 硬件解码,中间有个大坑

最近在做移动端音视频编解码,首先要实现的是移动端视频的解码功能。纯的 FFmpeg 方法在移动端也能实现,但是效率上的确要慢一些,1080p 的视频还好,但是上到 2k、4k,那个解码速度(以肉眼可见的速度解码一帧),就没法忍受了。因此要搞移动端硬件解码,以加速解码速度,同时释放部分 CPU 资源。参考 FFmpeg 源码中 examples参考 FFmpeg 官方源码中的 examples 的相关功能实现,来实现自己的程序设计,应该是最快的思路。但是,关于视频解码,FFmpeg 官方源码中,有 d.

2021-07-29 12:49:25 2375 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 2082 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 555 3

原创 【AVD】FFmpeg av_packet_unref() 不严谨导致的一次内存泄漏,每次 6MB

FFmpeg 中 av_read_frame 会对 AVPacket 进行初始化,申请 6MB 内存,无论读取成功或失败,均需要使用 av_packet_unref 进行释放。

2021-06-11 17:29:53 5227

原创 【Debug】死循环、阻塞,程序停不下来了怎么知道卡在哪儿了

最近工作上遇到一个 BUG。一个影集制作程序在渲染到 44% 的时候卡住了,没崩溃,也不再继续渲染(下一条渲染进度 log 不打印),也结束不了。 程序是可以单步调试的找出卡点第一次遇到这样的问题,有点懵。虽然能单步调试,但是从 0% 一步一步执行到 44% ,即使是自动运行都要几分钟,更别说一步步运行了。这肯定不行。条件断点是个好东西。...

2021-05-28 14:58:48 2660

转载 【转】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 721

原创 【AVD】用 notepad++ 和 Excel 协助分析媒体文件包

最近业务上遇到一个比较奇葩的问题。服务器制作的视频在移动端应用页面无法正常播放,尤其是无法拖拽进度条,否则会非常卡顿导致无法播放。然而在小程序、Web不会有问题,下载后播放也不会有问题,在桌面端播放更不会有问题。如果用 FFmpeg 命令行制作,则不会有问题。初步分析,应该是时间戳的问题。因此,需要对比用 FFmpeg 命令行 和 用 FFmpeg api 库制作的两个视频有什么区别。ffprobe 可以查看媒体文件里每个 packet 的信息,但是一般来说音视频文件有很多 packet,终端显示的结果.

2021-02-08 23:39:49 522

原创 【C++】打印程序执行时间的两种方法(分别以秒和时钟个数为单位) <time.h> 和 <ctime>

最近调试代码时发现,新架构的实现比旧架构肉眼可见地慢了很多。但是又不确定是哪个环节出了问题。于是,便需要在特定的环境中打印程序语句的执行时间,来对比判断,到底是哪个过程比原来花费了更多的时间。<time.h> 可以打印秒级时间起初,我想直接用工程中就有的 <time.h> 头文件的相关接口来打印。具体使用方法如下:#include <time.h>// ....int PAVFastFileEncodeTool::EncodeOneFrame(uint8_t.

2021-02-07 23:29:02 2453 1

原创 【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 337

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除