开发
- iOS 入门(1):创建一个 iOS 项目
- iOS 入门(2):管理第三方库
- iOS 入门(3):实现一个多页面 App
- iOS 入门(4):从网络请求数据
- iOS 入门(5):在本地存储数据
- iOS 中的 View Controller Lifecycle
- iOS View Controller 全屏布局
- Objective-C 中的 property
- 使用 Instruments 做 iOS 程序性能调试
- 在 Xcode 调试时查看内存中的数据
- iOS 程序性能优化
- 使用 Wax 修复 iOS 应用的线上 Bug
- 关于 Podfile.lock 带来的痛
- iOS 开发中的 Delegate 模式使用示例
- Objective-C 的 Runtime
- iOS ARC 内存管理要点
- 正确地获取 iOS 应用占用的内存
- iOS 中的 AutoreleasePool
- iOS 中的 RunLoop
- Block
- Swift 中的闭包捕获语义
- GCD
- iOS 中的图形变换
- iOS 开发中的各种证书
工程
- Objective-C 编码风格指南
- Swift 编码风格指南
- iOS 项目的目录结构
- iOS 中的 MVC 概念
- View Controller 流(纯代码版)
- MVVM 模式及 ReactiveCocoa
- 创建一个 iOS Framework 项目
- 在 Xcode 中混编 OC、C、C++ 代码
- 用 CocoaPods 集成本地私有库
- 用 Xcode 中的代码模板去推进 iOS 项目规范和提高代码复用
业务
音视频业务
- 关于视频的一些概念
- 直播协议的选择:RTMP vs. HLS
- 在 Mac OS 上编译 FFmpeg
- 在 Mac OS 上编译 OBS
- 理解音视频 PTS 和 DTS
- 直播中的首屏加载优化
- 直播中累积延时的优化
- AVAudioSession(1):iOS Audio Session 概览
- AVAudioSession(2):定义一个 Audio Session
- AVAudioSession(3):定制 Audio Session 的 Category
- AVAudioSession(4):响应音频中断事件
- FFmpeg 入门(1):截取视频帧
- FFmpeg 入门(2):输出视频到屏幕
- FFmpeg 入门(3):播放音频
- FFmpeg 入门(4):线程分治
- FFmpeg 入门(5):视频同步
- FFmpeg 入门(6):音频同步
- FFmpeg 入门(7):Seeking
- AVAudioFoundation(1):使用 AVAsset
- AVAudioFoundation(2):音视频播放
- AVAudioFoundation(3):音视频编辑
- AVAudioFoundation(4):音视频录制
- AVAudioFoundation(5):音视频导出
- AVAudioFoundation(6):时间和媒体表示
- 点播视频格式的选择
- 点播中的首屏秒开优化
- 点播中的卡顿优化
- 点播中的播放成功率优化
- 点播中的状态机完善
- 播放器的内存多实例管理优化
- 点播中的流量成本优化
- 解析 IJKPlayer