SkillAgentSearch skills...

VABlog

YUV/PCM/H264/H265/AAC/FFmpeg/Opengl. 这有丰富的音视频开发的学习资源、开发工具、优秀书籍、教程、面试题和开源项目,旨在帮助开发者和爱好者更好地学习、实践和工作。

Install / Use

/learn @xhunmon/VABlog
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

为了更好的阅读请前往GitBook

欢迎加入QQ技术交流群:389713575

一、前言

这里整理有着丰富的音视频开发的学习资源、开发工具、优秀书籍、教程和开源项目,旨在帮助开发者和爱好者更好地学习、实践和工作。而下图是开发处理的过程:

音视频处理过程

二、学习技能

| 语言 | 重要度 | 作用 | |-------------------| --- | --- | | C/C++ | ★★★★★ | 作为底层开发语言,可以实现音视频编码/解码,滤镜等高性能的操作,是音视频开发中最为重要的基础语言之一。 | | Python | ★★★☆☆ | Python 在音视频开发中可以用于快速开发或原型开发,尤其在深度学习及音视频处理应用中表现突出。 |
| Java/Kotlin | ★★★☆☆ | Java/Kotlin 适用于 Android平台的音视频开发,它们提供了音视频录制、剪辑、播放等 API。 |
| Objective-C/Swift | ★★★☆☆ | 用于MacOS、iOS平台的开发,其开发API包含音视频流的处理和流媒体播放等。 | | JavaScript | ★☆☆☆☆ | JavaScript是Web开发的常用编程语言,它的WebRTC技术可以用于浏览器中的音视频流处理和实时通讯。 | | Shell | ★☆☆☆☆ | 脚本编写、系统管理等。 | | CMake | ★☆☆☆☆ | 跨平台编译、构建工具等。 | | GLSL | ★☆☆☆☆ | 图形学、OpenGL着色器等。 |

三、学习音视频理论知识

1.重要知识点

| 知识点 | 重要度 | 作用 | |-------------| ------ | ------------------------------------------------------------ | | YUV/RGB | ★★★★★ | 视频原始(裸流)数据,解码最终显示就是一帧帧YUV数据 。 | | PCM | ★★★★★ | 音频原始(裸流)数据,解码最终播放的就是PCM数据。 | | H.264(AVC) | ★★★★★ | 目前主流的视频编解码协议。 | | H.265(HEVC) | ★★★☆☆ | 基于H.264的升级版,大幅度提升了编码大小和质量。因为版权和收费问题没有普及。| | AAC | ★★★★★ | 目前主流的音频编解码协议。 | | RTMP | ★★★☆☆ | 直播推流,看侧重点 | | 封装格式 | ★★☆☆☆ | MP4、AVI、MKV、RMVB、FLV等容器,把音频、视频、字幕等通道封装成一个文件 | | webrtc(VP8) | ★★★☆☆ | P2P的音视频通话,看侧重点 | | OpenGL | ★★★☆☆ | 使用GPU渲染视频,释放宝贵的CPU资源,看侧重点 |

2.书籍推荐

3.实践

3.1.视音频数据处理入门

[总结]视音频编解码技术零基础学习方法 系列文章,介绍了视音频编解码技术大体上原理和流程,通俗易懂。包括以下文章:

3.2.完整的RTMP推送小项目

此过程,体现从0~1。0是采集到的原始视频和音频数据,进行编码、封装,变为1(文件)。

3.3.播放器小项目

此过程,体现从1~0。与3.2正好相反,把封装的文件(网络数据)通过解封装和解码,得到原始的裸数据(一帧帧图片)进行播放。

  • AFPlayer项目 Android实现FFmpeg、OpenSL ES、OpenGL SE、MediaCodec等,实现简单的播放器,主要体现出相关知识点的使用。

四、学习过程的分析工具

| 工具 | 作用 | 下载地址 | | ----------- | ------------------------------------------------------------ |---------------| | VideoEye | 来自雷神的强大实时视频码流分析软件。 |地址| | Codecian | H264/H265等分析工具(跨平台)。 |地址| | H264Visa | H.264/AVC实时视频分析工具。 |(略)| |Elecard StreamEye|编码视频的可视化表现,流结构分析,这些流是MPEG-1/2/4 or AVC/H.264 VES(视频基本流)、SS(MPEG1的系统流)、PS(MPEG2的程序流)、TS(mpeg2的传输流)。|(略)| | Hxd Hex Editor| 16进制查看工具。 |地址| | ffprobe | ffmpeg中自带的分析工具,非常强大,不过上手有难度。 |参考|

五、重点开发工具/组件/开源库

1.FFmpeg

音视频开发是绕不开FFmpeg的,因为它是一个"集大成者",里面已经包含或可集成现代几乎所有的音视频技术(库)。

1.1.学习途径

1.2.学习路线

这里不推荐直接学习雷神的 [总结]FFMPEG视音频编解码零基础学习方法,建议是通过在学习FFmpeg官方例子中进行学习,避免先入为主使用了过时的API。

1.2.1.源码编译

编译ffmpeg4.2.2通过这篇文章我们基本可以编译出我们想要的FFmpeg库

1.2.2.源码阅读

1.2.3.学习官方例子

1.2.4.音视频同步

1.2.5.FFmpeg相关

2 OpenGL

OpenGL使用GPU渲染视频,释放宝贵的CPU资源,学习它是必不可少的。但是,正如雷神所说 :作为一个搞视频技术的人研究OpenGL,需要耗费大量时间和精力,这样学习不是很经济。所以推荐只学习有关视频渲染相关知识。

3.音频相关处理库

| 库名称 | 作用 | 平台 | 项目地址 | | --- |-----------------------------------------| --- | --- | | SoX | SoX 可以进行音频处理,如音调、声速、混响、后暂式等等 | Linux、macOS、Windows | https://github.com/chirlu/sox | | Essentia | Essentia 可以进行音频处理、分析、提取等,提供了很多现成的功能算法 | Windows、macOS、Linux、Android、iOS | https://github.com/MTG/essentia | | Spleeter | Spleeter 是一款分离歌曲音轨的库,可以分离歌曲中的伴奏、人声等(如:不带背景乐的伴奏)| Linux、macOS、Windows | https://github.com/deezer/spleeter | | libsndfile | libsndfile 可以读写、处理多种音频文件,支持变速、变调等处理 | Linux、macOS、Windows | http://www.mega-nerd.com/libsndfile/ | | Rubber Band Audio | Rubber Band Audio 可以进行音频处理,支持变速、变调、变形和时间拉伸等多种处理操作 | Linux、macOS、Windows | https://breakfastquay.com/rubberband/ | | librubberband | librubberband 是 Rubber Band Audio 的 C++ 接口,简化了音频处理操作。 | Linux、macOS、Windows | https://github.com/breakfastquay/rubberband/tree/master/src | | SoundTouch | SoundTouch 可用进行音频连续变速变调处理,包括作品(“chipway/Pydub-Playground”),可实现歌曲同步播放。| Windows、macOS、Linux、Android、iOS | https://gitlab.com/soundtouch/soundtouch | | Sonic | Sonic 可实现音频变速、变调等处理,运用于 播客、游戏等领域。 | Windows、macOS、Linux、Android、iOS | https://github.com/waywardgeek/sonic | | Oboe | Oboe是一个C++库,它使在Android上建立高性能的音频应用变得容易。| Android | https://github.com/google/oboe |

4.视频相关处理库

| 库名称 | 作用 | 平台 | 项目地址 | | --- |---------------------------------------------------------| --- | --- | | FFmpeg | FFmpeg 可以转换视频文件格式、添加滤镜、剪辑、提取音频等功能 | Linux、macOS、Windows | https://github.com/FFmpeg/FFmpeg | | Libav | libav 同样可以转换视频文件格式、添加滤镜、剪辑、提取音频等功能,是 FFmpeg 的一个分支版本 | Linux、macOS、Windows | https://libav.org/ | | GStreamer | GStreamer 是一个流媒体框架,支持流式传输视频文件并进行处理,可以添加滤镜、编解码、格式转换等功能| Linux、macOS、Windows | https://gstreamer.freedesktop.org/ | | MLT Framework | MLT Framework 可以用于视频混合、转换、添加滤镜、效果等,也是 Kdenlive 软件所使用的引擎 | Linux、macOS、Windows | https://github.com/mltframework/ | | OpenCV | OpenCV 是一个计算机视觉库,但也支持读取、写入视频文件、添加滤镜、实现对象追踪等功能 | Linux、macOS、Windows | https://github.com/opencv/opencv | | Blender | Blender 是一个 3D 制作软件,支持读取、写入视频文件、添加滤镜、实现对象制作等功能 | Linux、macOS、Windows | https://www.blender.org/ | | MLV App | MLV App 主要用于处理和编辑 Magic Lantern 的电影录制格式,可以进行视频转换和色彩分级等 | Linux、macOS、Windows | https://bitbucket.org/dmilligan/mlv_app/ | | HandBrake | Ha

View on GitHub
GitHub Stars1.5k
CategoryDevelopment
Updated3d ago
Forks283

Languages

CSS

Security Score

100/100

Audited on Apr 6, 2026

No findings