<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wushakun的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wushakun</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wushakun]]></copyright><item><title><![CDATA[流媒体格式之HLS]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/145050815</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/145050815</guid><author>wushakun</author><pubDate>Fri, 10 Jan 2025 10:26:17 +0800</pubDate><description><![CDATA[在当今数字化的时代，流媒体技术已经成为我们获取信息和娱乐的重要方式。无论是观看精彩的影视作品，还是实时关注重要的新闻事件，流畅、稳定和高质量的流媒体体验至关重要。而在众多流媒体传输格式中，HLS（HTTP Live Streaming）格式凭借其独特的优势和特点，逐渐成为行业内广泛应用的重要技术之一。HLS（HTTP Live Streaming）是苹果公司推出的基于 HTTP 的流媒体传输协议。]]></description><category></category></item><item><title><![CDATA[ffmpeg源码分析（九）解协议]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/144692990</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/144692990</guid><author>wushakun</author><pubDate>Tue, 24 Dec 2024 14:04:05 +0800</pubDate><description><![CDATA[是FFmpeg用于打开输入多媒体数据的关键函数。它通过统一的接口处理多种协议，使用户无需关心底层实现。该函数的声明如下，位于ps：指向结构体的指针，用于存储打开的多媒体数据上下文。url：要打开的资源URL。fmt：指定输入格式，如果为NULL，FFmpeg会自动探测。options：用于传递其他选项（字典形式）。这个函数主要完成的功能就是探测输入的格式，然后配置格式的上下文，比如输入一个mp4文件的地址，它会判断出这是mp4文件，然后AVFormatContext 就知道该怎么处理这个文件了。]]></description><category></category></item><item><title><![CDATA[ffmpeg源码分析（七）结构体之AVStream]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/142715986</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/142715986</guid><author>wushakun</author><pubDate>Sat, 05 Oct 2024 19:17:44 +0800</pubDate><description><![CDATA[AVStream是存储每一个视频/音频/字幕/其它流信息的结构体。]]></description><category></category></item><item><title><![CDATA[ffmpeg源码分析（三）结构体之AVFormatContext]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/142712823</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/142712823</guid><author>wushakun</author><pubDate>Sat, 05 Oct 2024 11:48:58 +0800</pubDate><description><![CDATA[AVFormatContext是API中直接接触到的结构体，位于avformat.h中，结构体描述了一个多媒体文件或流的构成和基本信息。，是FFmpeg中最为基本的一个结构体。贯穿了ffmpeg使用的整个流程。可以说是ffmpeg中最顶端的一个结构体。]]></description><category></category></item><item><title><![CDATA[C++可调用对象]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141789270</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141789270</guid><author>wushakun</author><pubDate>Sun, 01 Sep 2024 20:24:20 +0800</pubDate><description><![CDATA[captures]为捕获列表，用于捕获外层变量。[&]表示捕获当前范围内所有局部变量。[val]：表示以传值方式捕捉变量val[=]：表示以传值方式捕捉当前作用域中的变量，包括this指针。[&val]：表示以引用方式传递捕捉变量val。[&]：表示以引用方式传递捕捉当前作用域中的所有变量，包括this指针。[this]：表示以传值方式捕捉当前的this指针。params：参数列表。与普通函数参数列表使用相同。如果不需要传递参数，可以连同()一起省略。]]></description><category></category></item><item><title><![CDATA[ffplay源码分析（五）包缓存队列和帧缓存队列]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141787965</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141787965</guid><author>wushakun</author><pubDate>Sun, 01 Sep 2024 18:43:00 +0800</pubDate><description><![CDATA[在音视频处理流程中，的有两种队列，包缓存队列（Packet Buffer Queue）和帧缓存队列（Frame Buffer Queue）。这两个队列的存在，是为了适应音视频数据处理过程中的多线程架构——包括收包线程、解码线程和渲染线程。具体来说，收包线程负责从网络或文件中读取数据并将其放入包缓存队列中；解码线程从包缓存队列中取出数据进行解码，然后将解码后的数据放入帧缓存队列中；最后，渲染线程从帧缓存队列中取出数据进行渲染。由于每个线程的处理速度不同，缓存队列在这一过程中起到了平衡各线程工作负荷和避免数据丢]]></description><category></category></item><item><title><![CDATA[ffmpeg源码分析（六）结构体之AVPacket和AVFrame（内存管理）]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141758817</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141758817</guid><author>wushakun</author><pubDate>Sat, 31 Aug 2024 21:26:30 +0800</pubDate><description><![CDATA[这是毕业一年跳槽时被面过的一道题，他问ffmpeg的内存管理是怎样的。当时支支吾吾没有回答出来。如果再让我回到过去，我会和他说莫欺少年穷~]]></description><category></category></item><item><title><![CDATA[H264编码原理（二）帧内预测]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141724854</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141724854</guid><author>wushakun</author><pubDate>Fri, 30 Aug 2024 18:58:36 +0800</pubDate><description><![CDATA[假设你去了一家餐厅吃饭，这家餐厅提供了一个有趣的点餐方式。服务员会根据餐厅最近最受欢迎的菜品组合，推荐九个套餐给你。你的任务是从这九个套餐中找到一个最接近你心中想要的菜品组合的套餐，然后告诉服务员你想替换哪些菜，以得到你理想中的一餐。通过这种点餐方式，你可以迅速找到与你所想菜品最接近的套餐，只需做少量的调整就能得到满意的组合。类似地，在H.264编码中，编码器选择一个最合适的预测模式，通过少量的调整（即编码误差）得到最终的编码块，从而实现高效的压缩。]]></description><category></category></item><item><title><![CDATA[H264编码原理（一）压缩背后的秘密]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141643289</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141643289</guid><author>wushakun</author><pubDate>Wed, 28 Aug 2024 16:24:20 +0800</pubDate><description><![CDATA[H.264编码过程充分利用了视频的特性，包括若干关键步骤：帧内预测、帧间预测、变换与量化、熵编码等。在此，我们将逐一介绍这些步骤，了解一个大概即可，我会在后面的文章中详细介绍每一步。H.264编码通过一系列精确高效的步骤实现了视频数据的高效压缩。这些步骤包括帧内预测、帧间预测、变换与量化、熵编码等，每一个步骤都有其独特的意义和作用。通过利用空间冗余、时间冗余等特性，H.264能够显著减少视频数据量，并极大地提升视频传输和存储的效率。]]></description><category></category></item><item><title><![CDATA[ffplay源码分析（二）结构体VideoState]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141534569</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141534569</guid><author>wushakun</author><pubDate>Sun, 25 Aug 2024 20:45:21 +0800</pubDate><description><![CDATA[在多媒体的世界里，播放器是离用户最近的一环，它将数字编码的音频和视频数据转化为生动的视听体验。ffplay 播放器作为一款强大而备受关注的工具，其背后隐藏着一系列精妙的结构体，它们协同工作，共同完成了从数据读取、解码、渲染到最终呈现的复杂流程。以下是播放器的一个简单的流程，当我们启动 ffplay 播放器，它首先会与数据源建立连接，无论是本地文件、网络流还是其他输入源。。紧接着，数据被源源不断地送入解码器，将压缩编码的数据转换为可处理的原始格式。在这一流程中，各种关键的结构体开始发挥作用。]]></description><category></category></item><item><title><![CDATA[流媒体协议之RTMP]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141526078</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141526078</guid><author>wushakun</author><pubDate>Sun, 25 Aug 2024 14:22:04 +0800</pubDate><description><![CDATA[今天我们要一起了解的这个协议叫 RTMP 协议，它并不复杂，对于拉流相关的协议，我们可以先思考一下拉流一般要交互什么，我理解有以下几项，连接信息：包括服务器的地址、端口号等，以建立与流媒体源的连接。认证信息：如果需要进行用户认证或授权访问，可能需要交互用户名、密码或令牌等认证凭据。流标识：明确要拉取的具体流媒体内容的标识，例如频道号、视频 ID 等，这个也可以在协议中直接约定。控制指令：例如播放、暂停、快进、快退等控制操作的指令。媒体描述：指定所需的视频或音频质量，如分辨率、帧率、码率等。]]></description><category></category></item><item><title><![CDATA[音视频封装格式之FLV]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141496102</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141496102</guid><author>wushakun</author><pubDate>Sat, 24 Aug 2024 10:44:17 +0800</pubDate><description><![CDATA[FLV（Flash Video）是一种常见的视频文件格式，FLV 格式最初是由 Adobe 公司开发的，旨在为网络视频提供一种高效、可扩展且易于流式传输的解决方案。随着在线视频的迅速发展，FLV 因其良好的兼容性和流式传输性能，成为了许多视频分享网站（如早期的 YouTube、优酷等）首选的视频格式。]]></description><category></category></item><item><title><![CDATA[流媒体协议之RTCP]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141471559</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141471559</guid><author>wushakun</author><pubDate>Fri, 23 Aug 2024 17:48:39 +0800</pubDate><description><![CDATA[RTCP（Real-Time Control Protocol）是用于实时音视频通信的控制协议，用于监控和反馈RTP流。RTCP的作用包括流同步、带宽管理、QoS保证和流控制。它是RTP的重要补充，通过周期性发送RTCP报告，能监控和控制RTP流质量，提高实时多媒体传输效率和质量。RTCP的基本工作原理如下：在RTP会话开始时，发送方周期性发送包含RTP流统计信息和控制信息的RTCP报告，接收方提取并维护相关状态信息用于生成报告，还会根据收到的报告更新状态和发送应答报文，发送方根据报告调整发送速率。]]></description><category></category></item><item><title><![CDATA[KCP源码解析系列（五）拥塞控制]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141359453</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141359453</guid><author>wushakun</author><pubDate>Tue, 20 Aug 2024 15:16:14 +0800</pubDate><description><![CDATA[虽然开始的慢，但增速快。快重传很简单，就是比如你发送了1，2，3，4，5这几个包，然后收到了1，3，4，5的ack，2被连续跳过了三次，就直接把2重新发一次。当主机开始发送数据时，如果立即将较大的发送窗口的全部数据字节都注入到网络中，那么由于不清楚网络的情况，有可能引其网络拥塞。需要设定一个ssthresh，传输门限值，这是一个动态调整的阈值，根据cwnd和ssthresh的比较，采用不同的策略。当发生快重传时，说明网络环境不太好，这是可以快速降低ssthresh，避免网络进一步发生堵塞，这个就叫快恢复。]]></description><category></category></item><item><title><![CDATA[十分钟搭建一个RTMP服务器]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141305847</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141305847</guid><author>wushakun</author><pubDate>Sun, 18 Aug 2024 21:29:48 +0800</pubDate><description><![CDATA[如果您需要搭建一个RTMP服务器，您可以使用SRS（Simple-RTMP-Server）来完成此任务。码云的源速度快：https://gitee.com/winlinvip/srs.oschina.git。设置 服务器地址 :rtmp://ip:1935/live 和 推流码 ：livestream。srs官⽹：https://github.com/ossrs/srs。媒体来源可以是屏幕录制、也可以是录像文件等。]]></description><category></category></item><item><title><![CDATA[KCP源码解析系列（四）滑动窗口]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141304711</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141304711</guid><author>wushakun</author><pubDate>Sun, 18 Aug 2024 21:22:32 +0800</pubDate><description><![CDATA[KCP 的滑动窗口TCP 大体相同。倘若深入探究源码，便会发觉之前那些晦涩艰深的理论，在实现方面也并非高不可攀。接下来，看看 KCP 是怎样达成这些机制的。]]></description><category></category></item><item><title><![CDATA[KCP源码解析系列（三）IQUEUEHEAD 队列]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141262298</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141262298</guid><author>wushakun</author><pubDate>Fri, 16 Aug 2024 16:03:28 +0800</pubDate><description><![CDATA[/此结构定义了双向队列的节点。每个节点包含两个指针：next指向下一个节点，prev指向上一个节点。]]></description><category></category></item><item><title><![CDATA[KCP源码解析系列（二）KCP协议结构体]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141168267</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141168267</guid><author>wushakun</author><pubDate>Tue, 13 Aug 2024 16:54:20 +0800</pubDate><description><![CDATA[结构体是 KCP 协议中控制块的核心数据结构，包含了连接状态、传输参数、缓存和控制信息等。这是整个 KCP 协议运作的核心，用于管理连接的各个方面。对于不分片的数据包，该值为 0。kcp中只有一种数据包，不管是数据还是控制信息，都用这个数据包来表示。: 会话号，用于区分不同的会话。: 时间戳，用于计算往返时间（RTT）以及重传超时（RTO）。（窗口探测包，请求对方告知窗口大小）（窗口大小通告包，告知对方窗口大小）: 序号，用于数据包排序和确认。: 未确认的序号，用于流量控制。: 窗口大小，用于流量控制。]]></description><category></category></item><item><title><![CDATA[KCP源码解析系列（一）KCP协议介绍]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141157907</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141157907</guid><author>wushakun</author><pubDate>Tue, 13 Aug 2024 13:44:15 +0800</pubDate><description><![CDATA[TCP是为流量设计的（每秒内可以传输多少KB的数据），讲究的是充分利用带宽。而 KCP是为流速设计的（单个数据包从一端发送到一端需要多少时间），以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。TCP信道是一条流速很慢，但每秒流量很大的大运河，而KCP是水流湍急的小激流。]]></description><category></category></item><item><title><![CDATA[webassembly初探]]></title><link>https://blog.youkuaiyun.com/wushakun/article/details/141112087</link><guid>https://blog.youkuaiyun.com/wushakun/article/details/141112087</guid><author>wushakun</author><pubDate>Sun, 11 Aug 2024 21:18:39 +0800</pubDate><description><![CDATA[优化后的中间表示被进一步编译为WebAssembly的中间表示（Wasm IR），这是用来生成最终WebAssembly二进制格式的表示。对于C/C++，Emsripten是一个常用的工具链，它基于LLVM并扩展了Clang，以直接生成WebAssembly，以下是编译步骤。这将生成example.wasm 和 example.js两个文件，其中的js文件是执行wasm文件的胶水层代码。把它的名字拆成两部分，web assembly，可以理解为，在web端运行的汇编语言。例如常量折叠，循环优化等。]]></description><category></category></item></channel></rss>