- 博客(474)
- 收藏
- 关注
原创 【CMake】CMake创建、安装、使用静态库和动态库
本文介绍了使用CMake创建和管理静态库/动态库的方法。首先通过示例代码展示了如何编写CMakeLists.txt文件,分别使用ADD_LIBRARY命令生成动态库(SHARED)和静态库(STATIC)。针对同时生成两种库的需求,详细说明了SET_TARGET_PROPERTIES关键字的使用方法。随后讲解了如何通过INSTALL命令将库文件、头文件安装到系统目录。最后演示了如何使用已安装的库,包括设置头文件搜索路径和库链接方法,重点介绍了LINK_DIRECTORIES和TARGET_LINK_LIBR
2025-07-13 21:32:37
703
原创 【CMake】CMake构建项目入门
本文介绍了CMake跨平台构建工具的基本使用方法。首先讲解了CMake的安装(Ubuntu系统)和版本检查,然后通过Hello World示例演示了完整的构建流程:创建CMakeLists.txt配置文件,使用PROJECT、SET、MESSAGE、ADD_EXECUTABLE等核心指令,以及内部/外部构建方式的区别。重点解析了CMake语法规则,包括变量引用、指令参数格式等注意事项。最后建议完善工程结构,添加src源代码目录、doc文档目录和README等文件。文章配有详
2025-07-12 21:43:26
1034
原创 【音视频】nginx-hls-多码率测试环境搭建
本文介绍了nginx-http-flv-module开源项目的功能对比和环境搭建方法。该项目相比nginx-rtmp-module新增了HTTP-FLV播放、GOP缓存、虚拟主机等特性。环境搭建部分详细说明了在Ubuntu系统下安装依赖库(gcc、pcre、zlib、openssl)、下载nginx-http-flv-module源码、配置nginx编译选项(注意处理OpenSSL 3.0的函数弃用警告)以及编译安装的完整过程。其中特别提醒了模块路径配置错误可能导致的问题,并提供了解决OpenSSL版本兼容
2025-07-12 00:12:06
570
原创 【音视频】HLS拉流抓包分析
本文介绍了HLS流媒体协议的实际测试与分析过程。首先搭建SRS服务器环境,使用FFmpeg推流RTMP并生成HLS切片文件(.m3u8索引和.ts视频片段)。通过FFplay拉流验证播放效果,并用Wireshark抓取HTTP请求进行协议分析。重点解析了客户端请求.m3u8文件的HTTP报文细节,包括GET方法、查询参数和请求头;以及服务器响应报文的特征,如Content-Type、SRS服务器标识和返回的.m3u8文件内容格式。实验结果表明HLS通过HTTP协议实现流媒体分片传输,客户端需先获取动态更新的
2025-07-11 15:04:54
1329
原创 【音视频】HTTP协议介绍
HTTP协议是万维网数据通信的基础,作为应用层协议,它具有简单快速、灵活、无连接和无状态的特点。HTTP报文由起始行、头部字段和消息正文三部分组成,起始行包含请求方法/状态码、请求目标和协议版本。头部字段采用key-value形式,提供报文的详细信息。常见请求字段如User-Agent用于标识客户端类型,而响应字段如Server说明服务器信息。尽管HTTP协议是无状态的,但通过Cookie和Session技术可保持会话状态。该协议支持多种数据类型传输,通过Content-Type标记数据类型,包括表单、JS
2025-07-11 00:04:56
672
原创 【音视频】TS协议解析
TS流协议解析与封装流程 摘要:本文解析了TS(Transport Stream)协议的结构与封装流程。TS流由固定188/204字节的数据包组成,适合广播电视等不可靠环境传输。其封装层级为:原始媒体数据ES流→分组化的PES流→最终封装为TS流(多节目)或PS流(单节目)。TS包结构包含同步字节、PID标识、加扰控制等关键字段,解析时需校验包有效性(同步标志、错误指示等)。文中详细说明了TS包头解析方法、无效包判断条件及有效负载定位流程,并对比了TS与PS流的应用差异(实时传输vs本地存储)。通过结构体定
2025-07-10 17:15:03
731
原创 【音视频】TS协议介绍
TS协议(Transport Stream)是MPEG-2标准中用于多媒体传输的容器格式,广泛应用于广播电视和网络流媒体。TS流采用固定188字节的包结构,包含TS头、自适应域和有效载荷三部分。通过PID标识不同类型的数据包,关键表包括PAT(指明PMT表PID)和PMT(指明音视频流PID)。TS协议具有强容错性,支持从任意位置解码,其分层结构包括TS层(传输流)、PES层(带时间戳)和ES层(原始音视频数据)。自适应域用于解决时钟同步问题,定期传输PCR(节目时钟参考)确保解码器同步。
2025-07-09 12:51:25
1007
原创 【音视频】HLS-m3u8协议介绍
m3u8协议是HLS流媒体传输中的核心索引格式,基于M3U扩展而成,采用UTF-8编码的文本文件(.m3u8)描述媒体片段信息。其核心作用包括:指示流媒体分片地址、时长及多码率版本,实现动态自适应播放。m3u8文件包含关键标签如#EXTM3U(文件头)、#EXT-X-VERSION(版本)、#EXTINF(分片时长)、#EXT-X-TARGETDURATION(最大分片时长)等,支持点播(带#EXT-X-ENDLIST)和直播场景。HLS通过m3u8索引TS分片,客户端根据网络状况选择不同码率的m3u8列表
2025-07-08 14:41:06
1013
原创 【音视频】 HLS协议介绍
HLS(HTTP Live Streaming)是苹果公司基于HTTP提出来的一种自适应码率的流媒体传输协议。尤其是在移动端,由于ios/h5不支持flash,使得HLS成了移动端实时音视频流传输的首选。HLS经常应用在直播领域,一些国内的直播云通常使用HLS拉流。但是HLS延迟严重,通常延迟都在10-30s之间。HTTP 实时流(HLS)是使用最广泛的视频流协议之一。尽管它称为 HTTP“实时”流,但它同时适用于点播流和实时流。
2025-07-08 13:13:47
1145
原创 【音视频】HLS简介与服务器搭建
HLS(HTTP实时流)是一种广泛使用的视频流协议,适用于点播和实时流传输。它将视频分割为小片段并通过HTTP分发,支持自适应比特率调整以适应不同网络条件。文章介绍了HLS的工作原理,包括服务器端的编码、分段和客户端播放流程,并提供了SRS流媒体服务器的安装配置指南。通过FFmpeg进行RTMP推流和HLS拉流测试,对比显示HLS延迟较高但兼容性更好。SRS服务器配置涉及HLS参数设置,如片段时长和缓存窗口,可优化流媒体性能。
2025-07-07 22:48:35
661
原创 【网络】SSL/TLS介绍
SSL/TLS协议是保障网络通信安全的核心技术。SSL由网景公司开发,后演变为更安全的TLS协议,现已成为互联网加密通信标准。TLS在SSL基础上增强了MAC算法、警报机制和规范定义,提供更严密的身份认证、数据加密和完整性保护。其工作原理结合对称加密(高效)和非对称加密(安全密钥分发),通过公钥加密和私钥解密实现安全通信。TLS证书作为公钥与身份的绑定凭证,由CA机构验证签发。TLS握手过程分为四个阶段:客户端发起请求、服务器响应协商、证书验证和密钥交换,最终生成共享密钥建立加密通道。该协议解决了密钥分发难
2025-06-29 00:51:23
1015
原创 【音视频】RTMP拉流抓包分析
本文摘要: RTMP流媒体协议分析:通过ffmpeg推流和ffplay拉流实例,详细解析RTMP协议的三次握手、connect命令及流量控制机制。推流命令示例为ffmpeg -i 1.mp4 -f flv rtmp://ip/live/livestream,拉流使用ffplay -i rtmp://ip/live/livestream。RTMP握手分为三个阶段:C0+C1→S0+S1+S2→C2,通过随机数交互完成认证。握手后发送connect命令(AMF0编码)声明应用名称和编解码参数。最后分析Windo
2025-06-27 01:05:10
669
原创 【音视频】Ubuntu下配置ffmpeg库
本文介绍了FFmpeg预编译库的下载与环境配置方法。首先从GitHub仓库下载编译好的动态库并解压,然后在.bashrc文件中添加bin和lib路径的环境变量配置,通过source命令使其生效。最后通过ffmpeg -version命令验证安装是否成功。文中提供了详细的配置截图和路径示例,帮助用户快速完成FFmpeg的环境部署。
2025-06-26 14:24:28
245
原创 【音视频】RTMP协议推流抓包分析
RTMP协议解析与推流分析 RTMP是专为实时流媒体设计的应用层协议,基于TCP实现可靠传输。其核心技术包括: 分层传输机制:将数据封装为消息并分块发送,支持命令交互和媒体流传输 低延迟控制:通过时间戳同步和流式传输实现1-3秒延迟 三次握手流程:交换时间戳和随机数完成连接建立 推流实践分析:使用FFmpeg将H.264/AAC封装为FLV并通过RTMP推流,Wireshark抓包显示TCP三次握手过程,验证了端口标识、序列号同步等关键机制。整个流程体现了RTMP在实时音视频传输中的技术优势。
2025-06-25 14:45:22
680
原创 【音视频】RTMP协议详解
RTMP协议是Adobe提出的实时多媒体传输协议,主要用于音视频直播领域。该协议基于TCP传输层,通过握手流程建立连接后,将数据拆分为Chunk进行多路复用传输。RTMP的核心机制包括:1) 三次握手建立连接;2) Message分块为Chunk传输,支持动态调整块大小;3) 通过Basic Header和Message Header实现数据标识与重组。协议采用Type 0-3四种Header格式,其中Type 0为完整格式(11字节),其他为差分格式以提高效率。RTMP通过Chunk Stream ID区
2025-06-20 23:09:55
832
原创 【Linux】Linux权限管理
本文介绍了Linux系统中的Shell命令和权限管理机制。Shell作为命令行解释器,将用户指令传递给内核并返回结果,常见如bash。Linux权限分为超级用户(root)和普通用户,通过su/sudo实现切换和权限提升。文件权限针对三类用户(拥有者、组、其他)设置rwx(读写执行)权限,可使用chmod命令修改。权限管理通过限制用户访问范围来保障系统安全,是Linux多用户环境的重要特性。
2025-06-18 17:42:52
768
原创 【Linux】Linux静态库和动态库基础
静态库与动态库的概念及使用流程 静态库在编译阶段嵌入可执行文件,生成独立程序,文件后缀为.a。优点包括独立性强、启动速度快,缺点是体积大且更新麻烦。动态库则在运行时加载,后缀为.so,具有体积小、更新方便的优点,但依赖环境且启动稍慢。 静态库制作流程:1) 编译源文件为.o;2) 用ar工具打包为.a文件;3) 发布库文件和头文件。使用时需指定头文件路径(-I)和库路径(-L)。动态库制作类似,但需-fPIC编译,使用ldconfig或环境变量配置路径。 关键区别: 静态库:编译时链接,独立性强 动态库:运
2025-06-18 00:50:20
1259
原创 【Linux】Linux 线程池基础
本文介绍了线程池的概念、优点和应用场景,并实现了一个简单的线程池。线程池通过预先创建一定数量的线程,避免了频繁创建销毁线程的开销,提高了系统性能。其优点包括快速响应任务、防止系统过载和资源占用较少。线程池适用于短时任务量大或对性能要求高的场景。文章通过C++代码实现了线程池的核心功能,包括任务队列管理、线程同步机制等,并展示了线程池处理数学计算任务的运行效果。该实现使用了互斥锁和条件变量确保线程安全,通过模板设计提高了代码复用性。
2025-06-17 16:09:21
712
原创 【Linux】Linux异步I/O -libaio
libaio是Linux内核提供的异步I/O库,通过io_submit提交请求后立即返回,内核通过完成队列通知结果。其核心特性包括零拷贝(结合O_DIRECT绕过内核缓冲区)和批量处理。使用O_DIRECT时需注意数据对齐要求,适合数据库等大文件连续I/O场景。主要API包括:io_setup创建上下文、io_submit提交请求、io_getevents获取完成事件,以及io_prep_pread/pwrite准备读写请求。libaio通过异步机制显著提升I/O性能,特别适合高并发存储应用。
2025-06-17 13:14:20
1124
原创 【Linux】Linux异步I/O- POSIX glibc
本文介绍了异步I/O的概念及其实现方式。异步I/O允许应用程序发起请求后立即返回,由系统后台处理IO操作,完成后通过回调或信号通知,相比同步I/O具有高并发和资源利用率优势。文章重点分析了glibc对POSIX AIO标准的实现,包括关键函数如aio_read、aio_write等,以及核心数据结构aiocb和sigevent。glibc通过线程池模拟异步I/O,本质仍是多线程同步I/O,性能较低。文章还对比了Linux系统中不同的异步I/O实现方案(如libaio、io_uring)及其他操作系统的异步接
2025-06-16 21:03:40
1061
1
原创 【Linux】Linux 信号驱动I/O
信号驱动I/O是一种同步I/O模型,通过内核发送SIGIO信号通知进程文件描述符就绪,实现非阻塞的事件通知。其核心流程包括:注册兴趣和信号处理函数、异步通知、事件处理。虽然通知阶段是非阻塞的,但数据拷贝阶段仍需阻塞式系统调用,因此本质上属于同步I/O。实现时需通过fcntl设置O_ASYNC标志和进程属主,并使用sigaction注册SIGIO处理函数。示例代码展示了基于信号驱动的TCP服务端实现,其中listen_fd设置为信号驱动模式,新连接到来时会触发信号处理函数进行accept操作。该模型适合需要高
2025-06-15 16:52:35
844
原创 【Linux】Linux多路复用-epoll
epoll是Linux高效I/O多路复用机制,通过epoll_create创建内核事件表(含红黑树和就绪队列),epoll_ctl注册/修改/删除监控事件,epoll_wait获取就绪事件。其核心优势在于:1)红黑树存储监控的FD,增删改查高效;2)回调机制将就绪事件自动加入就绪队列;3)仅返回就绪事件,避免遍历所有FD。相比select/poll,epoll更适合高并发场景,是高性能服务器的关键技术。
2025-06-14 17:53:38
691
原创 【Linux】Linux多路复用-poll
摘要 Poll是Unix/Linux系统中的多路IO复用机制,用于监控多个文件描述符的状态变化(可读、可写等)。它通过pollfd结构体(包含fd、events、revents)管理文件描述符。核心函数poll(fds[], nfds, timeout)可设置超时时间并返回就绪的fd数量。Poll服务器的工作流程包括:创建监听套接字、初始化pollfd数组、持续检测事件(新连接或数据读取)、处理就绪事件(accept新连接或读取数据)。相较于select,poll不需要每次重新设置fd,提高了效率。文章还提
2025-06-14 14:26:41
1009
原创 【Linux】Linux 多路复用-select
摘要:多路复用技术(如select)允许单线程高效监控多个I/O通道,解决了传统网络编程中多线程资源消耗大或轮询浪费CPU的问题。select通过内核监控文件描述符集合,在事件发生时通知程序处理。其工作流程包括设置描述符集合、调用select等待事件、处理就绪事件并更新集合。文章详细解析了select函数参数、文件描述符就绪条件,并提供了基于select的服务器实现思路。该技术显著提升了网络服务器的并发处理能力,适合高负载场景。
2025-06-14 00:17:57
988
原创 【Linux】Linux磁盘与链接
磁盘存储与管理是计算机系统的重要组成部分。本文介绍了磁盘的基本结构、分区与格式化原理,以及Linux系统中的文件管理机制。 磁盘由多个同心圆磁道组成,数据以扇区为单位存储。为便于管理,磁盘被分区并格式化为Block Group结构,包含超级块、块组描述符、inode位图和数据区等组件。每个文件通过唯一的inode编号标识,存储属性和数据块位置信息。 软硬链接是Linux文件系统的特色功能。软链接类似快捷方式,存储目标文件路径,可以跨文件系统;硬链接则共享inode节点,删除源文件后数据仍可访问。通过stat
2025-06-13 01:34:12
757
原创 【Linux】Linux基础I/O
本文介绍了C语言和系统文件I/O操作的基本接口。C语言提供了fopen、fclose、fwrite等系列函数进行文件读写,并以二进制或文本形式操作数据。系统调用层面则通过open、close、write、read等函数实现底层文件操作,其中open返回的文件描述符从3开始依次递增。文章通过具体代码示例,演示了如何创建文件、读写内容以及关闭文件,并解释了文件描述符与标准输入输出的关系,说明用户程序必须通过操作系统才能访问硬件文件。
2025-06-12 12:03:13
1195
原创 【Linux】Linux高级I/O
五种I/O模型浅析 摘要:本文介绍五种常见的I/O模型,包括阻塞式I/O、非阻塞式I/O、I/O复用、信号驱动式I/O和异步I/O。I/O操作分两个阶段:等待数据就绪和数据拷贝。阻塞式I/O简单但资源利用率低;非阻塞式I/O通过轮询避免阻塞;I/O复用(如select/epoll)高效处理多连接;信号驱动式I/O通过信号通知事件就绪;异步I/O完全非阻塞。不同模型适用于不同场景,高并发推荐I/O复用,简单任务可用阻塞式I/O。理解这些模型有助于优化网络编程性能。(150字)
2025-06-11 18:14:07
1254
原创 【Linux】Makefile基础
Makefile是自动化构建C/C++项目的工具,通过定义规则管理编译过程。其核心由目标、依赖和命令组成,基本语法为target: dependencies [tab] command。工作原理是根据文件时间戳判断是否需要重建目标。支持变量定义(如CC=g++)和内置变量($@表示目标文件名)。伪目标(.PHONY)用于执行非文件操作(如clean)。示例展示了从直接编译到使用变量、模式匹配的进阶写法,最终提供一个完整的Makefile模板,包含编译器设置、源文件列表和目标生成规则,实现自动化构建可执行程序
2025-06-11 16:42:39
1086
原创 【Linux】进程间通讯-消息队列
消息队列是一种进程间通信机制,本质上是内核提供的链表数据结构。发送进程向队列插入消息节点,接收进程则删除节点读取数据。消息结构包含类型标识符(mtype)和正文(mtext),大小受系统限制(MSGMAX/MSGMNB)。关键操作包括:msgget创建队列、msgsnd发送数据、msgrcv接收数据、msgctl控制队列。使用时需定义消息缓冲区结构,通过msgtype区分消息类型。生产者-消费者模式中,双方需约定相同的IPCKEY标识队列。示例代码展示了队列创建、消息发送/接收及队列删除的完整流程,可通过i
2025-06-09 16:09:30
864
原创 【Linux】Linux进程间通讯-信号
函数功能:设置某一信号的对应动作参数说明:第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL(9号信号)和SIGSTOP(19号信号)外的任何一种信号。第二个参数handle关联动作含义SIG_DFL执行该信号的默认处理动作SIG_IGN忽略该信号提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉(catch)一个信号signal函数可以自定义回调函数,来处理特定的信号这里我们自定义的回调函数,然后打印对应的信号。
2025-06-09 00:39:02
704
原创 【Linux】Linux进程间通讯-共享内存
要使用一块共享内存,进程必须首先分配它。随后需要访问这个共享内存块的每一个进程都必须将这个共享内存绑定到自己的地址空间中。在 Linux 系统中,每个进程的虚拟内存是被分为许多页面的。这些内存页面中包含了实际的数据。每个进程都会维护一个从内存地址到虚拟内存页面之间的映射关系。尽管每个进程都有自己的内存地址,不同的进程可以同时将同一个内存页面映射到自己的地址空间中,从而达到共享内存的目的。分配一个新的共享内存块会创建新的内存页面。
2025-06-07 15:06:48
1034
原创 【Linux】Linux 进程间通讯-管道
进程间通信(IPC)是实现不同进程间数据共享和同步的重要手段。文章介绍了IPC的基本概念、目的和分类,重点讲解了匿名管道的实现原理和使用方法。管道通过内核缓冲区实现单向数据传输,适用于父子进程通信,具有流式传输、同步互斥等特点。示例代码展示了如何使用pipe和fork函数建立父子进程间的管道通信,并分析了字节流通信的特性。管道通信随进程退出而释放,需注意读写端的关闭时机和双向通信的建立方式。
2025-06-06 23:51:06
1359
原创 【Linux】 Linux 进程控制
摘要: 本文详细介绍了Linux进程管理中的关键概念和操作。主要内容包括: 进程创建:重点讲解fork()函数的工作原理、返回值机制和写时拷贝技术,分析父子进程的执行流程。 进程终止:阐述进程退出的三种场景,介绍退出码的作用及查询方法,对比return、exit()和_exit()三种退出方式的区别。 进程等待:说明父进程等待子进程的必要性,演示wait()和waitpid()两种等待方法的使用,展示如何防止僵尸进程的产生。 文章通过代码示例和运行结果直观展示了进程创建、终止和等待的全过程,并提供了监控进程
2025-06-05 23:42:22
1144
原创 【Linux】Linux程序地址基础
本文深入探讨了程序地址空间与进程虚拟地址空间的区别。通过代码实验验证了程序地址空间的组成结构,包括代码区、字符常量区、已/未初始化区、堆区和栈区的内存分布特点。重点分析了进程虚拟地址空间的实现机制,指出每个进程通过独立的mm_struct结构体维护虚拟地址映射,并通过页表转换为物理地址。文章解释了父子进程共享相同虚拟地址但可能指向不同物理地址的现象,介绍了写时拷贝技术对性能的优化作用。最后强调了虚拟地址空间机制对进程隔离和内存保护的重要性。(150字)
2025-06-04 14:48:25
854
原创 【Linux】Linux 进程基础
在时间片轮转调度算法中,系统根据先来先服务的原则,将所有的就绪进程排成一个就绪队列,并且每隔一段时间产生一次中断,激活系统中的进程调度程序,完成一次处理机调度,把处理机分配给就绪队列队首进程,让其执行指令。从上述的结果可以看出,main函数的进程和fork创建的进程打印的结果是一样的,并且通过pid和ppid发现,fork的父进程就是main函数的进程,说明fork所创建出来的子进程和父进程在内存上映射。进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。
2025-06-03 22:56:08
1092
原创 【Linux】pthread多线程同步
线程同步与互斥锁机制 本文介绍了线程同步的核心概念和互斥锁的应用。线程共享全局变量时可能引发数据安全问题,临界区的原子操作需要通过同步机制保证。互斥锁(mutex)是最常用的同步工具,通过锁定和解锁操作确保同一时间只有一个线程访问共享资源。文章详细解析了互斥锁的5个关键API函数:初始化(pthread_mutex_init)、加锁(pthread_mutex_lock/pthread_mutex_trylock)、解锁(pthread_mutex_unlock)和销毁(pthread_mutex_dest
2025-06-03 01:00:27
869
原创 【Linux】pthread多线程基础
线程概述与创建 线程是轻量级进程,允许应用程序并发执行多个任务。一个进程包含多个线程,所有线程共享全局内存区域(如数据段、堆内存),但拥有独立的栈空间。线程比进程创建更快,资源消耗更少,适合高效并发处理。在Linux中,线程本质仍是进程,可通过ps -Lf pid查看线程ID。 线程与进程的主要区别在于: 资源共享:线程共享内存,通信更便捷;进程需通过IPC机制。 创建开销:线程创建无需复制内存和页表,速度更快。 创建线程使用pthread_create(),需指定线程函数和参数。线程终止方式包括:主动调用
2025-06-02 20:36:51
974
原创 【音视频】 FFmpeg 硬件(AMD)解码H264
硬件编解码是利用GPU等独立硬件模块进行视频编解码的技术,能降低CPU负荷,提高性能,但兼容性和画质处理较弱。软件编解码则完全依赖CPU,兼容性更好但功耗较高。常见的GPU编解码方案包括厂商SDK(如NVIDIA的NVENC、AMD的AMF)和FFmpeg集成方案。不同平台对硬件编解码的支持差异较大,Windows主要使用Direct3D/DXVA2,Linux支持VAAPI/VDPAU,而macOS使用VideoToolbox。FFmpeg提供了跨平台的硬件加速接口,但在功能完整性和易用性上仍有不足。硬件
2025-06-01 19:45:46
1514
原创 【音视频】FFmpeg 硬件(NVDIA)编码H264
原代码使用的是nvdia进行解码,但是我的显卡是AMD的,因此不支持这个解码器,因此该代码转载别人写的代码,具体的测试结果仅供参考!编码器预设编码时间比特率线程数线程类型libx264ultrafast306ms未指定未指定h264_nvencultrafast278ms906.10kbps未指定未指定libx264superfast381ms未指定未指定h264_nvencsuperfast226ms906.10kbps未指定未指定libx264。
2025-05-31 16:17:14
1075
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人