• Stars
    star
    294
  • Rank 140,416 (Top 3 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created over 7 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

FFmpeg step by step tutorials for iOS/macOS developer. (适合零基础的 iOS/macOS 开发者学习FFmpeg API 和音视频渲染技术。演示了 OpenGL 和 Metal 等多种视频渲染方式,以及使用 AudioUnit 和 AudioQueue 渲染不同格式的音频。)

了解底层音视频技术是很有必要的,为了让更多零基础的 iOS/macOS 开发人员少走弯路,我编写了这个使用 FFmpeg 封装播放器系列教程,非常适合零基础的 iOS/macOS 开发者学习。

喜欢的老铁给个 Star 吧(先别着急 fork,现阶段会经常更新)。

Stargazers repo roster for @debugly/FFmpegTutorial

Usage

iOS 示例工程:

git clone https://github.com/debugly/FFmpegTutorial.git
cd FFmpegTutorial/Example/iOS
pod install
open FFmpegTutorial-iOS.xcworkspace

运行效果:

macOS 示例工程:

git clone https://github.com/debugly/FFmpegTutorial.git
cd FFmpegTutorial/Example/macOS
pod install
open FFmpegTutorial-macOS.xcworkspace

Introduction

为方便管理依赖,项目使用 Pod 开发库(Development Pod)的形式来组织,所有对 FFmpeg 的封装代码都放在 FFmpegTutorial 库里,如何编译 FFmpeg 不是本教程的重点,因此我把编译好的 FFmpeg 库也做成了 Pod 库,编译 FFmpeg 等库的脚本在这里开源 MRFFmpegPod

教程共分为六个部分,提供了 iOS 和 macOS 的上层调用示例,使用 Objective-C 语言开发:

一、音视频基础

  • OpenGL Version:查看编译时配置信息、支持的协议、版本号;OpengGL信息
  • Custom Thread:封装 NSThread,方便后续调用
  • Movie Prober:查看音视频流信息
  • Read Packet:读取音视频包
  • Decode Packet:音视频解码
  • Custom Decoder:抽取解码类,封装解码逻辑

二、视频渲染

  • Core API:使用 Core Graphics/Core Image/Core Media 渲染视频帧
  • Legacy OpenGL/OpenGL ES2:渲染 BGRA/NV12/NV21/YUV420P/UYVY/YUYV 视频桢
  • Modern OpenGL/OpenGL ES3:渲染 BGRA/NV12/NV21/YUV420P/UYVY/YUYV 视频桢
  • Modern OpenGL(Rectangle Texture):渲染 BGRA/NV12/NV21/YUV420P/UYVY/YUYV 视频桢
  • Metal:渲染 BGRA/NV12/NV21/YUV420P/UYVY/YUYV 视频桢

三、音频渲染

  • AudioUnit:支持 S16,S16P,Float,FloatP 格式,采样率支持 44.1K,48K,96K,192K
  • AudioQueue:支持 S16,Float格式,采样率支持 44.1K,48K,96K,192K
  • 封装 AudioUnit 和 AudioQueue 渲染逻辑,调用者无需感知

四、封装播放器

  • VideoFrameQueue:增加 VideoFrame 缓存队列,不再阻塞解码线程
  • PacketQueue:增加 AVPacket 缓存队列,创建解码线程
  • 0x32:创建视频渲染线程,将视频相关逻辑封装到播放器内
  • 0x33:将音频相关逻辑封装到播放器内
  • 0x34:显示音视频播放进度
  • 0x35:音视频同步
  • 0x36:开始,结束,暂停,续播
  • 0x37:(TODO)使用硬件加速解码
  • 0x38:(TODO)统一软硬解渲染逻辑
  • 0x39:(TODO)支持 Seek
  • 0x3a:(TODO)支持从指定位置处播放

五、趣味实验

  • 黑白电视机雪花屏、灰色色阶图、三个小球

六、实用工具

Cross-Platform

本教程的终极目标是写一款跨平台播放器,考虑到这是一项庞大的工程,本教程仅实现最基础的功能。

完整的播放器功能则在 B 站开源的 ijkplayer 之上进行二次开发,我已经从 iOS 平台移植到了 macOS 平台 : ijkplayer ,增加了字幕、视频旋转等功能,最主要的是重构了视频渲染逻辑,值得一看!

Ends

  • Please give me an issue or a star or pull request!
  • New members are always welcome!

Good Luck,Thank you!

More Repositories

1

SohuH5-NativeInteraction

H5和Native交互解决方案,没有平台限制,支持双向回调;现已经开源iOS、Android相关代码;Windows平台使用的是Chromium内核版,也轻松实现了这套方案(暂未开源)。
Objective-C
28
star
2

TreeList

UITableView 编辑; 侧滑删除 (支持到 iOS 7);树形列表;
Objective-C
15
star
3

SCJSONUtil

轻量、方便的 JSON 和 Model 互转框架,支持 iOS/macOS 平台
Objective-C
14
star
4

MRFFToolChainBuildShell

use github action auto compile FFmpeg libs. (预编译 FFmpeg 等库,为 ijkplayer 提供基础依赖保障。)
Shell
9
star
5

MRFFToolChainPod

FFmpeg Tool Chain Pod,include FFmpeg、Lame、x264 ...
Ruby
9
star
6

SCNetworkKit

a simple but powerful iOS、macOS networking framework.
Objective-C
7
star
7

QLAssets

读取系统图片( 支持多选)
Objective-C
7
star
8

UIBezierDemo

使用 UIBezierPath 绘制圆角六边形,圆弧
Objective-C
6
star
9

MRVideoToPicture

Fast extract video key frame to picture / 快速提取视频关键帧并保存成图片
Objective-C
6
star
10

QLWaterfallCollectionView

使用UICollectionView写的瀑布流。。。
Objective-C
3
star
11

UITableViewStudyDemo

自定义tablieview 编辑模式
Objective-C
3
star
12

pic2webp

批量转换为webp格式 (convert PNG, JPEG, animated (or not) GIF images into WebP)
Shell
3
star
13

LLLAttributeLabel

extends UILabel ;can touch(through block revoke);support a variety of color and font;
Objective-C
2
star
14

UIImageEffects

苹果官方的 blur 效果
Objective-C
1
star
15

debugly.github.io

my blog
HTML
1
star
16

QLCodes

一些经验分享或者学习时写的demo
Objective-C
1
star
17

StudyAssociationSourceCode

剖析 Objective-C 关联引用源码
Objective-C
1
star
18

SCNetworkAgent

a cocoa network abstract layer
Objective-C
1
star