源码解析
文章平均质量分 81
头快撑不住了
wx:tkcbzl
展开
-
ffmpeg源码分析(七)结构体之AVStream
AVStream是存储每一个视频/音频/字幕/其它流信息的结构体。原创 2024-10-05 19:17:44 · 661 阅读 · 0 评论 -
ffmpeg源码分析(三)结构体之AVFormatContext
AVFormatContext是API中直接接触到的结构体,位于avformat.h中,结构体描述了一个多媒体文件或流的构成和基本信息。,是FFmpeg中最为基本的一个结构体。贯穿了ffmpeg使用的整个流程。可以说是ffmpeg中最顶端的一个结构体。原创 2024-10-05 11:48:58 · 1103 阅读 · 0 评论 -
ffplay源码分析(五)包缓存队列和帧缓存队列
在音视频处理流程中,的有两种队列,包缓存队列(Packet Buffer Queue)和帧缓存队列(Frame Buffer Queue)。这两个队列的存在,是为了适应音视频数据处理过程中的多线程架构——包括收包线程、解码线程和渲染线程。具体来说,收包线程负责从网络或文件中读取数据并将其放入包缓存队列中;解码线程从包缓存队列中取出数据进行解码,然后将解码后的数据放入帧缓存队列中;最后,渲染线程从帧缓存队列中取出数据进行渲染。由于每个线程的处理速度不同,缓存队列在这一过程中起到了平衡各线程工作负荷和避免数据丢原创 2024-09-01 18:43:00 · 1374 阅读 · 0 评论 -
ffmpeg源码分析(六)结构体之AVPacket和AVFrame(内存管理)
这是毕业一年跳槽时被面过的一道题,他问ffmpeg的内存管理是怎样的。当时支支吾吾没有回答出来。如果再让我回到过去,我会和他说莫欺少年穷~原创 2024-08-31 21:26:30 · 1391 阅读 · 0 评论 -
ffplay源码分析(二)结构体VideoState
在多媒体的世界里,播放器是离用户最近的一环,它将数字编码的音频和视频数据转化为生动的视听体验。ffplay 播放器作为一款强大而备受关注的工具,其背后隐藏着一系列精妙的结构体,它们协同工作,共同完成了从数据读取、解码、渲染到最终呈现的复杂流程。以下是播放器的一个简单的流程,当我们启动 ffplay 播放器,它首先会与数据源建立连接,无论是本地文件、网络流还是其他输入源。。紧接着,数据被源源不断地送入解码器,将压缩编码的数据转换为可处理的原始格式。在这一流程中,各种关键的结构体开始发挥作用。原创 2024-08-25 20:45:21 · 484 阅读 · 0 评论 -
KCP源码解析系列(五)拥塞控制
虽然开始的慢,但增速快。快重传很简单,就是比如你发送了1,2,3,4,5这几个包,然后收到了1,3,4,5的ack,2被连续跳过了三次,就直接把2重新发一次。当主机开始发送数据时,如果立即将较大的发送窗口的全部数据字节都注入到网络中,那么由于不清楚网络的情况,有可能引其网络拥塞。需要设定一个ssthresh,传输门限值,这是一个动态调整的阈值,根据cwnd和ssthresh的比较,采用不同的策略。当发生快重传时,说明网络环境不太好,这是可以快速降低ssthresh,避免网络进一步发生堵塞,这个就叫快恢复。原创 2024-08-20 15:16:14 · 967 阅读 · 0 评论 -
KCP源码解析系列(二)KCP协议结构体
结构体是 KCP 协议中控制块的核心数据结构,包含了连接状态、传输参数、缓存和控制信息等。这是整个 KCP 协议运作的核心,用于管理连接的各个方面。对于不分片的数据包,该值为 0。kcp中只有一种数据包,不管是数据还是控制信息,都用这个数据包来表示。: 会话号,用于区分不同的会话。: 时间戳,用于计算往返时间(RTT)以及重传超时(RTO)。(窗口探测包,请求对方告知窗口大小)(窗口大小通告包,告知对方窗口大小): 序号,用于数据包排序和确认。: 未确认的序号,用于流量控制。: 窗口大小,用于流量控制。原创 2024-08-13 16:54:20 · 374 阅读 · 0 评论 -
ffplay源码分析(七)播放控制
这个接口虽然看起来只有暂停的功能,实际上它负责暂停和继续状态的转换,上一次如果是暂停,这一次就继续,反之亦然。当然,如果用户想知道目前是开始还是暂停的状态,可以通过监听开始和暂停的状态来实现,不用自己再去记录状态。以上就是ffplay的播放控制的流程,用户操作主要是改变播放器的状态,然后收包线程和渲染线程根据状态做响应的处理即可,还是比较容易理解的。按字节跳转一般用于特定的格式,比如ts流,每一个包都是188字节,解析器按这种方式处理可以很方便的跳到目标位置。简单来说就是开始、结束、暂停、继续、跳转。原创 2024-06-25 19:27:39 · 307 阅读 · 0 评论 -
深入剖析webrtc事件机制 sigslot
在构建大型C++项目过程中,如何在各个类之间高效且安全地传递数据或事件是一项具有挑战性的任务。最直接但并不推荐的方法是使用全局变量。虽然这种方法简单易用,但它会导致命名冲突,难以维护,且全局变量的值容易在不知情的情况下被意外修改。另一种常见的方式是使用回调函数。在这种情况下,类A会注册类B的回调函数。然而,这种方法的缺点在于对象的声明周期难以控制,经常会出现回调函数触发时,对象已经被销毁的情况。WebRTC中的信号槽机制是实现通信的一种关键技术。原创 2024-04-06 16:40:57 · 1423 阅读 · 0 评论 -
ffmpeg源码分析(五)结构体之AVCodecContext
GOP(Group of Pictures)大小,指定两个关键帧之间的最大帧数。AVCodecContext是和编解码相关的结构体,同时也是变量最多的一个结构体。: 额外的编解码器特定数据,通常包含一些配置信息。: 像素格式,描述视频帧的颜色表示方式,例如YUV420P。: 编码器的配置文件,影响编码质量和复杂性。: 用于控制量化参数的设置,影响编码质量。: 最大B帧数,影响编码的延迟和质量。: 控制编解码器的行为的标志。: 编码过程中参考帧的数量。: 视频帧的宽度和高度。: 每个音频帧的大小。原创 2024-03-08 18:58:40 · 1169 阅读 · 2 评论 -
ffplay源码分析(六)音视频同步
在ffplay中,音视频的输出有自己的线程。比如一个没有声音的视频,或者刚播放的只有音频没有视频,视频比较晚到,那前面的音频也可以先丢弃。这三种是最基本的策略,考虑到人对声音的敏感度要强于视频,一般情况下我们会采取视频去同步音频的策略。所以最开始的时候的计算方式应该是2s-1.5s,结果是0.5s,和t3时刻计算的结果是一致的。音频同理,音频的pts假设是1.5s,设置时时刻t1假设是1001s(实际是一个很大的值),设置的时候,视频的pts假设是1s,t1假设是1000s(实际是一个很大的值),原创 2024-03-07 15:46:04 · 1299 阅读 · 0 评论 -
ffplay源码分析(一)主函数
在数字化时代,多媒体播放器已成为我们日常生活中不可或缺的一部分。无论是观看电影、听取音乐,抑或是进行视频会议,我们都依赖于功能强大的播放器来呈现丰富多彩的音视频内容。而在众多播放器中,FFplay以其简洁而强大的特性脱颖而出。作为FFmpeg多媒体框架的一部分,FFplay不仅提供了丰富的音视频格式支持,更以其开源、跨平台的特性备受开发者青睐。在音视频相关的面试中,ffplay中的一些代码甚至被认为是标准的解决方案。原创 2024-03-05 11:42:50 · 850 阅读 · 0 评论 -
ffmpeg源码分析(四)结构体之AVIOContext 、URLContext、URLProtocol
这篇文章主要是在解复用阶段所使用的结构体。ffmpeg它支持多种协议,用于从不同来源获取多媒体数据,例如HTTP、RTMP、RTSP、文件等。FFmpeg的协议解析部分包含一些结构体和流程,用于处理不同协议的数据获取。URLContext:这是FFmpeg中用于表示URL的结构体。它包含有关URL的信息,例如URL的协议、主机、端口、路径等。不同的协议解析器可以使用不同的数据填充这个结构体,以适应各种URL。:这是用于输入/输出操作的上下文结构体。它可以包含URLContext。原创 2024-03-04 19:44:22 · 1526 阅读 · 0 评论 -
FFmpeg源码解析系列(二)主要结构体
结构体描述作用头文件AVIOContext(I/O上下文)AVIOContext结构体用于管理媒体文件或者网络流的输入和输出操作实现文件或者流的I/O操作avio.hAVFormatContext(封装格式上下文)AVFormatContext结构体是与多媒体文件格式相关的结构体,用于打开、读取和写入媒体文件。它包含了文件的格式信息、音视频流、文件I/O操作等管理媒体文件的格式和封装信息。AVCodecContext(编解码器上下文)原创 2024-02-29 10:10:16 · 1320 阅读 · 0 评论 -
FFmpeg源码解析系列(一)目录和编译
FFmpeg,全称"Fast Forward MPEG",是一个功能强大、开源的多媒体框架,它提供了广泛的音频和视频处理功能,使得多媒体数据的解码、编码、转换、封装以及流媒体传输变得更加容易。随着数字媒体在我们日常生活中的普及,FFmpeg在多领域得到了广泛的应用。你可以使用FFmpeg来剪切、合并、转码、添加滤镜等,从而编辑和处理视频文件。这对于视频制作、后期制作以及视频分享平台非常重要。FFmpeg不仅支持视频,还可以用于音频文件的处理,包括音频转码、剪切、合并以及添加效果。原创 2024-02-28 18:01:22 · 1842 阅读 · 0 评论