
FFmpeg开发实战指南
文章平均质量分 79
从事技术研发10多年,有丰富的线上项目实战和实施经验,本小博乃点滴工作及项目实战总结积累,精华知识记录, 从入门到进阶,绝对物超所值,内容通俗易懂,代码,正版工具软件,开发文档精中选精,一应俱全,微信、QQ提供在线指点和帮助。
大王算法
主要做机器人,操作系统,算法及AI方面的研发工作,有感兴趣的朋友可以私信加我好友,一起探讨交流!
展开
-
PTS、Timebase和视频编码器码率控制
开发者容易犯的一类错误是,设置Timebase = 1 / FPS,而PTS的数值又是按照毫秒或微秒得来的,即设置给编码器的Timebase,不是PTS真正的时间单位。两个是等效的,可以认为固定帧率时,用frame_num作为pts,用1/fps作为timebase。固定帧率的视频,以上两种码率控制结果相同。另一种码率自适应实现方式是设置VFR = true,需要调整码率时reconfig新的码率给编码器。一般而言,设置给编码器的VFR参数应该按照真实采集情况而定。对于固定帧率的视频,原创 2025-02-23 20:58:13 · 822 阅读 · 0 评论 -
Timestamp详解
POC表达的是显示序,只有顺序的概念。没有重排序的视频编码格式,或者像AV1等在解码器内部处理重排序的编码格式,理论上也不需要显示的DTS,但现有的媒体处理框架很多地方依赖DTS。随着距离变远,因为光的传播速度远大于声音,先观测到闪电,后接收到雷声,表现出“音视频的不同步”(除非已知光速和声速,通过计算做出补偿)可以认为,采集端的音视频同步是自然发生的(忽略采集设备自身延迟),播放端的音视频同步是主动控制的结果。在后续环节打时间戳,离音视频事件发生的时刻变远了,引入中间环节的浮动时间,音视频同步效果变差。原创 2025-02-23 20:49:11 · 700 阅读 · 0 评论 -
FFmpeg视频录制详解
以上对象初始化完成后,需要将codec的信息拷贝到AVFormatContext对象中,以便与将编码器信息存储到文件中,这个操作可以通过avcodec_parameters_from_context操作。注意,有些编码器只支持一些固定的帧率,对于这样的编码器,AVCodecContext中的time_base是不能随便设置的,当写文件头失败时,可以检查一下这一点。(1).初始化ffmpeg的基本对象,并将这些对象关联起来,然后打开文件并写入文件头。av_write_frame用于将编码后的数据写入文件。原创 2023-09-30 21:33:54 · 1670 阅读 · 1 评论 -
每个C++开发者都应该使用的十个C++11特性
C++11包含了很多内容,以上内容只是对一系列C++核心技术以及标准库特征的用法的简单介绍,如果想要更深入的了解,大家可以再根据每个知识点找一些更加细节的资料区深入学习。原创 2022-10-30 20:45:01 · 1495 阅读 · 0 评论 -
FFmpeg AVPacket详解
操作AVPacket的函数大约有30个,主要可以分为:AVPacket的创建初始化、AVPacket中的data数据管理(clone,free,copy等)、AVPacket中的side_data数据管理。AVPacket的创建有很多种,而由于Packet中的数据是通过data引用的,从一个Packet来创建另一个Packet有多种方法。av_read_frame 这个是比较常见的了,从媒体流中读取帧填充到填充到Packet的数据缓存空间。原创 2022-07-31 20:53:36 · 1302 阅读 · 0 评论 -
FFmpeg 的AVCodecContext结构体详解
AVCodecContext 是FFmpeg使用过程中比较重要的结构体,它包含了编解码(codec)的所有信息。FFmpeg 是一个开源的音视频处理框架,广泛用于音视频的编码、解码、转码、mux、demux、流处理、过滤等领域。在 FFmpeg 库中,AVCodecContext 是处理媒体数据流中最为核心的结构之一。它定义了编解码器(encoder/decoder)的相关操作以及处理媒体数据所必须的各种参数。原创 2022-07-31 20:30:55 · 2040 阅读 · 0 评论 -
Unbutu 安装FFmpeg的两种方法
本文介绍两种FFmpeg的安装方法,均可以完美安装和使用FFmpeg,首先先介绍第一种方法:下载源码手动安装,此方法好处是,我们可以选择自己需要的版本的或者比较高的稳定版本的FFmpeg来进行安装。原创 2022-05-31 21:27:10 · 7349 阅读 · 0 评论 -
TCP拥堵控制机制详解
一、TCP拥堵产生的原因∑ 对资源的需求>可用资源注意 :单纯的增加网络资源无法解决问题例如:把结点的存储空间扩大,更换更高速率的链路,提高结点处理机的运算速度,不仅不能解决问题,而且可能使网络性能更坏。原因:网络拥塞是许多因素引起的,单纯的解决一个可能会使上述情况得到一些缓解,但是会把拥塞转移到其他地方。扩大结点存储空间——>由于输出链路的容量和处理机的速度并未提高,增大排队等待时间,超时重传,浪费资源。 更换更高速率的链路——>可能会缓解,有可能造成各部分不匹配原创 2022-03-31 23:14:41 · 2846 阅读 · 0 评论 -
使用Jrtplib实现RTP视频数据发送接收
Jrtplib 是一个功能强大的库,可用于实现 RTP 视频流的发送和接收。它抽象了协议的复杂性,提供了一系列简洁的 API。然而,对于开发者来说仍需有网络编程的基础知识,以及对 RTP 协议的理解。合理地处理错误、网络问题和资源使用,是开发稳定 RTP 应用程序的关键。通过上述步骤和注意事项,开发者可以有效地使用 Jrtplib 库来构建自己的多媒体通信应用。原创 2022-02-28 22:20:52 · 1051 阅读 · 0 评论 -
基于C/S架构的完整RTP/RTCP的H264/H265视频传输方案实现
在C/S架构中,客户端负责向服务器发送请求并接收服务器响应,而服务器则处理这些请求并管理资源。在视频流传输中,服务器通常负责视频的编码和分发,而客户端则负责解码和播放。RTP(Real-Time Transport Protocol)是一种网络协议,用于传输实时数据,如音频和视频。它广泛用于通信和娱乐系统中的流媒体。RTCP(Real-Time Transport Control Protocol)是RTP的姊妹协议,用于监控数据传输质量,并提供关于媒体流的统计信息。原创 2022-02-28 22:02:57 · 1229 阅读 · 0 评论 -
RTP和RTCP协议精讲
实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。应用程序通常在 UDP 上运行 RTP 以便使用其多路结点和校验服务;这两种协议都提供了传输层协议的功能。但是 RTP 可以与其它适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么 RTP 可以使用该组播表传输数据到多个目的地。RTP数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP数据报都由头部(Header)和负载(Payl原创 2022-02-28 21:52:16 · 2274 阅读 · 0 评论 -
使用FFmpeg获取视频每一帧的信息
使用FFmpeg提取视频每一帧的信息是一个简单而强大的过程。通过上述的步骤和代码示例,我们可以轻松地将视频文件转换成单独的帧图片,进行进一步的分析和处理。FFmpeg的灵活性和功能强大,使其成为视频处理领域的一个不可或缺的工具。无论是应用于视频编辑、动画制作还是计算机视觉研究,掌握使用FFmpeg提取视频帧的技能都将极大地扩展我们的多媒体处理能力。原创 2021-12-30 22:52:39 · 4062 阅读 · 0 评论 -
FFmpeg硬件解码API介绍
硬件解码可以显著提升视频处理的效率,尤其是在处理高清视频流时。FFmpeg作为一款功能强大的多媒体框架,提供了对多种硬件解码API的支持。开发者在使用时需要注意选择合适的硬件解码API,以及确保视频格式与所选硬件加速解码器的兼容性。通过上述介绍和代码示例,基本上现在对如何在FFmpeg中使用硬件解码有了基本的了解。在实际开发中,还需要考虑错误处理、内存管理以及与其他FFmpeg组件的交互等问题,需要根据实际情况进一步优化。原创 2021-12-30 22:43:47 · 2503 阅读 · 0 评论 -
OpenCv实现多路播放
我们在实际的视频多路实现过程中,往往会遇到硬件资源不够的问题,那么如何在有限的资源下,实现多路的视频播放呢?在本文中,我们探讨了如何使用OpenCV库和C++语言实现多路视频的同时播放。通过多线程技术,我们可以有效地处理多个视频流,而OpenCV库提供了方便的视频流读取和显示接口。示例代码展示了一个基础的框架,可以根据实际需求进行功能扩展和性能优化。需要注意的是,实际应用中可能需要考虑更多的因素,例如,播放同步、错误处理、资源管理等,这些都需要在该基础框架上进一步完善。原创 2021-12-30 22:25:13 · 2714 阅读 · 0 评论 -
FFmpeg滤镜API用法详解(二)
一个滤镜图可能由多个滤镜链构成,每个滤镜链的输入节点就是 buffer 滤镜,输出节点是 buffersink 滤镜,因此一个滤镜图可能有多个 buffer 滤镜,也可能有多个 buffersink 滤镜。滤镜(AVFilter)需要通过滤镜实例(AVFilterContext)引用,为 buffer 滤镜创建的滤镜实例是 fctx->bufsrc_ctx,用户通过往 fctx->bufsrc_ctx 填入视频帧来为滤镜链提供输入。buffer 滤镜是滤镜链中的第一个滤镜,因此只有输出引脚而无输入引脚。原创 2021-11-30 21:51:58 · 723 阅读 · 1 评论 -
FFmpeg滤镜API用法详解(一)
FFmpeg滤镜API是libavfilter库中的一部分。图像大小和比例调整(scaling,cropping)颜色校正音频噪声减少和音量调整特效添加,如模糊和锐化视频转场效果字幕、时间码和水印的叠加/***/int flags;char *name;void *priv;原创 2021-11-30 21:48:19 · 6994 阅读 · 0 评论 -
FFmpeg转码流程详解
FFmpeg是一个非常强大的开源多媒体框架,它支持几乎所有的视频和音频格式,并且能够实现转码、录制、转流、以及播放等功能。容器格式的转换,比如MP4转换为MOV容器中音视频数据编码方式转换,比如H264编码转换成MPEG4编码,MP3换为AAC音视频码率的转换,比如4M的视频码率降为2M视频分辨率的转换,比如1080P视频变为720P,音频重采样等等。原创 2021-11-30 21:38:41 · 4197 阅读 · 0 评论 -
FFmpeg播放视频流程详解
利用FFmpeg播放视频需要理解视频播放的基本流程,包括初始化FFmpeg, 打开视频文件, 查找视频流, 解码视频流, 以及转换和渲染视频帧。通过本文的介绍和代码示例,大家应该能够开始使用FFmpeg进行基本的视频播放开发。请注意,为了让代码示例尽可能简洁,本文没有包括错误处理和内存管理的全部细节。在生产环境中,应该始终对所有可能的错误情况进行检查,并且确保及时释放所有分配的资源。此外,对于复杂的应用场景,可能需要考虑多线程或异步处理,以及音视频同步等问题。原创 2021-11-30 21:38:24 · 3216 阅读 · 0 评论 -
GOP和帧率、码率的关系
关键帧的周期,也就是两个IDR帧之间的距离,一个帧组的最大帧数,一般而言,每一秒视频至少需要使用 1 个关键帧。增加关键帧个数可改善质量,但是同时增加带宽和网络负载。需要说明的是,通过提高GOP值来提高图像质量是有限度的,在遇到场景切换的情况时,H.264编码器会自动强制插入一个I帧,此时实际的GOP值被缩短了。另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP开始才有可能得原创 2021-11-30 21:38:11 · 4482 阅读 · 0 评论 -
基于FFmpeg将pcm+rgb编码并封装MP4
FFmpeg是非常强大好用的音视频处理库,功能强大,首先我们先说说如何配置使用FFmpeg。 FFmpeg官提供了3个版本:Static,Shared,Dev。介绍如下: 前两个版本可以直接在命令行中使用,他们的区别在于: Static里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的Dll已经被编译到exe里面去了。 Shared里面除了3个应用程序:ffmpeg.e原创 2021-11-30 21:37:19 · 423 阅读 · 0 评论 -
36款开源的经典音视频项目
音视频流媒体在现在的生活中已经无处不在,拥有一大批顶级的音频/视频工具确实派得上用场。修剪文件、编辑视频、最大化音频――我们需要满足社交媒体流的传播需求,而公司总是需要音频/视频内容,以便与用户进行最有效的沟通。本文介绍的这些音频/视频应用程序有望大大节省用户的成本。下列开源应用程序可取代价格昂贵的商用音频/视频应用程序,并与他们有着非常相似的功能。视频编辑1.Cinelerra取代对象:Adobe PremiereCinelerra的下载量已超过100万人次,这是一种成熟的高质量视频.转载 2021-11-30 21:36:52 · 2432 阅读 · 0 评论 -
Wireshark The capture session could not be initiated on interface报错解决
Wireshark是一个广泛使用的网络协议分析器,它允许用户捕获和浏览在网络上传输的数据包。然而,用户有时可能遇到在尝试开始捕获会话时遇到错误消息 “The capture session could not be initiated on interface” (无法在接口上启动捕获会话) 的问题。比如Mac跟新完WireShark以后,发现启动WireShark抓包爆如下错原创 2021-09-29 22:30:03 · 1968 阅读 · 0 评论 -
GB28181平台对接接口详解
28181平台对接接口详解信令接口:1.1 平台注册下级平台主动向上级平台注册; 注册鉴权信息(用户名和密码)由上级提供;举例说明:下级--->上级REGISTER sip:62010000002000000001@10.130.140.82:7100 SIP/2.0Call-ID: c82dee890ea56d9d332fe4a5dbd2772c@10.129.4.21 CSeq: 1 REGISTERFrom: <sip:620102010020000000.原创 2021-09-29 22:29:22 · 3057 阅读 · 1 评论 -
多轨道音视频同步编辑方法与流程
1、多轨道音视频同步编辑方法背景 目前录制课件视频普遍采用只录制屏幕,成果文件即为屏幕视频文件,在过程中只有通过对屏幕的操作展现所要表达的内容,过程中需要辅助摄像头介入的时候普遍采用第三方软件调出摄像头在屏幕上面展示,而多个摄像头时还存在多次确认的过程,切换摄像头也不方便,且此时还不能单独录制摄像头;或者只录制摄像头,在过程中想要展示屏幕内容,此时比较简便的方法就是通过摄像头拍摄屏幕且需要手动调整,但此时拍的屏幕会存在几种情况例如变形,局部放大和外围屏幕边缘,使得整个视频中表现极为不协调,在...转载 2021-06-27 22:34:44 · 2021 阅读 · 0 评论 -
ffmpeg提取视频文件中的多轨音频
在视频编辑中,我们需要对视频中的音频进行单独处理,这个时候,就需要我们对视频文件进行音频提取。1.音频文件提取,先查看视频文件信息:#ffmpeg -i "4K原码-08101136.ts"ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.3.1 (GCC) 20190414 configuration: --disable-static --enable-...原创 2021-06-27 22:33:51 · 3090 阅读 · 0 评论 -
视频精准剪切总结(二)
1.常见视频精准剪切问题ffmepg剪切视频,很方便,但是也有很大缺陷:(1)剪切时间点不精确(2)有时剪切的视频开头有黑屏 造成这些问题的原因是ffmpeg无法seek到非关键帧上。 本文通过一些参数配置尽可能地减轻以上问题发生。2.基本剪切方法:ffmpeg -i test.mp4 -ss 10 -t 15 -codec copy cut.mp4参数分析:-i : source -ss:start time -t :duration -c :video...原创 2021-06-27 22:33:17 · 561 阅读 · 0 评论 -
视频精准剪切总结(一)
要做精准剪切视频,那么第一个常用的办法就是使用Ffmpeg来切割视频,但是发现剪切出来的视频有些问题,效果跟实际上有偏差,剪切时间点不精确。剪切出来的视频因为视频关键帧前面和后面都会多出来一部分。ffmpeg -y -ss start -t duration -i filenam -codec copy 那么如何使得剪切的视频即准确又没有问题,查了很多资料,发现可以通过参数配置尽可能地减少问题:1.基本快速剪切方法 ffmpeg -i in...原创 2021-06-27 22:32:57 · 1057 阅读 · 0 评论 -
OBS数据采集及渲染过程
1.OBS的数据采集和渲染,在程序启动时 会调用 obs_init_video函数,创建一个obs_video_thread 线程static int obs_init_video(struct obs_video_info *ovi){ struct obs_core_video *video = &obs->video; struct video_output_info vi; int errorcode; make_video_info(&vi, ovi);原创 2021-06-27 22:32:11 · 1601 阅读 · 0 评论 -
FFmpeg进行推流的两种方法
FFmpeg的推流一般有两种:1.使用cmd进行推流,这种推流方式一般可用于简单的推流验证 这里拿原创 2021-05-30 22:00:48 · 28511 阅读 · 13 评论 -
FFmpeg几种常见视频编辑操作总结
1.视频切片,那么每隔50秒裁剪为一个文件ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:00:30 -f segment output%03d.mp42.视频抽帧,在视频文件第15 秒位置,提取一张图片ffmpeg -i input.mp4 -r 0.1 -t 20 image%3d.jpg3.为视频打上水印ffmpeg -i sub_video3.mp4 -vf drawtext="fontfile=/usr/share/fon原创 2021-05-30 22:00:26 · 1827 阅读 · 1 评论 -
FFMPEG 硬件解码API介绍
一般来说我们把使用CPU通用计算单元(无论是Intel还是AMD)就是软解;用专用芯片模组(GPU、QSV等)就是硬解。原创 2021-04-28 23:13:46 · 3140 阅读 · 1 评论 -
OBS视频采集流程分析
1.OBS的初始化程序中,首先会调用ResetVideo,执行顺序如下:(1).ResetVideo—>(2).AttemptToResetVideo—>(3).obs_reset_video—>(4).obs_init_video—>(5).video_output_open—>(6).if (pthread_create(&out->thread, NULL, video_thread, out) != 0)最后创建了video_thread,我们原创 2021-04-28 23:00:57 · 2396 阅读 · 0 评论 -
iOS 媒体库完整流程
在 iOS 中,媒体库(Mediabrary)是指设备上的照片、视频、音乐等多媒体内容。如果您指的是如何编程访问和操作 iOS 设备上的媒体库,那么这涉及到使用 Apple 的开发工具和 API,具体如下。iOS设备不仅仅是一部手机,它更像是一个随身携带的媒体中心。iPhone里可以存储着数以千计的照片、视频、音乐和播客。在这个数字化时代,能够有效地管理这些内容对我们的日常生活和工作至关重要。我使用的第一个功能是“照片”App。原创 2021-04-28 22:59:54 · 1220 阅读 · 0 评论 -
OBS架构分析
1.功能模块框图 OBS整套系统可以分为4大部分:(1).UI层:主要采用Qt绘制;(2).数据输入层:主要对应上obs中场景和各种源,可由界面操作;(3).数据处理层:主要是对输出数据的编码和特效处理;(4).数据输出层:主要是对应推流、本地录制、回放录制、本地渲染预览等。 总体架构如图1-1所示: ...原创 2021-04-28 22:58:24 · 1803 阅读 · 0 评论 -
OBS源码流程分析
OBS主要线程共五个:1.主线程:主要做一些初始化工作和UI处理2.视频渲染线程:渲染视频到窗口3.视频编码线程:编码原始视频4.音频编码线程:编码原始音频5.流输出线程:将编码后的音视频数据发送出去。 OBS主要代码流程图如图1-1所示: ...原创 2021-04-28 22:55:49 · 665 阅读 · 0 评论 -
OBS框架流程和开发流程
OBS(Open Broadcaster Software,开放广播软件),免费的开源音视频软件,用于音视频记录和实时流媒体播放。目前的OBS为obs studio版本,它是跨平台重构后的版本,对比原始版本obs classic。obs studio代码中,有一些插件是独立编译的,比如:浏览器插件、摄像头采集插件等,存放位置参考obs studio中同名路径。obs studio版本代码位置:https://github.com/obsproject/obs-studioobs ...原创 2021-04-28 22:54:19 · 2339 阅读 · 0 评论 -
OBS源码编译开发
1.什么是OBS? OBS(Open Broadcaster Software)是免费开源的视频录制和直播软件,支持运行在windows,Mac和linux平台。官方链接https://obsproject.com。OBS有OBS Classic和OBS studio两个版本。OBS classic是早期版本,已经不再维护和更新。现在推荐使用的是OBS studio版本,是在OBS经典版的基础上重构实现的,使用了更好的模块设计,提高了性能,同时支持DirectX和OpenGL渲染,还...原创 2021-04-28 22:53:48 · 298 阅读 · 0 评论 -
使用IOS原生的UIVideoEditController进行视频编辑
UIVideoEditorController类包含了由系统提供的界面,使用户可以交互式的剪切视频。UIVideoEditorController对象处理用户的交互并且提供把编辑后的视频的文件系统路径提供给UIVideoEditorControllerDelegate对象.UIVideoEditorController只支持能够支持视频编辑的设备.我们设置好它的delegate及videoPath属性,并将其展示出来。(经过videoQuality属性,也可以通过这个类将视频重新编码成质量较低的格式)。原创 2021-04-28 22:53:06 · 801 阅读 · 0 评论 -
研发视频编辑的难点
1、音视频领域固有门槛深刻理解音视频编码格式 H.264 和 AAC 的编码细节;混音时如何将两个音频调整到一致的参数,使用什么样的算法去混合等等。2、图形图像、OpenGL 处理摄像头预览数据,图像处理,音视频编解码都需要了解 RGB 和 YUV 色彩空间的数据格式,以及它们之间转换的方式等等;其中部分操作可以利用更高效的 OpenGL 去完成,如美颜滤镜,图层混合,放大/缩小,旋转,还有图像裁剪等等。3、平台相关要对相应平台的摄像头、麦克风、编解码、多媒体处理等 API 十分熟...原创 2021-03-30 23:14:08 · 533 阅读 · 2 评论 -
Wireshark 在Mac上安装使用总结
目前网络上有很多抓包工具,但个人认为好的就那么几款,我一直在使用的Wireshark就是其中比较好用的一款。Wireshark是当今世界最流行的网络协议嗅探、抓包和分析工具,它使我们得以窥探网络上流动的数据及其协议细节,支持Windows、Mac上使用。下载Mac版本的Wireshark安装包:安装完以后,打开Wireshark:点击鲨鱼头按钮,开始抓包,报如下错误:wireshark选择网卡出错解决方法:打开终端输入命令:sudo chmod 777 /dev.原创 2021-02-28 19:34:59 · 3785 阅读 · 0 评论