Giter Club home page Giter Club logo

xhunmon / vablog Goto Github PK

View Code? Open in Web Editor NEW
1.1K 19.0 214.0 9.12 MB

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

Home Page: https://vablog.vercel.app

License: BSD 3-Clause "New" or "Revised" License

CSS 100.00%
aac ffmpeg h264 rtmp flv mediacodec opengl opengl-es opensl-es pcm

vablog's Introduction

为了更好的阅读请前往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 HandBrake 是一个跨平台的视频转换器,支持多种输入、输出格式,可以添加滤镜、转换分辨率等操作 Linux、macOS、Windows https://github.com/HandBrake/HandBrake
Avidemux Avidemux 是一款视频编辑器,支持许多基本的编辑功能,如修建、编码、添加滤镜等 Linux、macOS、Windows http://avidemux.sourceforge.net/
Shotcut Shotcut 是一个跨平台的视频编辑器,支持多种基本编辑功能,并提供了丰富的视频滤镜 Linux、macOS、Windows https://www.shotcut.org/
Lightworks Lightworks 是一款视频编辑软件,支持多种高级编辑功能,如多个视频轨道、音频同步、字幕、剪辑等 Linux、macOS、Windows https://www.lwks.com/
Kino Kino 是一款开源的视频编辑器,支持视频的剪辑、滤镜、导出等 Linux http://www.kinodv.org/
Cinelerra GG Cinelerra GG 是截至目前正在活跃开发的 Cinelerra 的一个独特分支,具有更多先进的编辑功能 Linux https://cinelerra-gg.org/
Flowblade Flowblade 是一个跨平台的视频编辑器,具有自动编辑、视频剪辑、渐变调色、音轨图、文本动画等功能 Linux、macOS https://github.com/jliljebl/flowblade
Olive Olive 是一款跨平台的视频编辑器,支持多个视频、音频和图像轨道,具有类似 Adobe Premiere 和 Final Cut Pro 等视频编辑器的界面 Linux、macOS、Windows https://www.olivevideoeditor.org/

5.其他常用库

库名称 描述 作用平台 项目地址
ARToolKit 一个用于创建增强现实体验的开源跟踪库 多平台 https://github.com/artoolkit/ARToolKit5/
Kurento 可以集成WebRTC和媒体服务器的平台 Web https://www.kurento.org/
Webrtc 实时通信的开源项目,包括音频、视频和数据通信 Web https://webrtc.org/
VLC 一个免费的开源跨平台媒体播放器和框架,可播放大多数多媒体文件 多平台 https://www.videolan.org/vlc/index.html
ExoPlayer 一个可扩展的Android媒体播放器,包括支持DASH和HLS的内置组件 Android https://github.com/google/ExoPlayer
Vitamio Android和iOS的流媒体解决方案 Android,iOS https://www.vitamio.org/en/
AVPlayer 一个iOS播放器框架,支持本地和网络音频和视频文件 iOS https://developer.apple.com/documentation/avfoundation/avplayer
FFmpegKit FFmpeg库的原生iOS和Android包装器 iOS,Android https://github.com/tanersener/ffmpeg-kit
libVLC 适用于Android、iOS、tvOS和macOS的VLC音视频框架 Android,iOS,tvOS,macOS https://code.videolan.org/videolan/libvlc-framework
AVKit 一个macOS框架,提供音频和视频播放和处理功能 macOS https://developer.apple.com/documentation/avkit
Unity Video Player 一种用于在游戏中播放视频的Unity组件 Unity https://docs.unity3d.com/Manual/class-VideoPlayer.html
Three.js 一个基于WebGL的跨平台JavaScript库,可用于创建和显示3D计算机图形 Web https://threejs.org/
A-Frame 一个用于构建虚拟现实和增强现实的Web框架 Web https://aframe.io/
WebVR 一种可用于任何Web浏览器的虚拟现实解决方案 Web https://webvr.info/
Web Audio API JavaScript API,用于处理和操纵音频 Web https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API
Tone.js 用于Web音乐软件的框架 Web https://tonejs.github.io/
Pygame 用于开发2D游戏的Python库 Python https://www.pygame.org/news
OpenAL 多平台上的跨API的3D音频库 多平台 https://www.openal.org/
SDL_mixer 用于游戏和其他多媒体应用程序的音频库 多平台 https://www.libsdl.org/projects/SDL_mixer/
Houdini 针对3D艺术家和游戏开发人员的3D建模、动画和视觉效果软件 多平台 https://www.sidefx.com/
Natron 免费的、开源的视频合成软件 多平台 https://natrongithub.github.io/
OBS Studio 免费、开源、跨平台的流媒体和录制软件 多平台 https://obsproject.com/
GIMP 免费的开源图像编辑器 多平台 https://www.gimp.org/
Inkscape 一个用于创建和编辑矢量图形的开源软件 多平台 https://inkscape.org/
MediaInfo 一个开源的多媒体信息解析器,用于获取媒体文件的各种信息 多平台 https://mediaarea.net/en/MediaInfo
libde265 一种异步HEVC解码器库 多平台 https://github.com/strukturag/libde265
libvpx 适用于WebRTC、VP8和VP9的开源视频编解码器 多平台 https://github.com/webmproject/libvpx
x264 一种高质量的H.264 / AVC编码器 多平台 https://www.videolan.org/developers/x264.html
x265 一种用于UHD编码的开源HEVC编码器 多平台 https://bitbucket.org/multicoreware/x265_git
Theora 一种开源视频编解码器 Web https://www.theora.org/
Ogg 一种开源多媒体容器格式,通常与Theora和Vorbis一起使用 Web https://www.xiph.org/ogg/
Vorbis 一种开源音频编解码器 Web https://xiph.org/vorbis/
WebVTT 一种用于视频文本替代品的Web文本轨道 Web https://w3c.github.io/webvtt/
PyAV 基于FFmpeg的Python封装,可用于解码、编码和处理音频和视频 Python https://pyav.org/
FFpyplayer Python+FFmpeg解决方案,在Python中播放音频和视频 Python https://ffpyplayer.readthedocs.io/en/latest/
SoundManager2 一个轻型、大众化的JavaScript音频播放器库 Web https://github.com/scottschiller/SoundManager2
wave.js 用于简化Web音频的JavaScript库 Web https://github.com/jaz303/waveform-data
Howler.js 用于现代Web音频的JavaScript音频库 Web https://github.com/goldfire/howler.js
Web Audio DAW 用于在浏览器中创建数字音频工作站(DAW)的Web Audio Editor Web https://beryju.org/web

六、实践项目

  • AFPlayer项目 Android实现FFmpeg、OpenSL ES、OpenGL SE、MediaCodec等,实现简单的播放器,主要体现出相关知识点的使用。
  • OpenGLES基本使用 :点、线、三角形、四边形、矩阵、纹理(贴纸)、摄像头显示、FBO、EGL、滤镜叠加、视频流编码输出。
  • 直接阅读上方优秀开源库效果更佳...

七、最后

创作皆不易,有条件的朋友请支持原版,谢谢! 密码:lqi9

    网易视频
    价值几千块的音视频视频
    动脑视频
    C++侯捷视频
    音视频开发进阶指南:基于Android与iOS平台的实践.pdf
    音视频05-H265码流分析.pdf
    音视频04-H265之CU TU PU划分.pdf
    音视频03-H265深度解析.pdf
    音视频02-H265编码与H264区别.pdf
    音视频01-H265编码.pdf
    新一代视频压缩编码标准-H.264_AVC(第二版).pdf
    数字信号处理教程(第四版).pdf
    视频技术手册(第5版).pdf
    《FFmpeg从入门到精通》.pdf
    《FFmpeg_Basics(260页)》.pdf
    webrtc介绍.pdf
    WebGL编程指南.zip
    video_file_format_spec_v10_1.pdf
    STL源码剖析简体中文完整版(清晰扫描带目录).pdf
    SDL2-API手册.doc
    rtmp规范翻译1.0.docx
    rtmp_specification_1.0.pdf
    rtmp.part3.Commands-Messages.pdf
    rtmp.part2.Message-Formats.pdf
    rtmp.part1.Chunk-Stream.pdf
    jni基础介绍.pdf
    OpenGL ES 2.0 编程指南 中文版.pdf
    OpenGL+着色语言第三版.pdf
    OpenGL.ES.2.0.Programming.Guide.pdf
    OpenGL着色语言.pdf
    ISO_IEC_14496-14_2003-11-15.pdf
    ISO_IEC-14496-3-2009.pdf
    hls-mpeg-ts-VB_WhitePaper_TransportStreamVSProgramStream_rd2.pdf
    hls-mpeg-ts-iso13818-1.pdf
    H.264官方中文版.pdf
    H.264_MPEG-4-Part-10-White-Paper.pdf
    H.264-AVC-ISO_IEC_14496-15.pdf
    H.264-AVC-ISO_IEC_14496-10.pdf
    ffmpeg命令大全.pdf
    FFmpeg命令大全.docx
    ffmpeg翻译文档.pdf
    FFMPEG_FFPLAY源码剖析.7z
    CMake中文手册.pdf
    Cmake在Android studio Ndk使用.pdf
    C++ Primer(第5版)中文版.pdf
    C++ Primer Plus(第6版)中文版.azw3
    C Primer中文版 第五版 .pdf
    Android 音视频开发_何俊林.pdf
    amf3_spec_121207.pdf
    amf0_spec_121207.pdf
    Advanced C and C++ Compiling.pdf
    AAC解码算法原理详解.pdf
    WebRTC权威指南(第三版中文版).pdf
    音频编码(高泽华)上.pdf
    视频技术手册.pdf
    高级音频编解码器资料.pdf
    《数字信号处理》视频:https://www.bilibili.com/video/BV13P411P7Pv

【重点声明】此系列仅用于学习,禁止用于非法攻击,非法传播。一切遵守《网络安全法》。且如有发现商用,必纠法律责任。如有侵权请联系我(邮箱:[email protected])进行删除。

vablog's People

Contributors

xhunmon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vablog's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.