自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 ffmpeg源码分析(七)结构体之AVStream

AVStream是存储每一个视频/音频/字幕/其它流信息的结构体。

2024-10-05 19:17:44 682

原创 ffmpeg源码分析(三)结构体之AVFormatContext

AVFormatContext是API中直接接触到的结构体,位于avformat.h中,结构体描述了一个多媒体文件或流的构成和基本信息。,是FFmpeg中最为基本的一个结构体。贯穿了ffmpeg使用的整个流程。可以说是ffmpeg中最顶端的一个结构体。

2024-10-05 11:48:58 1130

原创 C++可调用对象

captures]为捕获列表,用于捕获外层变量。[&]表示捕获当前范围内所有局部变量。[val]:表示以传值方式捕捉变量val[=]:表示以传值方式捕捉当前作用域中的变量,包括this指针。[&val]:表示以引用方式传递捕捉变量val。[&]:表示以引用方式传递捕捉当前作用域中的所有变量,包括this指针。[this]:表示以传值方式捕捉当前的this指针。params:参数列表。与普通函数参数列表使用相同。如果不需要传递参数,可以连同()一起省略。

2024-09-01 20:24:20 650

原创 ffplay源码分析(五)包缓存队列和帧缓存队列

在音视频处理流程中,的有两种队列,包缓存队列(Packet Buffer Queue)和帧缓存队列(Frame Buffer Queue)。这两个队列的存在,是为了适应音视频数据处理过程中的多线程架构——包括收包线程、解码线程和渲染线程。具体来说,收包线程负责从网络或文件中读取数据并将其放入包缓存队列中;解码线程从包缓存队列中取出数据进行解码,然后将解码后的数据放入帧缓存队列中;最后,渲染线程从帧缓存队列中取出数据进行渲染。由于每个线程的处理速度不同,缓存队列在这一过程中起到了平衡各线程工作负荷和避免数据丢

2024-09-01 18:43:00 1392

原创 ffmpeg源码分析(六)结构体之AVPacket和AVFrame(内存管理)

这是毕业一年跳槽时被面过的一道题,他问ffmpeg的内存管理是怎样的。当时支支吾吾没有回答出来。如果再让我回到过去,我会和他说莫欺少年穷~

2024-08-31 21:26:30 1440

原创 H264编码原理(二)帧内预测

假设你去了一家餐厅吃饭,这家餐厅提供了一个有趣的点餐方式。服务员会根据餐厅最近最受欢迎的菜品组合,推荐九个套餐给你。你的任务是从这九个套餐中找到一个最接近你心中想要的菜品组合的套餐,然后告诉服务员你想替换哪些菜,以得到你理想中的一餐。通过这种点餐方式,你可以迅速找到与你所想菜品最接近的套餐,只需做少量的调整就能得到满意的组合。类似地,在H.264编码中,编码器选择一个最合适的预测模式,通过少量的调整(即编码误差)得到最终的编码块,从而实现高效的压缩。

2024-08-30 18:58:36 1294

原创 H264编码原理(一)压缩背后的秘密

H.264编码过程充分利用了视频的特性,包括若干关键步骤:帧内预测、帧间预测、变换与量化、熵编码等。在此,我们将逐一介绍这些步骤,了解一个大概即可,我会在后面的文章中详细介绍每一步。H.264编码通过一系列精确高效的步骤实现了视频数据的高效压缩。这些步骤包括帧内预测、帧间预测、变换与量化、熵编码等,每一个步骤都有其独特的意义和作用。通过利用空间冗余、时间冗余等特性,H.264能够显著减少视频数据量,并极大地提升视频传输和存储的效率。

2024-08-28 16:24:20 916

原创 ffplay源码分析(二)结构体VideoState

在多媒体的世界里,播放器是离用户最近的一环,它将数字编码的音频和视频数据转化为生动的视听体验。ffplay 播放器作为一款强大而备受关注的工具,其背后隐藏着一系列精妙的结构体,它们协同工作,共同完成了从数据读取、解码、渲染到最终呈现的复杂流程。以下是播放器的一个简单的流程,当我们启动 ffplay 播放器,它首先会与数据源建立连接,无论是本地文件、网络流还是其他输入源。。紧接着,数据被源源不断地送入解码器,将压缩编码的数据转换为可处理的原始格式。在这一流程中,各种关键的结构体开始发挥作用。

2024-08-25 20:45:21 509

原创 流媒体协议之RTMP

今天我们要一起了解的这个协议叫 RTMP 协议,它并不复杂,对于拉流相关的协议,我们可以先思考一下拉流一般要交互什么,我理解有以下几项,连接信息:包括服务器的地址、端口号等,以建立与流媒体源的连接。认证信息:如果需要进行用户认证或授权访问,可能需要交互用户名、密码或令牌等认证凭据。流标识:明确要拉取的具体流媒体内容的标识,例如频道号、视频 ID 等,这个也可以在协议中直接约定。控制指令:例如播放、暂停、快进、快退等控制操作的指令。媒体描述:指定所需的视频或音频质量,如分辨率、帧率、码率等。

2024-08-25 14:22:04 1213

原创 音视频封装格式之FLV

FLV(Flash Video)是一种常见的视频文件格式,FLV 格式最初是由 Adobe 公司开发的,旨在为网络视频提供一种高效、可扩展且易于流式传输的解决方案。随着在线视频的迅速发展,FLV 因其良好的兼容性和流式传输性能,成为了许多视频分享网站(如早期的 YouTube、优酷等)首选的视频格式。

2024-08-24 10:44:17 1263

原创 流媒体协议之RTCP

RTCP(Real-Time Control Protocol)是用于实时音视频通信的控制协议,用于监控和反馈RTP流。RTCP的作用包括流同步、带宽管理、QoS保证和流控制。它是RTP的重要补充,通过周期性发送RTCP报告,能监控和控制RTP流质量,提高实时多媒体传输效率和质量。RTCP的基本工作原理如下:在RTP会话开始时,发送方周期性发送包含RTP流统计信息和控制信息的RTCP报告,接收方提取并维护相关状态信息用于生成报告,还会根据收到的报告更新状态和发送应答报文,发送方根据报告调整发送速率。

2024-08-23 17:48:39 1442

原创 KCP源码解析系列(五)拥塞控制

虽然开始的慢,但增速快。快重传很简单,就是比如你发送了1,2,3,4,5这几个包,然后收到了1,3,4,5的ack,2被连续跳过了三次,就直接把2重新发一次。当主机开始发送数据时,如果立即将较大的发送窗口的全部数据字节都注入到网络中,那么由于不清楚网络的情况,有可能引其网络拥塞。需要设定一个ssthresh,传输门限值,这是一个动态调整的阈值,根据cwnd和ssthresh的比较,采用不同的策略。当发生快重传时,说明网络环境不太好,这是可以快速降低ssthresh,避免网络进一步发生堵塞,这个就叫快恢复。

2024-08-20 15:16:14 1005

原创 十分钟搭建一个RTMP服务器

如果您需要搭建一个RTMP服务器,您可以使用SRS(Simple-RTMP-Server)来完成此任务。码云的源速度快:https://gitee.com/winlinvip/srs.oschina.git。设置 服务器地址 :rtmp://ip:1935/live 和 推流码 :livestream。srs官⽹:https://github.com/ossrs/srs。媒体来源可以是屏幕录制、也可以是录像文件等。

2024-08-18 21:29:48 380

原创 KCP源码解析系列(四)滑动窗口

KCP 的滑动窗口TCP 大体相同。倘若深入探究源码,便会发觉之前那些晦涩艰深的理论,在实现方面也并非高不可攀。接下来,看看 KCP 是怎样达成这些机制的。

2024-08-18 21:22:32 1206

原创 KCP源码解析系列(三)IQUEUEHEAD 队列

/此结构定义了双向队列的节点。每个节点包含两个指针:next指向下一个节点,prev指向上一个节点。

2024-08-16 16:03:28 287

原创 KCP源码解析系列(二)KCP协议结构体

结构体是 KCP 协议中控制块的核心数据结构,包含了连接状态、传输参数、缓存和控制信息等。这是整个 KCP 协议运作的核心,用于管理连接的各个方面。对于不分片的数据包,该值为 0。kcp中只有一种数据包,不管是数据还是控制信息,都用这个数据包来表示。: 会话号,用于区分不同的会话。: 时间戳,用于计算往返时间(RTT)以及重传超时(RTO)。(窗口探测包,请求对方告知窗口大小)(窗口大小通告包,告知对方窗口大小): 序号,用于数据包排序和确认。: 未确认的序号,用于流量控制。: 窗口大小,用于流量控制。

2024-08-13 16:54:20 393

原创 KCP源码解析系列(一)KCP协议介绍

TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。TCP信道是一条流速很慢,但每秒流量很大的大运河,而KCP是水流湍急的小激流。

2024-08-13 13:44:15 1153

原创 webassembly初探

优化后的中间表示被进一步编译为WebAssembly的中间表示(Wasm IR),这是用来生成最终WebAssembly二进制格式的表示。对于C/C++,Emsripten是一个常用的工具链,它基于LLVM并扩展了Clang,以直接生成WebAssembly,以下是编译步骤。这将生成example.wasm 和 example.js两个文件,其中的js文件是执行wasm文件的胶水层代码。把它的名字拆成两部分,web assembly,可以理解为,在web端运行的汇编语言。例如常量折叠,循环优化等。

2024-08-11 21:18:39 487

原创 TCP详解及其在音视频传输中的应用

TCP/IP协议栈是网络通信的基础结构,分为四层:应用层、传输层、网络层和链路层。应用层:处理具体的网络应用,协议包括HTTP、FTP、SMTP等。音视频传输中,常见的应用层协议包括RTSP、HLS、HTTP等。传输层:负责数据的传输,提供TCP和UDP两种主要协议。TCP提供可靠传输,而UDP则更注重实时性。网络层:主要负责路由选择和数据包的转发,IP协议是这一层的核心。链路层:管理物理网络连接和数据帧的传输。

2024-08-11 21:13:17 1334

原创 ffplay源码分析(七)播放控制

这个接口虽然看起来只有暂停的功能,实际上它负责暂停和继续状态的转换,上一次如果是暂停,这一次就继续,反之亦然。当然,如果用户想知道目前是开始还是暂停的状态,可以通过监听开始和暂停的状态来实现,不用自己再去记录状态。以上就是ffplay的播放控制的流程,用户操作主要是改变播放器的状态,然后收包线程和渲染线程根据状态做响应的处理即可,还是比较容易理解的。按字节跳转一般用于特定的格式,比如ts流,每一个包都是188字节,解析器按这种方式处理可以很方便的跳到目标位置。简单来说就是开始、结束、暂停、继续、跳转。

2024-06-25 19:27:39 321

原创 P2P通信基本原理

P2P即点对点协议。当A和B通信的时候,最简单的方式如下,A和B之间通过一个服务器转发数据。而P2P是这样的,双方直接进行通信这种方式能大大减轻服务端的负载,所以特别适合大数据的传输,比如实时音视频聊天、在线视频直播、大文件传输等应用场景。

2024-04-10 13:26:12 3085

原创 大语言模型入门

一个大语言模型只是两个文件:参数和某些可以运行这些参数的代码。因为这是一个 700 亿参数模型,每个参数都存储为2个字节,因此参数文件有140GB,2个字节,是因为数据类型是float16运行参数的代码,可能是一个c文件/python文件或任何其他编程语言ChatGPTG:generate 生成P:Pre-trained 预训练T:Transformer 注意力机制获取大约10TB的文本,通常来自于对网络数据的爬取。

2024-04-08 10:05:16 1399

原创 深入剖析webrtc事件机制 sigslot

在构建大型C++项目过程中,如何在各个类之间高效且安全地传递数据或事件是一项具有挑战性的任务。最直接但并不推荐的方法是使用全局变量。虽然这种方法简单易用,但它会导致命名冲突,难以维护,且全局变量的值容易在不知情的情况下被意外修改。另一种常见的方式是使用回调函数。在这种情况下,类A会注册类B的回调函数。然而,这种方法的缺点在于对象的声明周期难以控制,经常会出现回调函数触发时,对象已经被销毁的情况。WebRTC中的信号槽机制是实现通信的一种关键技术。

2024-04-06 16:40:57 1432

原创 5分钟在MAC下本地搭建大模型

Ollama——一个简明易用的本地大模型运行框架。随着围绕着 Ollama 的生态走向前台,更多用户也可以方便地在自己电脑上玩转大模型了。Ollama 的目标是帮助开发者在本地运行、创建和共享大型语言模型。Ollama 目前处于早期预览阶段,但已经提供了一些核心功能。例如,它支持运行和对话 Llama 2,这是 Meta 新推出的模型。此外,Ollama 还提供了一个模型库,开发者可以在这里下载和使用各种开源模型。

2024-03-26 11:34:50 2903

原创 ffplay源码分析(二)stream_open

stream_open 流程主要负责播放器运行过程中相关上下文和队列的初始化,以及码流读取线程的创建。也就是从这个函数开始,播放器就真正开始运行起来了。本次主要还是介绍这个过程中使用到的结构体。比较重要的后面单独解析。

2024-03-11 13:59:19 526

原创 ffmpeg源码分析(五)结构体之AVCodecContext

GOP(Group of Pictures)大小,指定两个关键帧之间的最大帧数。AVCodecContext是和编解码相关的结构体,同时也是变量最多的一个结构体。: 额外的编解码器特定数据,通常包含一些配置信息。: 像素格式,描述视频帧的颜色表示方式,例如YUV420P。: 编码器的配置文件,影响编码质量和复杂性。: 用于控制量化参数的设置,影响编码质量。: 最大B帧数,影响编码的延迟和质量。: 控制编解码器的行为的标志。: 编码过程中参考帧的数量。: 视频帧的宽度和高度。: 每个音频帧的大小。

2024-03-08 18:58:40 1191 2

原创 ffplay源码分析(六)音视频同步

在ffplay中,音视频的输出有自己的线程。比如一个没有声音的视频,或者刚播放的只有音频没有视频,视频比较晚到,那前面的音频也可以先丢弃。这三种是最基本的策略,考虑到人对声音的敏感度要强于视频,一般情况下我们会采取视频去同步音频的策略。所以最开始的时候的计算方式应该是2s-1.5s,结果是0.5s,和t3时刻计算的结果是一致的。音频同理,音频的pts假设是1.5s,设置时时刻t1假设是1001s(实际是一个很大的值),设置的时候,视频的pts假设是1s,t1假设是1000s(实际是一个很大的值),

2024-03-07 15:46:04 1331

原创 ffplay源码分析(一)主函数

在数字化时代,多媒体播放器已成为我们日常生活中不可或缺的一部分。无论是观看电影、听取音乐,抑或是进行视频会议,我们都依赖于功能强大的播放器来呈现丰富多彩的音视频内容。而在众多播放器中,FFplay以其简洁而强大的特性脱颖而出。作为FFmpeg多媒体框架的一部分,FFplay不仅提供了丰富的音视频格式支持,更以其开源、跨平台的特性备受开发者青睐。在音视频相关的面试中,ffplay中的一些代码甚至被认为是标准的解决方案。

2024-03-05 11:42:50 869

原创 ffmpeg源码分析(四)结构体之AVIOContext 、URLContext、URLProtocol

这篇文章主要是在解复用阶段所使用的结构体。ffmpeg它支持多种协议,用于从不同来源获取多媒体数据,例如HTTP、RTMP、RTSP、文件等。FFmpeg的协议解析部分包含一些结构体和流程,用于处理不同协议的数据获取。URLContext:这是FFmpeg中用于表示URL的结构体。它包含有关URL的信息,例如URL的协议、主机、端口、路径等。不同的协议解析器可以使用不同的数据填充这个结构体,以适应各种URL。:这是用于输入/输出操作的上下文结构体。它可以包含URLContext。

2024-03-04 19:44:22 1573

原创 FFmpeg源码解析系列(三)结构体之AVFormatContext

首先从ffmpeg最顶端的一个结构体说起AVFormatContext是API中直接接触到的结构体,位于avformat.h中,结构体描述了一个多媒体文件或流的构成和基本信息。,是FFmpeg中最为基本的一个结构体。贯穿了ffmpeg使用的整个流程。

2024-02-29 19:57:59 972

原创 FFmpeg源码解析系列(二)主要结构体

结构体描述作用头文件AVIOContext(I/O上下文)AVIOContext结构体用于管理媒体文件或者网络流的输入和输出操作实现文件或者流的I/O操作avio.hAVFormatContext(封装格式上下文)AVFormatContext结构体是与多媒体文件格式相关的结构体,用于打开、读取和写入媒体文件。它包含了文件的格式信息、音视频流、文件I/O操作等管理媒体文件的格式和封装信息。AVCodecContext(编解码器上下文)

2024-02-29 10:10:16 1338

原创 FFmpeg源码解析系列(一)目录和编译

FFmpeg,全称"Fast Forward MPEG",是一个功能强大、开源的多媒体框架,它提供了广泛的音频和视频处理功能,使得多媒体数据的解码、编码、转换、封装以及流媒体传输变得更加容易。随着数字媒体在我们日常生活中的普及,FFmpeg在多领域得到了广泛的应用。你可以使用FFmpeg来剪切、合并、转码、添加滤镜等,从而编辑和处理视频文件。这对于视频制作、后期制作以及视频分享平台非常重要。FFmpeg不仅支持视频,还可以用于音频文件的处理,包括音频转码、剪切、合并以及添加效果。

2024-02-28 18:01:22 1952

原创 常见图像插值算法

缩放、最近邻插值、三次立方插值

2024-02-22 16:39:18 1058

空空如也

空空如也

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

TA关注的人

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