- 博客(93)
- 资源 (3)
- 收藏
- 关注
原创 gst-shark安卓编译使用方法
gst-shark是RidgeRun开发的GStreamer性能分析工具,通过内置追踪器(如proctime、interlatency、framerate等)实时采集管道性能数据,无需修改代码。支持Android与Ubuntu交叉编译,生成libgstsharktracers.so及依赖库,配合GST_TRACERS、GST_SHARK_LOCATION等环境变量启用追踪。数据以CTF格式输出,需metadata文件解析,可通过babeltrace、gstshark-plot或TraceCompass进行可
2026-10-20 11:35:14
226
原创 安卓开启asan
启动一个独立的原生可执行文件时,其进程环境从创建之初就包含了你在。系统属性在进程启动时由系统统一读取,不受此限制。# 为特定进程设置分配采样率。# 为特定进程设置最大槽位数。GWP-ASan 的配置。Android 提供了。
2026-10-10 14:46:50
264
原创 playbin3流切换源码分析
(3)然后经过gst_decodebin3_handle_message ->gst_uri_decode_bin3_handle_message->gst_play_bin3_handle_message。(2)传递到decodebin3->sink_event_function,然后将新的collection_msg通过gst_element_post_message发送到decodebin3。对象,其中包含了媒体中所有可用的流信息,每个流都有一个唯一的 stream-id。消息后,根据需要选择一组。
2026-10-10 11:36:44
250
原创 playbin3源码分析
playbin3基于decodebin3,通过GstStreamCollection机制实现流的精准控制。其核心流程包括:通过stream-collection消息收集所有可用流(音频、视频、字幕),并以唯一ID标识;应用通过发送GST_EVENT_SELECT_STREAMS事件选择目标流,实现多轨道灵活切换。init函数创建uridecodebin3与playsink元件,通过pad-added等信号动态链接上游源。decodebin3采用multiqueue作为核心组件,支持原子化切换,复用解码器,确
2026-10-09 15:16:50
232
原创 搭建gstreamer的player教程:Android tutorial 5
本文介绍了Android Tutorial 5完整媒体播放器的源码获取与编译流程。通过Git克隆GStreamer官方教程代码,配置Android Studio工程的SDK、NDK及AGP版本,并在gradle.properties中指定GStreamer Android版本包路径(如gstreamer-1.0-android-universal-1.26.11)。需注意部分版本可能存在缺少.lib或.la文件的问题,建议使用兼容版本以确保编译成功。
2026-09-28 17:53:19
269
原创 gstbin中的bus消息机制
GStreamer中,playbin通过bus机制实现消息传递。GstBin创建私有child_bus,并将该bus通过gst_element_set_bus()设置给子元素,使子元素消息发送至父bin。当子bin(如decodebin)收到消息时,通过重写的handle_message函数(如gst_decode_bin_handle_message)处理并转发至父bin。最终,消息沿链路逐级上抛,经gst_element_post_message和gst_bus_post发送至顶层playbin的bus
2026-09-15 20:42:36
173
原创 GstInputSelector 知识文档
(元素名,类型)是一个N 入 1 出的流选择器:内部有多个动态申请的 sink pad(sink_%u),但任一时刻只有一个 pad 被选为active pad,其数据被转发到唯一固定的 src pad(src它常见于多音轨、多字幕、多视频轨切换场景:demux 出多路同类流分别接到不同 sink pad,应用通过active-pad属性切换当前播放的那一路。
2026-09-01 15:27:44
313
原创 GstMultiQueue 知识文档
关键机制结论适用场景 / 影响高风险误区每流独立 SingleQueue每个sink_%usrc_%upad 对背后是一个独立,各自持有、独立 src 推流任务线程、独立 segment 与时间水位demux 后音视频/字幕分路缓冲;一路阻塞不直接堵死其它路误以为所有流共享一个队列;实际上限也是每队列独立计算动态扩容防饥饿队列满但存在其它非稀疏、非 not-linked 的空队列且未触碰 bytes/time 硬限制时,把该队列提升为当前可见数+1,多放一个 buffer。
2026-09-01 10:40:29
156
原创 GStreamer 消息与信号机制深度技术知识
<think>我们只需要输出摘要,≤150字。根据内容概括核心机制。注意字数。摘要应涵盖GStreamer消息与信号机制,GLib主循环、GstBus、GObject信号,线程模型等。控制在150字内。</think>GStreamer消息机制依赖GLib主循环驱动GSource,GstBus将元素消息通过同步或异步路径投递给应用。异步watch回调运行在主循环线程,同步handler在消息投递线程执行;GObject信号同步分发,不跨线程。线程归属由触发位置决定,需正确配置context。
2026-09-01 10:27:30
221
原创 GstQueue2 知识文档
queue2是queue的"重量级"升级版,同属 coreelements 插件。名字里的 “2” 不代表它取代queue——两者定位不同,长期共存。相比queuequeue2能力说明Buffering 消息按低/高水位线向应用发送(带百分比),驱动播放器"缓冲中…"进度条与自动暂停/恢复本地缓存(temp-file / ring-buffer)可把数据落到磁盘临时文件或内存环形缓冲,缓冲容量远超内存 FIFO,支持 download buffering 与 timeshiftPull 模式 / 随机读。
2026-08-24 10:13:11
215
原创 GstQueue 知识文档
queue是 GStreamer 核心插件中最基础的缓冲队列元素(ELEMENT,需要状态催动)。职责说明线程解耦queue 在 sink pad(入)与 src pad(出)之间建立一条独立线程边界。上游在调用线程里chain入队,下游由 queue 自己的loop线程出队推送。缓冲与流控通过缓冲一定量的数据吸收上下游速率差异,并在队列满/空时施加反压或丢弃策略。queue 是一个带阈值控制的线程安全 FIFO,把管道切成两个独立运行的线程域。
2026-08-24 10:04:47
151
原创 GObject 对象创建过程
for (i = 0;i++)if (!"volume", 80, /* 普通属性 */NULL);→ 返回 Dog*最后通知队列解冻,属性通知被统一处理。GType 注册└─ 保存 class_init / instance_init 等回调首次请求 Class└─ 父 Class → 子 Class└─ 分配 Class、复制父类 vtable、执行 class_init每次请求实例└─ 分配实例、父 instance_init → 子 instance_init。
2026-08-18 20:07:53
234
原创 GType 类型与接口创建
来源:glib-2.62.6/gobject/gtype.h / gtype.c(可实例化)与(不可实例化),每种给出手动注册与宏封装两种等价写法。
2026-08-18 19:10:19
185
原创 GType 类型系统知识文档
GType 类型系统摘要 GType 是 GLib 提供的运行时类型系统,为 C 语言实现面向对象特性。核心特点包括: 类型注册与查询机制 支持单继承类层次结构 提供接口(多实现)能力 内置基础类型(21种)和派生类型 使用 GTypeClass/GTypeInstance 实现类与实例分离 通过 GTypeInfo 结构注册新类型 提供类型检查宏确保安全转换 该系统是 GObject、GStreamer、GTK 等框架的基础,实现了类初始化、实例化、类型转换等核心功能。类型分为基础类型(编译期确定)和派生
2026-08-17 17:05:20
225
原创 Gstreamer之265parser
基于 GStreamer gst-plugins-bad源码整理,描述 H.265 parser 元件的核心机制:对齐方式转换、codec_data 构造、IDR 识别与 codec NAL 插入。: gst-plugins-bad 1.22.x 分支(gst-plugins-bad 1.22.0)。文中行号引用以此版本为准,后续版本可能偏移;以函数名 + 大致行号范围作为定位依据。:文中L<行号>形式(如L2348-2351)指源码中的行号区间,可结合函数名快速定位。
2026-08-06 11:03:27
210
原创 GStreamer之BaseParse
典型用法src_event:拦截 SEEK,自定义转换逻辑(如 h265parse 把 TIME 转为 NAL 边界)sink_event:在 FLUSH_STOP 时重置子类私有状态实现模板/* 重置子类状态 *//* 委托父类完成默认处理 */本节逐个说明每个 vfunc 的"功能契约"——子类实现时应完成的具体动作、调用时机、输入输出含义、返回值语义、典型陷阱。先按"功能维度"分组,然后按"实现必要性"排序。
2026-08-06 10:03:37
149
原创 杜比视界(Dolby Vision)技术知识文档
本文详细解析了杜比视界(Dolby Vision)技术架构,重点包括:1. RPU核心结构:包含数据头、映射曲线、非线性量化参数和显示管理元数据四个部分,实现从基础层到增强层的信号处理流程。2. 关键技术组件: 多项式/MMR映射算法 非线性量化(NLQ)机制 显示管理(DM)系统 动态元数据(Level 1-11)3. Profile转换流程:特别是P7转MEL的26个参数修改逻辑,保留格式但禁用EL残差。4. 封装规范:详细说明HEVC NAL单元和AV1 OBU的封装格式差异及处理流程。5. 送显机制
2026-07-31 15:38:48
214
原创 GStreamer DASH Demux 知识文档
GStreamer DASH Demux 摘要 DASH demuxer (dashdemux) 是 GStreamer 中处理 MPEG-DASH 流的核心插件,主要功能包括: MPD解析:解析XML清单文件,处理Period/AdaptationSet/Representation层级结构 片段管理:支持SegmentTemplate/SegmentList/SegmentBase三种寻址方式 流处理:下载并处理fMP4片段,包括SIDX子片段拆分 自适应功能:实现码率切换(Representation
2026-06-17 09:31:29
268
原创 GStreamer HLS Demux 知识文档
特性行为下载速率公式(单调时钟,纯下载耗时)移动平均3 片段循环缓冲,简单算术平均保守偏置MIN(平均, 最近片段) × 0.8防振荡隐式(MIN + bitrate_limit),无显式机制上升/下降对称性同一算法,隐式不对称(上升更难)变体选择最高带宽 ≤ 测量码率切换时机每片段后,仅 primary stream冷却期无片段中切换不可能兼容时复用流,不兼容时销毁重建非零时完全替代测量,跳过 bitrate_limit。
2026-06-16 09:37:59
199
原创 HEIF 文件格式知识文档
HEIF (High Efficiency Image Format) 基于 ISO Base Media File Format (ISOBMFF),将图像/序列封装为 item 或 track 体系。同一容器支持多种编解码器。版本标准说明HEIF静态图像图像序列 (类似 GIF)AVIF开放AV1 编码的 HEIF 变体VVIC/VVISISO/IECVVC 编码变体压缩格式infe 4CC品牌前缀配置属性hvc1heic/heixhvcCavc1avciavcCAV1。
2026-06-15 15:14:09
249
原创 H.265/HEVC 解码知识文档
本文摘要: H.265/HEVC解码技术文档深入解析了HEVC视频编码标准的NAL单元结构、访问单元组织方式及关键参数集。文档详细对比了H.265与H.264在NAL头部的差异(2字节vs1字节),全面列举了H.265特有的63种NAL单元类型及其分类逻辑。重点介绍了视频参数集(VPS)的作用,包括时间子层分级机制、档次级别参数等核心内容,并解释了时间可分级特性如何实现帧率自适应调整。此外,还涵盖了访问单元边界检测、防竞争字节处理等实用解码技术要点,为HEVC解码实现提供了完整的技术参考。
2026-06-05 14:29:01
221
原创 H.264/AVC 解码知识文档
文章摘要 H.264/AVC解码文档详解了NAL单元结构与访问单元处理机制。NAL单元由起始码、头部和RBSP载荷组成,头部包含类型与优先级信息。VCL NAL携带视频数据(切片),非VCL NAL包含参数集等辅助信息。访问单元(AU)由一帧图像的所有NAL构成,解码器通过比较13个字段(如帧号、PPS ID等)判断AU边界。OpenH264实现中采用两级检测:对VCL切片进行字段比对,对非VCL特定类型(如AUD、SEI)直接触发新AU。同帧多切片处理时,解码器会累积所有切片数据到同一帧缓冲区完成重建。
2026-06-03 17:02:11
208
原创 MP3 格式知识文档
位含义数据长度0 (0x1)总帧数4 字节 (big-endian)1 (0x2)总字节数4 字节 (big-endian)2 (0x4)TOC (seek 表)100 字节3 (0x8)VBR 质量指示4 字节 (big-endian)
2026-06-03 10:34:40
244
原创 Flv Demux 插件知识文档
FLV容器格式与GStreamer插件解析摘要 FLV(Flash Video)是Adobe为Flash Player设计的流式视频容器格式,采用简单的Tag结构交替排列音视频数据,适合网络传输。文档详细解析了FLV格式的核心结构: 文件结构:由Header和多个Tag组成,每个Tag后跟4字节Previous Tag Size标记 Header格式:9字节固定结构,包含签名、版本、标志位和数据偏移量 Tag结构:11字节头部+数据,分为音频/视频/脚本三种类型,包含时间戳、数据大小等关键信息 音频处理:详
2026-05-26 19:15:14
416
原创 TS Demux 插件知识文档
优化类型关键机制效果I/O 批量100×packetsize 拉取减少 pull_range 调用时间戳查找PCR Group 二分搜索 + 线性插值O(N) → O(log N),精度高PID 查找pcrtablelut 直接映射O(1)重复检测Section 版本号+段号位图避免重复处理帧级跳过Seek 时跳过非关键帧内存安全32MB PES 上限 + 512 窗口上限 + 动态增长防止 OOM核心职责解析 + 时钟同步 + seek仅解析设计哲学。
2026-05-22 16:54:50
440
原创 MKV Demux 插件知识文档
MKV 容器格式与 demux 插件解析摘要 Matroska(MKV)是一种开放的多媒体容器格式,基于EBML二进制元语言结构,支持视频、音频、字幕等多轨道封装。其核心特点包括: 格式特性: 采用ID+Size+Data的EBML元素结构,变长整数编码 支持WebM子集(VP9/AV1+Opus) 相比MP4优势在于多字幕轨、开源编码支持和流式写入 文件结构: 包含EBML头(版本/文档类型) Segment主体含SeekHead(索引)、SegmentInfo(时间基准)、Tracks(轨道定义)等关键
2026-05-22 09:45:31
849
原创 MP4 Demux 插件知识文档
本文档整理了MP4/QT容器格式的关键信息及qtdemux元素调用流程。主要内容包括: MP4容器格式概述 采用Atom(Box)结构组织数据,包含4字节长度+4字节类型(FourCC)头 详细说明FullBox扩展结构及特殊size值处理 关键Atom结构解析 ftyp:文件类型标识 mvhd:电影头,包含全局时间信息 tkhd:轨道头,记录轨道元数据 mdhd:媒体头,包含轨道级时间刻度 hdlr:处理器类型,标识轨道类型 MP4文件层级结构 展示从顶层到采样表的完整结构树 说明各Atom的层级关系和功
2026-05-12 10:39:54
370
原创 TS 流中读取杜比视界的 L5 元数据
在一些画幅比例会变化的电影中(例如 IMAX 版本),视频画面本身的宽高比可能从 2.35:1 变成 16:9。此时,L5 的裁剪值就会随着帧变化,告诉播放器哪些帧有黑边、哪些没有,以实现最佳显示效果。命令,从刚才得到的视频流中把杜比视界的核心处理单元(RPU)数据提取出来。文件,这里面就包含了 L1 到 L11 的所有杜比视界元数据。否则,在调整亮度时,可能会导致原本该是纯黑的区域也发灰、发亮。文件,它就是我们后续要分析的、包含杜比视界元数据的视频基本流。文件,就能看到详细的 L5 配置了。
2026-03-04 14:08:06
229
原创 如何在codec2中添加新的component组件
特别要注意的是,不同 Android 版本的 Codec 2 框架实现有差异,尤其是在 Android 15 上。:你需要在这个组件里实现具体的解码算法,或者封装已有的解码库(如 FFmpeg、libavc 等)如果你的解码器依赖特定硬件(通过 V4L2 或其他私有接口),你需要创建一个独立的 HAL 服务。标签,指定解码器的名称(与代码中注册的一致)、支持的 MIME 类型(如。:你需要创建一个工厂类,它知道如何创建你的一个或多个解码组件。这是最核心的开发工作,你需要编写实际的解码逻辑。
2026-02-25 16:36:43
721
转载 一文搞懂Codec2框架解析
在本篇中,我们将关注Codec 2.0以下几个问题:1.从顶而下,一个解码组件是如何创建的2.组件的接口有哪些,分别是什么含义3.组件是如何运行的,输入与输出的数据流是怎样的。
2026-02-03 10:35:36
197
原创 MediaCodec/Codec2详解(二)初始化过程
IComponent集中存储和管理组件的所有参数与配置(如MediaFormat、编码参数等),确保多线程访问安全。ssssssss。
2026-01-29 21:08:42
899
原创 skia使用GPU加速
本文介绍了使用Skia库进行GPU加速渲染的关键实现步骤。主要内容包括:1)通过EGL初始化OpenGL上下文,创建离屏渲染表面以避免资源冲突;2)使用GrDirectContext创建GPU加速的图形上下文和离屏渲染目标;3)详细阐述了渲染流程,包括图像旋转/缩放处理,以及如何将GPU纹理转换为CPU纹理并读取像素数据。特别强调了所有GPU相关操作必须在同一线程内完成,包括上下文创建、渲染绘制、像素读取和资源销毁等关键步骤。
2026-01-20 14:55:28
55
原创 opengl图像处理
这个实现提供了完整的、高性能的2D图像任意角度旋转处理,适用于Android平台的实时图像处理应用。Native Activity集成。Lanczos高质量缩放(可选)可自定义旋转中心(归一化坐标)支持0-360度任意角度旋转。完整的32位RGBA处理。输入输出分辨率完全动态。自动计算变换后的包围盒。Alpha通道正确处理。
2026-01-13 15:54:57
180
原创 gst_object_ref和gst_object_ref_sink区别
理解Glib中的引用和浮引用是掌握GObject对象内存管理的关键。下面我将为你梳理这两个核心概念。
2025-12-10 11:15:10
574
原创 gstreamer之内存泄漏检测trace
GStreamer的泄漏追踪器(leaks tracer)用于检测内存泄漏问题。它通过设置环境变量GST_TRACERS=leaks来启用,支持多种配置参数:check-refs用于跟踪引用计数操作;stack-traces-flags控制堆栈跟踪详细程度;filters可指定特定对象类型进行追踪。当应用退出时,该追踪器会记录仍存活的对象并报错。示例日志显示了对GstTee、GstPad等对象的追踪信息,包括内存地址、引用计数等。还可通过SIGUSR1/SIGUSR2信号实时获取对象状态。使用时需调用gst
2025-12-02 11:13:29
544
转载 Android Binder实现示例(C/C++层)
BBinder 实现了大部分的IBinder 接口,除了onTransact() 和 queryLocalInterface(), getInterfaceDescriptor();BnInterface 实现了IBinder的queryLocalInterface()和getInterfaceDescriptor(), 但是其必须借助实际的接口类。为什么搞得那么复杂?3实现一个XXXService类,继承BnXXX(), 并具体实现onTransact() 函数。├── client//客户端目录。
2025-08-20 17:52:58
137
原创 ACodec/OMX数据处理流程解析
MediaCodec::start()之后经过一系列状态转换会到IdleToExecutingState状态关键步骤:会执行函数ExecutingState->resume()也就是ACodec::BaseState::postFillThisBuffer(…),然后其中会先向MediaCodec发送kWhatFillThisBuffer消息。其中 ACodec::BaseState::postFillThisBuffer函数会调用。
2025-08-20 10:54:37
834
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅