AirPlay mDNS Harness:模拟 AirPlay 设备的技术实现
在 APlay 项目中,mDNS 服务发现是 AirPlay/RAOP 设备被发现的基础。本文介绍的 AirPlay mDNS harness 借助一个轻量的验证框架,无需真实硬件,在单机上完成了 mDNS 协议实现的验证。本文从流程、代码到协议细节,完整解析这个"模拟设备"是如何工作的。 背景:为什么需要模拟设备 APlay 是一个支持 AirPlay/R…
Tags
在 APlay 项目中,mDNS 服务发现是 AirPlay/RAOP 设备被发现的基础。本文介绍的 AirPlay mDNS harness 借助一个轻量的验证框架,无需真实硬件,在单机上完成了 mDNS 协议实现的验证。本文从流程、代码到协议细节,完整解析这个"模拟设备"是如何工作的。 背景:为什么需要模拟设备 APlay 是一个支持 AirPlay/R…
很多 Native 服务一旦跑起来,最难处理的不是"有没有日志",而是"我现在能不能在不中断进程的情况下问它几个问题"。 比如一个投屏服务、音视频服务或嵌入式后台任务,现场经常需要临时确认: 当前模块是否还活着。 编码器参数是否按预期生效。 某个状态机卡在哪一步。 是否可以临时触发一次 IDR、刷新、重连或 dump。 日志之外的运行时状态能不能直接读出…
epoll 经常被介绍成"高性能网络 I/O 多路复用接口",这句话没错,但它只讲了最常见的一半用法。 在真实工程里,epoll 更像一个统一的事件入口。网络读写、退出通知、信号处理等事件都可以汇入同一个 wait 点,主线程只需要围绕这个 wait 点做分发,而不必在多个阻塞点和轮询逻辑之间来回切换。 这篇文章会围绕 Linux "一切皆文件" 的设计思想…
一、问题背景 C++ 程序线上崩溃时,最常见的日志可能只有一句: Segmentation fault (11) 这句话只告诉我们程序收到了 SIGSEGV,也就是访问了不该访问的内存。但它没有告诉我们: 崩溃发生在哪个函数。 这个函数是谁调用的。 对应源码文件和行号是什么。 线上 release 二进制被 strip 后还能不能还原现场。 crasht…
本文结合过往项目经验,介绍了内存分段管理的起源,总结了一下遇到 segmentation fault 问题时如何调试。 关于段 段的含义 A segment, in the 8086/8088 is a 64kb chunk of memory addressable by any particular value in a segment registe…
最近在开发一款流媒体后视镜产品,发现触摸设备不响应触控事件,画面冻住不动,串口日志提示 Out of memory。而 release 版本看门狗程序未被注释(进入了编译分支),APP 进程因为 OOM 被 kill,无法及时喂狗,导致系统不断重启。 OOM 的主要场景: 开机 OOM。 视频回放时 OOM。 主要现象: Linux App 进程被 ki…