10 2022 档案
摘要:在《Java与CC++交互JNI编程》中有讲过AttachCurrentThread和DetachCurrentThread的使用。 我们知道在jni中我们可以使用pthread或者std::thread创建线程。因为线程并不是从Java环境创建的,所以这时候创建出的线程是没有JNIEnv的。如果需
阅读全文
摘要:一、什么是封装格式 封装格式也称为容器,用于打包音频、视频以及字幕等等,比如常见的容器有MP4、MOV、WMV、FLV、AVI、MKV等等。容器里面装的是音视频的压缩帧,但是不是所有类型的压缩帧都可以装入容器中,不同的容器对于压缩帧的格式是有要求的,有一些容器的兼容性要好一些,有一些容器的兼容性就会
阅读全文
摘要:本文的主要内容:对H.264数据进行解码(解压缩)。 使用FFmpeg命令进行H.264解码 如果是命令行的操作,非常简单。 ffmpeg -c:v h264 -i in.h264 out_cmd.yuv # -c:v h264是指定使用h264作为解码器 使用FFmpeg代码进行H.264解码 接
阅读全文
摘要:本文的主要内容:使用H.264编码对YUV视频进行压缩。 使用FFmpeg命令进行H.264编码 如果是命令行的操作,非常简单。 ffmpeg -s 640x480 -pix_fmt yuv420p -framerate 30 -i out_640x480.yuv -c:v libx264 out.
阅读全文
摘要:本文主要介绍一种非常流行的视频编码:H.264。 计算一下:10秒钟1080p(1920x1080)、30fps的YUV420P原始视频,需要占用多大的存储空间? (10 * 30) * (1920 * 1080) * 1.5 = 933120000字节 ≈ 889.89MB 可以看得出来,原始视频
阅读全文
摘要:前面文章FFmpeg像素格式转换中我们使用FFmpeg实现了一个像素格式转换工具类,现在我们就可以在Qt中利用QImage很容易的实现一个简单的YUV播放器了。 播放器功能很简单,只有播放、暂停和停止。我们定义了一个播放器类YuvPlayer,首先在yuvplayer.h文件中定义外部调用的函数,还
阅读全文
摘要:简介 前面使用 SDL 显示了一张YUV图片以及YUV视频。接下来使用Qt中的QImage来实现一个简单的 YUV 播放器,查看QImage支持的像素格式,你会发现QImage仅支持显示RGB像素格式数据,并不支持直接显示YUV像素格式数据,但是YUV和RGB之间是可以相互转换的,我们将YUV像素格
阅读全文
摘要:简介 使用SDL实现简单的YUV播放器。 这里还需要使用到像素格式和计算图片大小,这两个我们直接使用ffmpeg来实现,因此需要使用ffmpeg的libavutil/avutil.h和libavutil/imgutils.h 初始化Video子系统 main.cpp 这里我们把SDL的初始化和退出都
阅读全文
摘要:一、显示YUV图片 文本的主要内容是:使用[SDL](https://www.cnblogs.com/mjios/p/14581738.html#toc_title_1)显示一张YUV图片,整体过程跟《[显示BMP图片](https://www.cnblogs.com/mjios/p/1473350
阅读全文
摘要:文本的主要内容是:使用SDL显示一张BMP图片,算是为后面的《显示YUV图片》做准备。 为什么是显示BMP图片?而不是显示JPG或PNG图片? 因为SDL内置了加载BMP的API,使用起来会更加简单,便于初学者学习使用SDL 如果想要轻松加载JPG、PNG等其他格式的图片,可以使用第三方库:SDL_
阅读全文
摘要:本文的主要内容:演示如何通过编程采集摄像头的视频数据。 整体的流程跟《08_音频录制02_编程》类似。 依赖库 需要依赖4个库。 extern "C" { #include <libavdevice/avdevice.h> #include <libavformat/avformat.h> #inc
阅读全文
摘要:本文的主要内容:演示如何利用命令行采集摄像头的视频数据。 阅读本文之前,建议先阅读《07_音频录制01_命令行》对常用命令作一个基本认识。 Windows dshow支持的设备 ffmpeg -f dshow -list_devices true -i dummy 输出结果大致如下所示。 Direc
阅读全文
摘要:本文的主角是多媒体领域非常重要的一个概念:YUV。 简介 YUV,是一种颜色编码方法,跟RGB是同一个级别的概念,广泛应用于多媒体领域中。 也就是说,图像中每1个像素的颜色信息,除了可以用RGB的方式表示,也可以用YUV的方式表示。 vs RGB 对比RGB,YUV有哪些不同和优势呢? 体积更小 如
阅读全文
摘要:本文主要讲解:如何将AAC编码后的数据解码成PCM。 命令行 用法非常简单: ffmpeg -c:a libfdk_aac -i in.aac -f s16le out.pcm -c:a libfdk_aac 使用fdk-aac解码器 需要注意的是:这个参数要写在aac文件那边,也就是属于输入参数
阅读全文
摘要:本文将分别通过命令行、编程2种方式进行AAC编码实战,使用的编码库是libfdk_aac。 要求 fdk-aac对输入的PCM数据是有参数要求的,如果参数不对,就会出现以下错误: [libfdk_aac @ 0x7fa3db033000] Unable to initialize the encod
阅读全文
摘要:本文来详细讲解一下:如何在Mac、Windows环境下成功编译FFmpeg。 目标 这里先提前说明一下,最后希望达到的效果: 编译出ffmpeg、ffprobe、ffplay三个命令行工具 只产生动态库,不产生静态库 将fdk-aac、x264、x265集成到FFmpeg中 x264、x265会在以
阅读全文
摘要:AAC(Advanced Audio Coding,译为:高级音频编码),是由Fraunhofer IIS、杜比实验室、AT&T、Sony、Nokia等公司共同开发的有损音频编码和文件格式。 对比MP3 AAC被设计为MP3格式的后继产品,通常在相同的比特率下可以获得比MP3更高的声音质量,是iPh
阅读全文
摘要:采样格式 通过前面学习我们知道FFmpeg和SDL都有自己的采样格式的表达式,那么他们都表示什么意思呢? FFmpeg的采样格式的表达式: enum AVCodecID { ...... AV_CODEC_ID_PCM_S16LE = 0x10000, AV_CODEC_ID_PCM_S16BE,
阅读全文
摘要:使用命令播放WAV 对于WAV文件来说,可以直接使用ffplay命令播放,而且不用像PCM那样增加额外的参数。因为WAV的文件头中已经包含了相关的音频参数信息。 ffplay in.wav 接下来演示一下如何使用SDL播放WAV文件。 初始化子系统 // 初始化Audio子系统 if (SDL_In
阅读全文
摘要:播放器是无法直接播放PCM的,因为播放器并不知道PCM的采样率、声道数、位深度等参数。当PCM转成某种特定的音频文件格式后(比如转成WAV),就能够被播放器识别播放了。 本文通过2种方式(命令行、编程)演示一下:如何将PCM转成WAV。 WAV文件格式 在进行PCM转WAV之前,先再来认识一下WAV
阅读全文
摘要:通过命令ffpay播放PCM 可以使用ffplay播放《08_音频录制02_编程》中录制好的PCM文件,测试一下是否录制成功。 播放PCM需要指定相关参数: ar:采样率 ac:声道数 f:采样格式,sample_fmts + le(小端)或者 be(大端) sample_fmts可以通过ffpla
阅读全文
摘要:通过编程录音 开发录音功能的主要步骤是: 注册设备 获取输入格式对象 打开设备 采集数据 释放资源 需要用到的FFmpeg库有4个。 extern "C" { // 设备相关API #include <libavdevice/avdevice.h> // 格式相关API #include <liba
阅读全文
摘要:终于要开始进行FFmpeg实战了,一起来感受一下FFmpeg的强大吧。 命令简介 FFmpeg的bin目录中提供了3个命令(可执行程序),可以直接在命令行上使用。 ffmpeg ffmpeg的主要作用:对音视频进行编解码。 # 将MP3文件转成WAV文件 ffmpeg -i xx.mp3 yy.wa
阅读全文
摘要:.pro文件的配置 跨平台配置 之前我们分别在Windows、Mac环境的Qt项目中集成了FFmpeg。 可以发现在.pro文件的配置中,FFmpeg库在Mac、Windows上的位置是有所差异的。这样就会导致.pro文件无法跨平台使用。 # windows INCLUDEPATH += D:/So
阅读全文
摘要:在不同的Mac环境下,实践出来的效果可能跟本教程会有所差异。我的Mac环境是:Intel CPU、macOS Moterey(12.4)。 FFmpeg 安装 在Mac环境中,直接使用Homebrew安装FFmpeg即可。还没有安装Homebrew,或者嫌Homebrew下载速度慢的童鞋,可以参考这
阅读全文
摘要:FFmpeg 为什么选择FFmpeg? 每个主流平台基本都有自己的音视频开发库(API),用以处理音视频数据,比如: iOS:AVFoundation、AudioUnit等 Android:MediaPlayer、MediaCodec等 Windows:DirectShow等 ... 为了让所有平台
阅读全文
摘要:我们平时在互联网上听到的声音,都是先经过录制后,再传输到互联网上的。比如歌曲、电影、主播等的声音。 PCM 录音的原理可以简单理解为:把声源的振动记录下来,需要时再让某个物体按照记录下来的振动规律去振动,就会产生与原来一样的声音。 如何把声音(声源的振动)记录下来呢?声音属于模拟信号,但更便于计算机
阅读全文
摘要:关于声音的知识,记得没错的话,是属于初中物理的内容。为了学好音视频,我们有必要重新温习一下声音的相关知识。需要提醒的是:本文的GIF动态图比较多,建议选择在网络较好的环境中阅读。 产生 声音(Sound),是由物体的振动产生的。一切正在发声的物体都在振动。 我们说话的时候,是声带在振动。一边说话一边
阅读全文
摘要:1 官方 Homebrew是Mac上非常优秀的软件包管理工具。 1.1 前提 Mac安装Homebrew的前提条件: 64bit Intel CPU或Apple Silicon CPU(M1) macOS Mojave(10.14)或更高版本 安装Xcode命令行工具(Command Line To
阅读全文