侧边栏
首页代码

随笔分类 -  音视频基础学习

使用QT+FFmpeg 来学习音视频
摘要:一、实现seek功能 我们主要是使用ffmpeg的av_seek_frame方法实现seek功能,但是我们给外界提供seek功能的方法可以不叫seek,我这里使用setTime方法,单位是秒。 /** * 移动视频到指定的关键帧位置 * * @param s 输入媒体的上下文 * @param st 阅读全文
posted @ 2022-11-08 20:29 咸鱼Jay 阅读(314) 评论(0) 推荐(0) 编辑
摘要:简介 音视频同步的实现可以有两种方式 视频同步到音频 音频同步到视频 我们这里选择第一种,因为音频播放的频率是SDL控制的,我们没法改变,所以使用视频同步到音频。 实现音视频同步 在videoplayer.h先定义两个全局变量,用于记录音频时钟和视频时钟 /** 音频时钟,当前音频包对应的时间值 * 阅读全文
posted @ 2022-11-08 20:29 咸鱼Jay 阅读(162) 评论(0) 推荐(0) 编辑
摘要:一、简介 上节介绍了使用SDL播放音频,这节介绍视频显示,其解码流程跟音频差不多。 解码视频是比较耗时的,需要我们自己开个线程去解码,而音频是SDL帮我们管理了子线程去解码音频,初始化音频SDL后就开始进行播放(SDL_PauseAudio(0);)了,一播放就会调用回调函数(sdlAudioCal 阅读全文
posted @ 2022-11-08 17:53 咸鱼Jay 阅读(189) 评论(0) 推荐(0) 编辑
摘要:一、简介 接着上节的音频解码,使用SDL播放音频。 通过上节程序运行打印发现这些音频信息明显不符合SDL的,所以我们需要进行重采样 二、音频重采样 这里我们可以参考之前的《12_采样格式&音频重采样》来实现现在的重采样。 2.1 引入头文件 extern "C" { #include <libswr 阅读全文
posted @ 2022-11-08 17:48 咸鱼Jay 阅读(250) 评论(0) 推荐(0) 编辑
摘要:一、简介 如上图,我们在主线程中开启一个子线程进行解封装,然后在开两个线程分别进行视频解码和音频解码,其中音频解码我们使用的是SDL去渲染,SDL自己会管理子线程,不用我们来创建子线程,而视频解码是需要我们自己创建子线程进行管理。 解封装会解出视频包和音频包,分别塞入各自的队列中,然后各自解码器取出 阅读全文
posted @ 2022-11-08 17:31 咸鱼Jay 阅读(248) 评论(0) 推荐(0) 编辑
摘要:一、简介 我们使用QT+ffmpeg实现一个播放器,这里我们主要是为了学习ffmpege了,而QT只是辅助的,所以播放器的界面搭建我们不在介绍,可以直接看代码(界面搭建代码)。 现在我们直接接入主题,ffmpeg的解封装我们可以直接参考之前介绍的 FFmpeg音视频解封装格式 下面是使用FFmpeg 阅读全文
posted @ 2022-11-08 17:23 咸鱼Jay 阅读(125) 评论(0) 推荐(0) 编辑
摘要:一、简介 为什么要用多线程?在音视频领域主要是实现音视频同步。实现了音视频同步,我们的播放器就基本上合格了。 多线程的好处主要是能使程序更加充分利用硬件(主要是CPU)的性能。但是也存在相应的隐患,如果多线程管理不好,会出现协调问题。 这里我们将讲解一下SDL的多线程与锁机制。 引进的机制:线程的互 阅读全文
posted @ 2022-11-08 17:17 咸鱼Jay 阅读(264) 评论(0) 推荐(2) 编辑
摘要:一、什么是封装格式 封装格式也称为容器,用于打包音频、视频以及字幕等等,比如常见的容器有MP4、MOV、WMV、FLV、AVI、MKV等等。容器里面装的是音视频的压缩帧,但是不是所有类型的压缩帧都可以装入容器中,不同的容器对于压缩帧的格式是有要求的,有一些容器的兼容性要好一些,有一些容器的兼容性就会 阅读全文
posted @ 2022-10-17 10:29 咸鱼Jay 阅读(418) 评论(0) 推荐(2) 编辑
摘要:本文的主要内容:对H.264数据进行解码(解压缩)。 使用FFmpeg命令进行H.264解码 如果是命令行的操作,非常简单。 ffmpeg -c:v h264 -i in.h264 out_cmd.yuv # -c:v h264是指定使用h264作为解码器 使用FFmpeg代码进行H.264解码 接 阅读全文
posted @ 2022-10-17 10:28 咸鱼Jay 阅读(630) 评论(0) 推荐(0) 编辑
摘要:本文的主要内容:使用H.264编码对YUV视频进行压缩。 使用FFmpeg命令进行H.264编码 如果是命令行的操作,非常简单。 ffmpeg -s 640x480 -pix_fmt yuv420p -framerate 30 -i out_640x480.yuv -c:v libx264 out. 阅读全文
posted @ 2022-10-16 20:35 咸鱼Jay 阅读(282) 评论(0) 推荐(0) 编辑
摘要:本文主要介绍一种非常流行的视频编码:H.264。 计算一下:10秒钟1080p(1920x1080)、30fps的YUV420P原始视频,需要占用多大的存储空间? (10 * 30) * (1920 * 1080) * 1.5 = 933120000字节 ≈ 889.89MB 可以看得出来,原始视频 阅读全文
posted @ 2022-10-16 19:36 咸鱼Jay 阅读(126) 评论(0) 推荐(0) 编辑
摘要:前面文章FFmpeg像素格式转换中我们使用FFmpeg实现了一个像素格式转换工具类,现在我们就可以在Qt中利用QImage很容易的实现一个简单的YUV播放器了。 播放器功能很简单,只有播放、暂停和停止。我们定义了一个播放器类YuvPlayer,首先在yuvplayer.h文件中定义外部调用的函数,还 阅读全文
posted @ 2022-10-15 20:51 咸鱼Jay 阅读(932) 评论(0) 推荐(0) 编辑
摘要:简介 前面使用 SDL 显示了一张YUV图片以及YUV视频。接下来使用Qt中的QImage来实现一个简单的 YUV 播放器,查看QImage支持的像素格式,你会发现QImage仅支持显示RGB像素格式数据,并不支持直接显示YUV像素格式数据,但是YUV和RGB之间是可以相互转换的,我们将YUV像素格 阅读全文
posted @ 2022-10-11 17:25 咸鱼Jay 阅读(731) 评论(0) 推荐(0) 编辑
摘要:简介 使用SDL实现简单的YUV播放器。 这里还需要使用到像素格式和计算图片大小,这两个我们直接使用ffmpeg来实现,因此需要使用ffmpeg的libavutil/avutil.h和libavutil/imgutils.h 初始化Video子系统 main.cpp 这里我们把SDL的初始化和退出都 阅读全文
posted @ 2022-10-11 17:24 咸鱼Jay 阅读(237) 评论(0) 推荐(0) 编辑
摘要:一、显示YUV图片 文本的主要内容是:使用[SDL](https://www.cnblogs.com/mjios/p/14581738.html#toc_title_1)显示一张YUV图片,整体过程跟《[显示BMP图片](https://www.cnblogs.com/mjios/p/1473350 阅读全文
posted @ 2022-10-11 09:38 咸鱼Jay 阅读(176) 评论(0) 推荐(0) 编辑
摘要:文本的主要内容是:使用SDL显示一张BMP图片,算是为后面的《显示YUV图片》做准备。 为什么是显示BMP图片?而不是显示JPG或PNG图片? 因为SDL内置了加载BMP的API,使用起来会更加简单,便于初学者学习使用SDL 如果想要轻松加载JPG、PNG等其他格式的图片,可以使用第三方库:SDL_ 阅读全文
posted @ 2022-10-11 09:36 咸鱼Jay 阅读(223) 评论(0) 推荐(0) 编辑
摘要:本文的主要内容:演示如何通过编程采集摄像头的视频数据。 整体的流程跟《08_音频录制02_编程》类似。 依赖库 需要依赖4个库。 extern "C" { #include <libavdevice/avdevice.h> #include <libavformat/avformat.h> #inc 阅读全文
posted @ 2022-10-10 15:03 咸鱼Jay 阅读(41) 评论(0) 推荐(0) 编辑
摘要:本文的主要内容:演示如何利用命令行采集摄像头的视频数据。 阅读本文之前,建议先阅读《07_音频录制01_命令行》对常用命令作一个基本认识。 Windows dshow支持的设备 ffmpeg -f dshow -list_devices true -i dummy 输出结果大致如下所示。 Direc 阅读全文
posted @ 2022-10-10 00:17 咸鱼Jay 阅读(158) 评论(0) 推荐(0) 编辑
摘要:本文的主角是多媒体领域非常重要的一个概念:YUV。 简介 YUV,是一种颜色编码方法,跟RGB是同一个级别的概念,广泛应用于多媒体领域中。 也就是说,图像中每1个像素的颜色信息,除了可以用RGB的方式表示,也可以用YUV的方式表示。 vs RGB 对比RGB,YUV有哪些不同和优势呢? 体积更小 如 阅读全文
posted @ 2022-10-10 00:13 咸鱼Jay 阅读(226) 评论(1) 推荐(0) 编辑
摘要:本文主要讲解:如何将AAC编码后的数据解码成PCM。 命令行 用法非常简单: ffmpeg -c:a libfdk_aac -i in.aac -f s16le out.pcm -c:a libfdk_aac 使用fdk-aac解码器 需要注意的是:这个参数要写在aac文件那边,也就是属于输入参数 阅读全文
posted @ 2022-10-08 16:34 咸鱼Jay 阅读(360) 评论(0) 推荐(0) 编辑

页脚HTML代码
点击右上角即可分享
微信分享提示