项目作者: debugly

项目描述 :
FFmpeg step by step tutorials for iOS developer. (适合iOS开发者的零基础FFMpeg学习教程)
高级语言: Objective-C
项目地址: git://github.com/debugly/StudyFFmpeg.git
创建时间: 2017-05-14T13:23:09Z
项目社区:https://github.com/debugly/StudyFFmpeg

开源协议:MIT License

关键词:
"ffmpeg" "ios" "videoplayer"

下载


帮助零基础的 iOS/macOS 开发人员快速学习基于 FFmpeg 的音视频技术,主要包括了在 iOS/macOS 平台如何调用 FFmpeg 以及多种音视频渲染技术的对比。

感觉有用的话给个 Star 吧😊

Stargazers repo roster for @debugly/FFmpegTutorial

Usage

iOS 示例工程:

  1. git clone https://github.com/debugly/FFmpegTutorial.git
  2. cd FFmpegTutorial
  3. ./install-pre-any.sh ios
  4. open Example/iOS/iOSExample.xcworkspace

运行效果:

macOS 示例工程:

  1. git clone https://github.com/debugly/FFmpegTutorial.git
  2. cd FFmpegTutorial
  3. ./install-pre-any.sh macos
  4. open Example/macOS/macOSExample.xcworkspace

Introduction

前期为方便管理依赖,项目使用 Pod 开发库(Development Pod)的形式来组织,现在已经不再用了,避免对 cocoapods 的依赖。

所有对 FFmpeg 的封装代码都放在 FFmpegTutorial 库里,如何编译 FFmpeg 不是本教程的重点,在执行 ./install-pre-any.sh 脚本时会自动下载已经预编译好的 FFmpeg 库,编译 FFmpeg 的脚本也是开源的 MRFFToolChainBuildShell

教程共分为六个部分,提供了 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 缓存队列,创建解码线程
  • VideoRendering Embed:创建视频渲染线程,将视频相关逻辑封装到播放器内
  • AudioRendering Embed:将音频相关逻辑封装到播放器内
  • Show Play Progress:显示音视频播放进度
  • Sync Audio And Video:音视频同步

五、趣味实验

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

六、跨平台播放器

Donate

编写这个教程,花费了七年的时间,期间工程重构了三次,不记得熬了多少个夜晚去死磕遇到的问题…

希望这些教程能够为新人学习音视频渲染提供上帮助,请买杯咖啡给我提提神儿。

donate.jpg