自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (3)
  • 收藏
  • 关注

原创 关于Qt适配不同分辨率和缩放率时可能遇到的问题和解决方案

如果没有特殊的处理,Qt的UI窗口在不同的分辨率和缩放率下,其显示效果可能会出现问题,常见的有:子控件堆叠,无法显示完整窗口尺寸变大,超出屏幕的显示范围控件变形,长宽比不合理界面模糊字体变大,控件尺寸却没有变化有两种方式可以对UI界面进行良好的缩放:Qt不做任何事情,由windows系统负责缩放windows系统不做任何事情,由Qt负责进行缩放。

2023-09-18 11:24:53 6358 6

原创 按照文本自动换行分隔字符串

按照文本自动换行分隔字符串

2022-06-21 18:22:34 776 1

原创 ffmpeg组件化再封装(五)

6 将AVFrame保存成图片/* * after done with return AVFrame,user must free it with av_frame_free() **/AVFrame *ConvertVideoFrameTo(AVFrame *piFrame,uint32_t nWidth, uint32_t nHeight,enum AVPixelFormat sPixFmt){ int nRet; if(NULL == piFrame)

2021-07-24 21:17:59 333 1

原创 ffmpeg组件化再封装(四)

现在,ffmpeg的组件化完成了,我们使用它们来处理一些媒体。1 保存视频帧为文件void SaveVideoSimulateToFile(){ OutputFileHandler *piOutput = OutputFileHandler::CreateOutputFileHandler("aaa.mp4"); if(piOutput) { OutputStreamHandler *piOutStream = OutputStreamHa...

2021-07-24 21:17:25 214

原创 ffmpeg组件化再封装(三)

上一篇对各个类型的Handler做了简单介绍,事实上,它们也并不复杂,仅是对ffmpeg做了功能划分并做了结构化而已。 下面对一些实现进行一些说明:1 InputFileHandler 在ffmpeg的示例代码中,对输入数据的处理是从上游到下游的,从文件中每读取到一个AVPacket,就做对应的处理。然而,在我们这里的结构中,恰恰想法,是位于数据流下方的handler向上方的handler读取数据,这时就有了问题。 假如输入文件有vi...

2021-07-24 21:16:47 175 1

原创 ffmpeg组件化再封装(二)

现在,我们介绍AVIOHandler.h,它定义了组件的基类,是整个代码实现的基石。 首先,说明一下自己的思路:媒体处理是流式的 处于处理链条上的不同处理器的功能各不相同 处理器读取输入,进行处理,然后输出 有了这些之后,经过仔细思考,定义了如下两个主要类型:AVIOHandler和ReadPoint。 AVIOHandler,表示一个处理器,处理器的类型有多种,其功能各不相同。它从N个输入读取数据,然后将结果“写出”到多个输出中,...

2021-07-24 21:16:08 211 1

原创 ffmpeg组件化再封装(一)

一开始学习ffmpeg的时候,看着各种示例代码中长长的c函数,心里总是莫名地升起几分烦躁,感觉这代码梳理起来实在有点费劲。等到对ffmpeg的API有了一定的了解,也看了不少示例后,又觉得其中重复地代码非常的多,于是有了用C++对ffmpeg进行组件化的想法,后来慢慢动手,一点点添加代码,修改代码,测试,终于磨出来了一个基本的实现。 相信我,这个过程拖得时间太长了,现在总算勉强可以告一段落了。 首先,说明一下这个再封装的目的:简单来说,就是将ffmpe...

2021-07-24 21:15:23 378

原创 使用live555实现实时流的推流服务器

公司项目中需要一个小型的实时流推流服务器,在之前的代码中是使用ffserver来完成这个功能的,但由于种种原因,需要重新实现实时流服务这一块的内容。经过一段时间的尝试,终于有了结果,在这里分享一下。代码平台是ubuntu,使用了ffmpeg(编译时带libx264)、opencv、live555三个库。首先,说一下这个推流服务器的使用场景和要求:1. 在针对图片做算法时,往往会用到opencv库,此时一张图片就是一个cv::Mat,因此要求推流以cv::Mat为单位,即手动地将一张张图片推.

2020-11-14 16:32:37 6784 1

原创 librtmp库API介绍及其结构概述

文章目录librtmp库API介绍及其结构概述1、librtmp API的使用1.1 librtmp API的使用流程1.2 librtmp的实例1.3 librtmp API详解1.3.1 librtmp中的chunk和message1.3.2 RTMP基本API1.3.3 设置RTMP的属性1.3.4 连接服务器1.3.5 创建rtmp流1.3.6 对RTMP流的操作1.3.6.1 控制类API1.3.6.2 查询类API1.3.6.3 读写类API2. librtmp数据流的读写流程2.1 传输层

2020-10-31 13:27:57 5991

原创 rtmpdump命令行详解

文章目录rtmpdump使用说明命令行语法选项网络参数连接参数会话参数安全参数杂项退出状态环境变量rtmpdump使用说明​ rtmpdump是一个命令行工具,它可以接收通过RTMP协议传输的流媒体内容,并转存下来。​ rtmpdump的工作原理:首先rtmpdump会连接到指定的RTMP服务器,然后播放给定URL指定的媒体。Url的形式如下:rtmp[t][e]://hostname[:port][/app[/playpath]]​ 支持rtmp以及其变种协议,也支持安全加密链路以及加密的会话

2020-10-31 13:23:26 2850 1

原创 FFmpeg API 之 libavfilter

filter,可以翻译为过滤器,滤镜。在 FFmpeg 中有多种多样的滤镜,你可以把他们当成一个个小工具,专门用于处理视频和音频数据,以便实现一定的目的。如 overlay 这个滤镜,可以将一个图画覆盖到另一个图画上;transport 这个滤镜可以将图画做旋转等等。一个 filter 的输出可以作为另一个 filter 的输入,因此多个 filter 可以组织成为一个网状的 filter graph,从而实现更加复杂或者综合的任务。关于 filter 的概念和用法可以去查找 FFmpeg 的其他资

2020-06-06 16:33:39 1293

原创 FFmpeg API 之 Timestamp和TimeBase的辅助计算函数

首先,我们查看一下后面要用到的枚举变量AVRounding。它定义了舍入法,即如何将含有小数部分的数字转化为整数的方法。enum AVRounding { AV_ROUND_ZERO = 0, ///< Round toward zero. AV_ROUND_INF = 1, ///< Round away from zero. AV_ROUND_DOWN = 2, ///< Round toward -infinity.

2020-06-03 18:18:09 389

原创 FFmpeg API 之 libswresample

libswresample 库是用于音频重采样,格式转换,音频混合的库。重采样:即前后的 sample rate 不同格式转化:即前后的 format 不同音频混合:即前后的 channel_layout不同,而且前面的通道数小于后面的通道数库中最重要的结构体是 SwrContext,我们对音频的操作都是通过这个结构体进行的。SwrContext 结构体是不透明的,因此其参数必须通过 option API 来设置其选项。如果想要指定一个音频重采样,其步骤如下:分配一个SwrCo.

2020-05-31 19:37:36 845

原创 FFmpeg API 之 libswscale

libswscale 库用来做图片转化。我们在处理图片数据时,经常有诸如缩放尺寸,转化像素格式的需求。这些操作较为简单,在 FFmpeg 中是非常常见的操作,其效率对 FFmpeg 影响较大。因此,FFmpeg 提供了 libswscale 库。当我们获取到一个视频 Frame 后,相关的视频数据都存放在这个帧中(详情见AVFrame一节)。我们知道linesize 字段中保存了图片的每行的字节大小,因此,在 Frame 中,图片自然以行为基本单位进行操作,这点在转化中体现的比较明显。..

2020-05-28 22:14:36 400

原创 FFmpeg API 之 AVAudioFifo

AVAudioFifo是一个缓冲区,它以一次音频采样为基本单位,是一个先进先出的队列。有了它,对音频的采样数据做缓冲就会变得非常简单,其优势有两点:一,它让我们在采样层面做操作,而不是更底层的字节层面;二,它支持多种格式的单次采样,如支持planar或packed的采样格式,支持不同的通道数等等。AVAudioFifo的操作相对简单,我们看一下其相关的API。首先是分配和释放操作://分配一个AVAudioFifo。//sample_fmt和channels指定单次采样的参数//nb_sa

2020-05-26 15:02:35 1735 1

原创 FFmpeg API 之 AVSampleFormat

音频采样格式所描述的数据总是使用本地字节序。因此,采样数据可以用本地C语言类型来表示。虽然 有符号的32位 采样格式是一种非常常见的原始音频数据格式,但由于C语言中没有对应的类型,因此在FFmpeg中也就没有这种采样格式。 浮点数类型的音频采样格式基于如下设定:全部音量的取值范围为 [-1.0~1.0] ,它表示了完整的音量范围。任何超出这个范围的值都在音量可取范围之外。 音频采样数据的布局 对于 planar 采样格式来说,每个通道都有自己独立的数据缓冲区,通常称为一个平面(p..

2020-05-26 14:41:07 1696

原创 FFmpeg API 之 libavformat库

libavformat库,是FFmpeg中用于处理各种媒体容器格式(media container format)的库。它的两个最主要的功能是 : demuxing:解封装,将一个媒体文件分割为多个多媒体流 muxing:封装,将多个多媒体数据流写入到指定媒体容器格式的文件中 这两个过程所做的事情正好相反,是互逆的。我们注意到,在 mux 和 demux 的过程中,均少不了要从 input 读取 和 写入 output 的过程,因此 libavformat 单独分出了一个子模块,用于

2020-05-25 16:30:59 3011

原创 FFmpeg API 之 libavcodec库

libavformat 库负责封装和解封装,而 libavcodec 则用于解码和编码。类型 AVPacket 表示编码后的数据,其中包含一个或多个编码后的帧数据。类型 AVFrame 表示解码后,或者说原始的帧数据。编码和解码在某种程度来说,就是两者之间的互相转换。1、编解码概述FFmpeg 提供的 encode/decode API 有如下四个函数 avcodec_send_packet () / avcodec_receive_frame () / avcodec_send_fram.

2020-05-25 11:34:21 5080

原创 FFmpeg API 之 AVFrame

AVFrame 是 FFmpeg 中最常见的类型之一。AVFrame 表示一个未压缩或者说原始的视频帧或者音频帧。AVFrame 首先要区分它是一个视频帧还是一个音频帧,当其类型不同时,我们需要关注的字段也是不同的。AVFrame.format 字段表示其格式,当其为视频帧时,它是 AVPixelFormat,表示组成帧图片的像素的格式。当其为音频帧时,它是 AVSampleFormat,表示音频的取样格式。当 AVFrame 为视频帧时,我们应该关注如下字段: format:为.

2020-05-24 18:12:57 973

原创 FFmpeg API 之 AVPacket

AVPacket 是 FFmpeg 中最常见的类型之一。AVPacket类,用于存储编码后的帧数据。它一般由 demuxer 导出,然后传递给 decoder 作为输入;或者,从 encoder 作为输出,然后传递给 muxer。对视频来说,一个 AVPacket 一般仅包含一个帧编码后的数据。对音频而言,它可能包含多个帧编码后的数据。encoder 允许输出空的 packet,也就是说其中没有编码后的数据,仅有 side data。(例如,在编码流程的末尾用于刷新一些流参数等)AVPacket

2020-05-24 17:28:23 411

原创 FFmpeg API 之 AVOption

options,可以翻译为“选项”,是 FFmpeg 中非常重要的一个概念。在 FFmpeg 中,我们可以对input , output, muxer, demuxer, encoder, decoder, device,protocols 等设置选项,以便于对它们的行为做控制。因此,options可以理解为是物体的属性或者特征。首先,我们要区分一个概念,AVOption是用来描述一个选项的,它不是拥有选项的那个物体,也不是选项本身。比如,如果在FFmpeg中描述人,那么人可以拥有多个选项,比如年龄这个

2020-05-24 16:21:49 700

原创 FFmpeg API 之 AVDictionary

AVDictionary是FFmpeg中非常常见的类型,在代码中,通常使用它来传递参数或信息。这里所谓的 “dictionary”,不是指普通的字典,而是指编程语言中,常见的一种 pair 结构,如C++中的map,Python中的字典,json中的键值对指的都是类似的意思。FFmpeg中的 AVDictionary 是 AVDictionaryEntry 的集合,而 AVDictionaryEntry 则是包含两个字符串字段的结构体(entry:条目,项的意思):typedef struct

2020-05-24 14:25:01 932

翻译 《ffmpeg basics》中文版 -- 25.调试和测试

25.调试和测试​ 我们可以使用特定的过滤器,选项和源,来检测错误或测试多个输入,参数,性能等。当控制台中的输出内容过多时,我们可以使用 -report 选项将输出保存到文件中,名称为 ffmpeg-yyyymmdd-hhmmss.log ,其中 yyyymmdd-hhmmss 表示当前的日期和时间。debug,debug_ts 和 fdebug 选项​ FFmpeg 中的基本调试工具是 -...

2020-01-11 17:35:37 523

翻译 《ffmpeg basics》中文版 -- 24. 网络中的视频

24. 网络中的视频​ 注:本章和 FFmpeg 本身毫无关系,主要讲了 HTML5 或 Flash 中如何添加音视频,以及一些视频分享网站,和为上传视频付费等信息。如对 HTML5 熟悉,大致浏览一下即可,而对 HTML5 更深如的了解和学习,请出门右走,自行查阅。​ 由于互联网无处不在,因此它是显示我们使用 FFmpeg 创建或编辑完成视频的最佳媒体途径。除了将视频上传到流行的视频分享网站...

2020-01-11 17:29:01 289

翻译 《ffmpeg basics》中文版 -- 23.高级技术

23.高级技术连接音频或者视频文件​ 连接多媒体文件的方法有多种,下表列出了所有的连接方法:​ concatenation:串联使用命令行串联​ prerequisites:先决条件​ 在 Windows 中,我们使用 copy 命令来连接多媒体文件,设置它的 flag 为 /B,表示使用二进制模式 ,在要连接的文件之间要加一个 + 符号。连接 N 个文件的通用 copy 命令形式...

2020-01-11 17:22:33 429

翻译 《ffmpeg basics》中文版 -- 22.颜色校正

22.颜色校正​ 颜色校正通常指的是类似于调整亮度,颜色平衡(红绿蓝三通道),灰度系数,色调,亮度等颜色相关的编辑操作。这些操作 FFmpeg 都有提供,我们只需对特定的过滤器指定恰当的参数就可完成,下面是对颜色校正的一些理论指导。使用查找表进行视频修改​ FFmpeg 中有三个视频 filter 可以产生查找表(lookup table,或 LUT),表中为每个像素的输入值提供一个对应的输...

2020-01-11 17:08:20 1229

翻译 《ffmpeg basics》中文版 -- 21.批处理文件

21.批处理文件​ 注:本节讲述了如何将批处理和ffmpeg结合,如果对Windows下的批处理有一定了解,那么本节内容将显得极为简单。​ 注:Windows 下批处理的内容不属于ffmpeg的一部分,而是Windows命令行操作的一部分,可自行查找资料学习。批处理文件的优势​ FFmpeg 命令行工具常用于一些特定的任务,我们在使用这些工具时需要记住大量的用于不同编解码器,过滤器等的相关...

2020-01-11 17:00:16 413

翻译 《ffmpeg basics》中文版 -- 20.麦克风和网络摄像头

20.麦克风和网络摄像头​ Microphone:麦克风 Webcam​ 麦克风和网络摄像头是电脑的常见设备,FFmpeg 中也可以使用和操作它们。​ 注:本章仅讲解了 Windows 下摄像头和麦克风的常见用例。输入设备介绍​ FFmpeg 将麦克风和网络摄像头设别为输入设备,输入设备是一种特殊的组件,可以通过它们来获取实际关联的多媒体设备中的数据。在 Windows 中,麦克风和网...

2020-01-11 16:56:39 386

翻译 《ffmpeg basics》中文版 -- 19.FFmpeg 的组件和工程

19.FFmpeg 的组件和工程​ FFmpeg 工程由 4 个命令行工具和 9 个软件库组成,现在被广泛使用于多种软件及公司。我们在第一章描述了 ffmpeg 工具的语法和用例。FFplay 介绍​ FFplay 是一个简单的媒体播放器,它可以播放 ffmpeg 工具可解码的所有格式,如果想查看可用的所有文件格式或者其他信息,请查阅第二章节。​ FFplay 可用于输出预览,这样就可以...

2020-01-11 16:52:43 328

翻译 《ffmpeg basics》中文版 -- 18.隔行扫描的视频

18.隔行扫描的视频​ 隔行扫描技术是在黑白电视的发展过程中发明的,它可以消除旧有 CRT 显示器中的闪烁问题。此时,视频帧图像被分为多个普通的水平线,这些水平线分为两个域,分别为:奇数行域和偶数行域。NTSC,PAL 以及 SECAM 等 TV 标准​ 在 NTSC 标准中,帧被分为 525 行,其中 483 行可见,剩下的则用于同步,垂直回扫等等。帧率为 30 fps 等同于每秒 60 ...

2020-01-11 16:47:30 856

翻译 《ffmpeg basics》中文版 -- 17.编解码器的选项预设

17.编解码器的选项预设​ 选项:option​ 当我们使用某个编解码器时,可能会需要对该编解码器指定很多个选项。为了简化输入,我们可以将这些选项保存在预设文件中,此时选项的文本格式会更加合理易读(一个选项占一行,以kay=value的形式组织),便于组织,而且预设文件可在将来多次使用。预设文件介绍​ 预设文件是一个文本文件,其中可以包含特定编解码器的多个选项。每个选项以 key = va...

2020-01-11 16:42:52 357

翻译 《ffmpeg basics》中文版 -- 16.数字音频

16.数字音频​ 术语数字音频和术语数字视频类似,数字视频是一种用于处理和显示可移动图像的技术,而数字音频则是处理声音。数字音频是一种可以使用 PCM(pulse-code modulation:脉冲编码调制)来将声音编码为字节流的技术,它包括捕捉,记录,编辑,编码,复制等多个操作。FFmpeg 支持多种音频格式,如 AAC , MP3 , Vorbis ,WAV , WMA 等。在第二章中我们...

2020-01-11 16:40:20 373

翻译 《ffmpeg basics》中文版 -- 15.图片处理

15.图片处理​ 尽管 FFmpeg 工具设计的主要目的是处理音频和视频,但 ffmpeg 也能编解码多种图片格式,很多图片相关的任务也可以快速完成。在一个 web服务器中使用 ffmpeg 可以创建一个网页图片编辑器,如何在 web 主机中支持 FFmpeg 将在 《Video on Web》一节中介绍。支持的图片格式​ 下表为 FFmpeg 中支持的图片格式,使用它们特有的后缀来表示图片...

2020-01-11 16:29:58 1287

翻译 《ffmpeg basics》中文版 -- 14.元数据和字幕

14.元数据和字幕​ Metadata:元数据 Subtitle:字幕​ 媒体文件中的元数据部分,包含如艺术家,作者,日期,类型,出版商,标题等额外的信息,这些信息并不会在视频帧中显示。字幕则是文本性的数据,它通常被保存在一个单独的文件(字幕文件)中,且一般会显示在视频帧的底部。当然有一些 container 如 VOB 格式,则支持内嵌一个字幕文件。元数据介绍​ 在音乐播放器中,经常...

2020-01-11 16:08:01 990 1

翻译 《ffmpeg basics》中文版 -- 13.数学函数

13.数学函数​ FFmpeg 的一个优势在于它提供了不少内置的数学函数,我们可以在一些 音视频 filter,选项或者 source 中使用它们,这为我们的工作提供了很大的便利。在表达式中使用数学函数​ FFmpeg 中的很多选项都需要一个数字值,而数值可以以表达式的形式来表示,表达式中可以包含数字,数字操作符(+ - * / 等),常量,以及 FFmpeg 内置的数学函数。函数一般用于特...

2020-01-11 16:03:20 408

翻译 《ffmpeg basics》中文版 -- 12.时间操作

12.时间操作​ 关于多媒体的时间操作有:修改输入文件的时长,设置延迟,按时间选取输入的一部分等等。这些时间操作中可以接受的时间表达形式有两种:[-]HH:MM:SS[.m…][-]S+[.m…]其中,HH 表示小时,MM 表示分钟,SS 或 S 表示秒数,m 表示毫秒。音频和视频的时长使用 -t 选项设置时长​ 如果想要修改一个媒体文件的时长,我们可以使用 -t 选项,...

2020-01-11 15:59:36 593

翻译 《ffmpeg basics》中文版 -- 11.格式转换

11.格式转换​ format:格式​ ffmpeg工具最常见的用法都和音频和视频的 format 转换有关。format 可以使用 -f 选项来指定,一般位于输出文件之前,但如果使用的是 raw input (原始输入,即未编码的原始图像,如从摄像头获取到的视频数据),那么它也可以放在输入文件之前。我们可以通过命令行来查看可以使用的 format ,详情见《显示帮助和特征(Displayi...

2020-01-11 15:55:54 364

翻译 《ffmpeg basics》中文版 -- 10.在视频上添加文本

10.在视频上添加文本​ 视频中的文本性数据可以显著提升它的信息质量。​ 信息质量:information quality,简称IQ,画面越清晰,内容越丰富,则IQ越大。关于在视频上添加文本的简介​ 在视频上添加文本最常见的方法有两种:一种是前面介绍的视频覆盖技术,一种是使用字幕。而更高级的选择则是使用 drawtext filter,它提供了更灵活高级的性能,其详细描述如下:​ 例...

2020-01-11 15:47:23 1828

翻译 《ffmpeg basics》中文版 -- 9.覆盖:画面中的画面

9.覆盖:画面中的画面​ 生活中,我们经常使用视频的覆盖技术,这样的例子非常多,比如电视台画面上的左上角处,总是会显示电视台的logo,以表明当前频道是哪个省份的。另一个例子就是在主显示窗口中会有一个嵌入的小窗口,用于显示其他的画面,如视频聊天就经常会用这样技术。这种画面中的画面在很多情况下都很实用,比如要等待视频的某个特定时间点或等待当前的广告过去,就可以将他们放在小窗口中,既能得知当前的实际...

2020-01-11 13:38:03 625

翻译 《ffmpeg basics》中文版 -- 8.模糊、锐化和去噪

8.模糊、锐化和去噪​ 当输入的视频中含有噪声时,我们可以使用去噪声的 filter 或 选项 来执行降噪处理,以便优化该视频。降噪处理是视频预处理的一部分,一般在视频编码输出之前完成。​ denoising:降噪声处理​ 备注:在视频或者图片上有时会出现一些颗粒状的,明显不属于原图的一些点,这些点就叫做噪声(表示对真正的图像造成了干扰),而降噪声处理就是消除或者模糊化这些噪声的过程。视频...

2020-01-11 13:28:13 4797

Model/View模块中Delegate的扩展示例代码

Model/View模块中Delegate的扩展示例代码

2023-11-23

FFmpegTools.rar

对ffmpeg API进行进一步的封装,形成组件化的C++接口,代码复用率高,简化了音视频处理结构

2021-07-24

使用live555实现实时流的推流服务器

这是使用live555实现的一个推流的小框架,其详细的说明见作者的博客《 使用live555实现实时流的推流服务器》

2020-11-14

VIM编辑器教程

在UNIX下开发程序时,熟练使用VIM可以大大提高开发效率,本书由著名VIM使用与开发专家编写,层层递进,由浅入深,实用性极高!

2016-03-15

空空如也

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

TA关注的人

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