- 博客(79)
- 资源 (1)
- 收藏
- 关注
原创 ffmpeg音视频处理大纲
转码:通过解码 + 编码 + 格式转换实现压缩:通过编码器参数控制比特率提取:通过流选择机制丢弃不需要的流截取:通过时间戳控制实现拼接:通过 concat 滤镜或协议实现合并:通过复用器(Muxer)将多个流写入同一容器录屏:通过设备驱动(libavdevice)获取系统音视频输入源码中最核心的逻辑位于ffmpeg.c的transcode()函数,它串联了整个处理流程。理解 FFmpeg 的架构和数据结构是深入掌握其功能的关键。
2025-07-15 19:43:36
556
原创 AAC编解码
AAC 的编解码流程核心是 “基于心理声学的选择性保留”:编码通过频域变换、量化和熵编码去除冗余,解码通过逆过程恢复信号。其高效性源于多种技术的结合(MDCT、TNS、LTP、SBR 等),使其在相同比特率下音质优于 MP3,成为主流音频编码标准之一。
2025-07-15 15:41:24
768
原创 H265和H264的编解码流程
H.264 和 H.265 的编解码流程均遵循 “预测→残差处理→熵编码” 的逻辑,核心是去除空间、时间和统计冗余。H.265 通过更灵活的单元划分(CTU/CU/PU/TU)、更多预测模式、更高精度的运动补偿及增强的环路滤波,实现了比 H.264 更高的压缩效率,更适合高分辨率视频;但更高的复杂度也导致其编解码成本更高(硬件支持要求高)。目前,H.264 仍广泛用于中低分辨率场景(如 1080P 流媒体),而 H.265 逐渐成为 4K/8K 视频的主流标准。
2025-07-15 15:12:31
753
原创 H265相对于H264的不同和优势
H.265 通过更精细的块划分、更多预测模式和优化的熵编码,实现了50% 以上的码率节省,尤其适合高分辨率、低带宽场景。但其编码 / 解码复杂度显著提升,需依赖现代硬件支持。未来,随着 8K 普及和硬件成本下降,H.265 有望逐步取代 H.264 成为主流。
2025-07-15 14:29:45
652
原创 H264的SVC扩展技术
H.264 SVC 通过分层编码实现质量、空间、时间的三维可伸缩性,使视频流能根据网络条件、终端能力和用户需求动态调整资源分配。这种灵活性显著提升了流媒体的适应性和用户体验,尤其适用于异构网络环境和多终端场景。尽管 SVC 编码复杂度较高,但随着硬件性能提升,其应用正在逐渐普及。
2025-07-14 20:43:16
771
原创 H264三种码率控制方法
H.264 的码率控制通过调节 QP 和比特分配策略,在带宽、画质和延迟之间寻求平衡。选择哪种方法取决于具体场景:实时应用优先 CBR,存储应用优先 VBR,而 CQP 则用于特殊需求。现代视频系统通常结合多种策略,以适应复杂多变的网络环境和用户需求。
2025-07-14 20:24:55
564
原创 H264的帧内编码和帧间编码
I 帧:通过丰富的帧内模式提供独立解码能力,但压缩效率最低。P 帧:智能混合帧内 / 帧间模式,平衡了压缩率和错误恢复能力。B 帧:双向预测大幅减少冗余,仅在必要时使用帧内模式,压缩效率最高。这种分层策略使 H.264 在不同场景下都能实现高效编码,广泛应用于视频会议、流媒体和存储等领域。H.264 的帧间编码通过运动估计与补偿、多参考帧和灵活块划分,显著减少了视频序列的时间冗余。这种技术使 H.264 在相同画质下比 H.263 等旧标准节省 50% 以上的码率,成为视频编码领域的主流标准。
2025-07-14 20:11:10
515
原创 H264的两种封装
H.264 视频编码的封装方式主要分为 Annex B 和 AVCC(也称为 ISO Base Media File Format)两种,它们在结构、应用场景和解析方式上有显著差异。
2025-07-14 17:54:03
818
原创 H264的NALU结构
H.264 的 NALU(Network Abstraction Layer Unit)是视频数据在网络传输或存储中的基本单元,负责将 VCL(Video Coding Layer)生成的压缩数据封装为适合不同网络环境的格式。下面从 NALU 的结构组成、关键字段、类型分类及封装方式等方面详细解析。
2025-07-14 17:36:31
730
原创 H264编码结构和解析
NAL 的核心作用是将 VCL 生成的压缩数据封装为适合网络传输的格式,解决不同网络(如 IP、广播、存储)的适配问题。其基本单元是NAL 单元(NALU,NAL Unit)。(1)NALU 的结构[NAL Header (1字节)] + [RBSP (可变长度)]NAL Header(头部)forbidden_zero_bit(1 位):禁止位,通常为 0;若为 1,表示该 NALU 存在严重错误,需丢弃。nal_ref_idc(2 位)
2025-07-14 17:09:38
618
原创 蓝牙协议分析(1)基本概念
自1994年由爱立信推出至今,蓝牙技术已经走过了20个岁月。从最初的Bluetooth V1.0,到Bluetooth V4.0(最新的为V4.1,2013年底发布),经历了近9个版本的修订后,发展为当前的状况。说实话,如今的蓝牙4.1,简直是一个大杂烩:BR/EDR沿用旧的蓝牙规范;LE抄袭802.15.4;AMP直接使用802.11。而这一切的目的,就是以兼容性和易用性为基础,在功耗和传输速率之间左右为难。蜗蜗以为,这并不是优雅的设计。不过没关系,存在即合理。
2025-07-11 13:54:18
827
原创 iOS常见内存错误码
“DEAD BEEF” 可理解为 “死亡牛肉”,象征指针指向的内存已 “死亡”。:“BAD IDEA” 直译为 “坏主意”,暗示开发者执行了不合理操作。:“FACE FEED” 可联想为 “调试器喂脸”,象征调试阶段的标记。:“CAFE BABE” 谐音 “咖啡馆宝贝”,无实际含义,仅作为标记。:“4 BAD F00D” 可理解为 “内存食物不足”,象征分配失败。:“8 bad f00d” 谐音 “坏食物”,暗示后台任务 “过期”。:“2 BAD IDEA” 强化 “双重坏主意”,暗示启动流程异常。
2025-07-04 10:52:17
940
原创 Significant Location Change
Significant Location Change(重大位置变化)” 是苹果 iOS 系统中一项用于在应用未主动运行时,监测设备位置显著变化的功能。
2025-06-06 10:52:22
1206
原创 Flutter如何支持原生View
Flutter 的平台视图机制为与原生组件集成提供了强大支持,通过合理选择实现方式(虚拟或混合)和优化策略,可以在保持 Flutter 开发效率的同时,获得接近原生的性能体验。但需注意其限制,避免在关键路径上过度使用,以保证应用的整体流畅性。
2025-06-04 17:09:02
1256
原创 详细讲解Flutter GetX的使用
Get.to():打开新页面。:通过路由名称打开新页面。Get.off():关闭当前页面并打开新页面。:关闭所有页面并打开新页面。Get.back():返回上一个页面。:返回到指定页面。:关闭指定路由页面。:打开具有参数的命名路由。GetX 是一个功能强大、易于上手的 Flutter 框架,通过统一的 API 解决了状态管理、路由和依赖注入三大痛点。其核心优势在于简洁高效和零 context 依赖,特别适合快速开发和中小规模项目。建议开发者在新项目中尝试使用,能显著提升开发体验和代码质量。
2025-06-04 16:42:34
1194
原创 Flutter知识点汇总
Flutter是Google开发的高性能跨平台移动应用开发框架,使用Dart语言编写,通过自绘UI实现跨平台一致性。其核心优势包括:热重载功能可快速预览代码修改,保留应用状态;通过Skia引擎直接渲染UI,性能接近原生;提供丰富的内置组件库。与其他框架相比,Flutter在代码复用率(接近100%)、UI一致性、性能表现等方面具有优势,但需学习Dart语言。热重载实现原理为增量编译和Dart虚拟机更新,大幅提升开发效率,尤其适合UI调试和动画调整,但对某些代码变更仍需要重启应用。Flutter架构使其成为追
2025-06-04 15:10:27
1769
原创 flutter架构解析
微任务用于处理优先级较高、需要尽快执行的任务,而事件队列用于处理响应事件、网络请求等异步任务。在 Dart 中,事件循环会不断地从微任务队列和事件队列中取出任务执行,这就是 Dart 异步编程的核心机制。
2025-05-31 22:40:56
847
原创 鸿蒙开发11-ARKUI框架
ARKUI 框架通过声明式语法、组件化体系和高效的状态管理,大幅提升了 HarmonyOS 应用的开发效率和性能。开发者可通过 DevEco Studio 快速搭建项目,结合 Flex/Grid 布局、路由导航和动画能力,构建跨设备的响应式应用。同时,合理使用性能优化技巧(如状态监听、懒加载、硬件加速)可进一步提升用户体验。建议从官方文档和 Codelabs 入手,逐步掌握 ARKUI 开发的核心技能。
2025-04-19 12:48:34
1181
原创 Flutter 与原生通信
Flutter 与原生之间的通信主要基于通道机制,包括 MethodChannel、EventChannel 和 BasicMessageChannel。
2025-04-16 17:33:27
1431
1
原创 鸿蒙开发07-interface
interface 接口名称 {属性名: 属性类型;方法名(参数列表): 返回值类型;在上述代码中,Person 接口定义了一个对象应该具有 name(字符串类型)、age(数字类型)属性,以及一个无返回值的 sayHello 方法。
2025-04-14 18:32:57
348
原创 鸿蒙开发05-ArkTS中的箭头函数和闭包并和其他语言比较
闭包是指有权访问另一个函数作用域中变量的函数。即使该外部函数执行完毕,其作用域内的变量也不会被销毁,因为闭包持有对这些变量的引用。
2025-04-14 16:39:42
946
1
原创 鸿蒙开发04-ArkTS基础(二)
在 ArkTS 里,运算符是用于执行各种操作的符号,可分为算术运算符、比较运算符、逻辑运算符、赋值运算符等。下面为你详细介绍各类运算符。
2025-04-14 15:27:06
690
原创 鸿蒙开发02--ArkTS基础
ArkTS:是一门用于开发鸿蒙应用的编程语言。,例:console.log(‘鸿蒙’, ‘Hello World’)
2025-04-14 14:36:09
846
原创 鸿蒙开发03-对象、interface、class
对象是一组键值对的集合,键为字符串,值可以是任意类型。可以使用对象字面量来创建对象。// 创建一个简单的对象age: 25,// 对象中的方法${this// 创建一个简单的对象 let person = {name : "Alice" , age : 25 , // 对象中的方法 sayHello : function() {} };// 访问对象属性 console . log(person . name);// 调用对象方法 person . sayHello();`);
2025-04-14 12:05:26
417
原创 鸿蒙开发01
HarmonyOS官网 → 一探究竟 → DevEco Studio 下载地址:https://developer.huawei.com/consumer/cn/,安装。,安装、环境配置时,建议 自定义目录,注意:路径中不要有 中文、特殊字符。
2025-04-14 11:29:20
934
原创 WebRTC解析
首选场景:需要浏览器免插件、超低延迟、强加密的实时交互万级并发直播(需结合 CDN 架构)纯音频广播(HLS 更经济)快速开发:Agora/Sendbird自主可控:Mediasoup/Jitsi移动端:Pion/Flutter-WebRTC通过合理架构设计(如 SFU/MCU 模式选择),WebRTC 可支撑从 1v1 通话到万人直播的全场景需求,是下一代实时通信系统的基石技术。
2025-02-24 11:24:23
2607
原创 RTSP协议
需求推荐协议专业级媒体控制浏览器兼容直播WebRTC 或 HTTP-FLV超低延迟(<500ms) WebRTC 或 SRT大规模直播分发传统设备兼容RTMP建议结合具体业务需求进行协议栈设计,现代系统常采用混合架构(如 RTMP 接入 + HLS 分发)。
2025-02-24 10:41:46
916
原创 rtmp协议
RTMP(Real-Time Messaging Protocol)是Adobe设计的基于TCP的实时流媒体传输协议,专为低延迟场景(如直播、视频通话)优化。消息结构由基本头(Basic Header)、消息头(Message Header)、扩展时间戳(Extended Timestamp,可选)和消息体(Message Payload)组成。默认端口1935,支持加密变种RTMPS(端口443)基于分块传输(Chunking)机制,支持消息拆解与重组。
2025-02-20 21:56:24
962
原创 rtp/rtcp协议
用途:专为实时音视频流传输设计(如VoIP、视频会议、流媒体),支持时间敏感型数据的传输。定位:运行在UDP之上(也可用TCP,但较少见),提供端到端的传输服务。核心能力:时间戳同步:解决多流同步问题(如音画对齐)。序列号跟踪:检测丢包、乱序,支持网络质量评估。负载格式无关性:负载类型标识(编码格式协商)支持任意编码格式(H.264、Opus等),通过Payload Type(PT)标识。扩展性:支持自定义头部扩展(RFC 8285)和CSRC混流标识。
2025-02-20 17:33:41
1316
1
原创 Markdown语法
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S
2025-02-20 15:41:41
905
原创 抓取iOS hci日志
将手机通过数据线连接mac,点击start开始录制,PacketLogger左上角会显示连接的iOS设备名称,手机左上角会显示蓝色的标志,这表示已经在开始录制hci日志。中下载Bluetooth for iOS的Profile,发送到iOS设备上,在设置中安装Profile。需要准备一台mac电脑,在Apple Devloper上注册账号,电脑上安装PacketLogger软件,手机上安装Bluetooth for iOS的Profile。如果没有以上状态,在PacketLogger新建一个连接。
2024-01-15 11:59:51
568
原创 iOS蓝牙扫描的坑
然后,App通常会在收到1-3个系统回调后变为正常,这个取决于SCAN_RSP的更新时间,所以具体什么时候数据能恢复正常是不确定的,1-3包只是经验值。所以,如果你的BLE设备的广播数据会发生变化,那么是需要考虑数据错乱问题的。可以对ADV_IND+SCAN_RSP增加校验,如果是错的数据就丢掉。由于苹果的这种特性,建议在前台时扫描蓝牙设备时,设置。App在收到广播包变化的第一个系统回调通常为。此时,BLE设备广播发生变化,广播数据变为。iOS此时向App广播的数据也是。在后台扫描蓝牙时,设置。
2023-06-14 10:34:48
1488
原创 MAC配置SSH
(注意,这里的 [email protected] 是你自己的邮箱(例如:11******@qq.com),选一般的常用的邮箱即可,不常用的邮箱一般不推荐)首次使用sourcetree获取该域名服务器下的项目时,无法把该域名下的的信息(域名,host,公钥)写入本地的konwn_hosts(目录:~/.ssh/)文件中的。复制文件内容,粘贴到github等网站的SSH key里,标题可以随便起,大功告成!默认会在相应路径下(~/.ssh)生成id_rsa和id_rsa.pub两个文件,
2023-02-06 18:12:16
12053
1
原创 08、Flutter开发创建项目及其案例(三)
一、自定义Widget此次例子中,项目就是一个大的widget标题的Widget:使用一个Text Widget完成;描述的Widget:使用一个Text Widget完成;图片的Widget:使用一个Image Widget完成;上面三个Widget要垂直排列,我们可以使用一个Column的Widget另外,三个展示的标题、描述、图片都是不一样的,所以我们可以让Parent Widget来决定内容:创建三个成员变量保存父Widget传入的数据class ProductItem exte
2021-05-24 19:19:10
331
原创 07、Flutter开发创建项目及其案例(二)
2.3、代码改进2.3.1、改进样式我们可能希望文字居中显示,并且可以大一些;居中显示: 需要使用另外一个Widget,Center;文字大一些: 需要给Text文本设置一些样式;我们修改代码如下:我们在Text小部件外层包装了一个Center部件,让Text作为其child;并且,我们给Text组件设置了一个属性:style,对应的值是TextStyle类型;import 'package:flutter/material.dart';main(List<String> a
2021-05-10 15:20:21
356
1
原创 06、Flutter开发创建项目及其案例(一)
一. 创建Flutter项目创建Flutter项目有两种方式:通过命令行创建 和 通过开发工具创建1.1. 通过命令行创建通过命令行创建非常简单,在终端输入以下命令即可:**注意:**Flutter的名称不要包含特殊的字符,另外不可以使用驼峰标识创建完之后使用自己喜欢的开发工具打开即可flutter create learn_flutter1.2. 通过开发工具创建我这里也可以直接通过Android Studio1.3. 默认程序分析我们讲创建的应用起来跑在模拟器上(我这里选择iPh
2021-05-09 18:59:36
513
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人