当前位置: 欣欣网 > 码农

干货:一些优秀的音视频开源项目、面试题推荐

2024-05-12码农

今天在论坛上看到一个关于音视频开发的帖子,看到题目,我忍不住点了进去。

标题是这样的「 【🔥🔥🔥热门、吃香】音视频流媒体权威资料整理,精选文章,学术论文,大佬视频,实践项目,开源框架,协议,业界大神一览 」, 质疑「估计是骗人的,怎么会有这么全的内容」,但是还是想进去一探究竟。

项目地址:https://github.com/0voice/audio_video_streaming

一、书籍

  1. 【FFmpeg从入门到精通】

  2. 【视频图像处理与性能优化】

  3. 【数字图像与视频处理】

  4. 【数字音视频技术及应用 】

  5. 【音视频开发进阶指南:基于Android与iOS平台的实践 】

  6. 【视频编码全角度详解:AVS_China、H.264_MPEG-4_PART10、HEVC、VP6、DIRAC、VC-1 】

  7. 【FFMPEG - From Zero to Hero 】

  8. 【FFmpeg Basics 2012 】

  9. 【Handbook on SDP for Multimedia Session Negotiations SIP and WebRTC IP Telephony 】

  10. 【Learning WebRTC 】

  11. 【Real-Time Communication with WebRTC】

二、面试题

1. 为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?

2. 怎么做到直播秒开优化?

3. 直方图在图像处理里面最重要的作用是什么?

4. 数字图像滤波有哪些方法?

5. 图像可以提取的特征有哪些?

6. 衡量图像重建好坏的标准有哪些?怎样计算?

7. AAC和PCM的区别?

8. H264存储的两个形态?

9. FFMPEG:图片如何合成视频?

10. 常见的音视频格式有哪些?

11. 请指出「1080p」的意义?

12. 请解释颜色的本质及其数字记录原理,并说出几个你所知道的色域。

13. 请解释「矢量图」和「位图」的区别?

14. 请从「光圈」「快门速度」「感光度」「白平衡」「景深」中任选2个进行叙述?

15. 视频分量YUV的意义及数字化格式?

16. 在MPEG标准中图像类型有哪些?

17. 列举一些音频编解码常用的实现方案?

18. 请叙述MPEG视频基本码流结构?

19. sps和pps的区别?

20. 请叙述AMR基本码流结构?

21. 预测编码的基本原理是什么?

22. 说一说ffmpeg的数据结构?

23. 说一说AVFormatContext 和 AVInputFormat之间的关系?

24. 说一说AVFormatContext, AVStream和AVCodecContext之间的关系?

25. 说一说视频拼接处理步骤?(细节处理,比如分辨率大小不一,时间处理等等)

26. NV21如何转换成I420?

27. DTS与PTS共同点?

28. 影响视频清晰度的指标有哪些?

29. 编解码处理时遇到什么困难?

30. 如何秒开视频?什么是秒开视频?

31. 如何降低延迟?如何保证流畅性?如何解决卡顿?解决网络抖动?

32. 需要把网络上一段视频存储下来(比如作为mp4 ), 请实现并说出方法(第一个视频需要翻墙才能进)?

33. 需要把网络上一段语音存储下来(比如作为mp3 ), 请实现并说出方法?

34. 为什么要有YUV这种数据出来?(YUV相比RGB来说的优点)

35. H264/H265有什么区别?

36. 视频或者音频传输,你会选择TCP协议还是UDP协议?为什么?

37. 平时说的软解和硬解,具体是什么?

38. 何为直播?何为点播?

39. 简述推流、拉流的工作流程?

三、文章

  1. WebRTC 发送方码率预估实现解析

  2. 码率控制基本概念

  3. Speex回声消除代码分析

  4. 房间声学原理与Schroeder混响算法实现

  5. H264系列--压缩编码技术

  6. RTSP 媒体协议流的录制方案及其覆盖策略详解

  7. 建立连接之ICE框架

  8. 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

  9. 音视频同步原理及实现

  10. 直播概念和流程框架

  11. CDN在直播中的运用

  12. 常见音视频编码格式

  13. H.264官方软件JM源代码分析-编码器lencod

  14. H.264官方软件JM源代码分析-解码器ldecod

  15. Android 音视频技术

  16. Web前端WebRTC攻略-媒体协商与SDP简析

  17. 基于FFmpeg的AVfilter的例子-纯净版

  18. WebRTC 传输安全机制第二话:深入显浅出 SRTP 协议

  19. WebRTC能给我带来什么?

  20. 视音频数据处理:RGB、YUV像素数据处理

  21. 视音频数据处理:PCM音频采样数据处理

  22. 视音频数据处理:H.264视频码流解析

  23. 视音频数据处理:AAC音频码流解析

  24. 视音频数据处理:FLV封装格式解析

  25. 视音频数据处理:UDP-RTP协议解析

  26. 如何生成mp4文件

  27. ffmpeg滤镜的基本使用

  28. webRTC是如何实现音视频的录制

  29. 音视频同步算法

  30. 房间声学原理与Schroeder混响算法实现

  31. 一个频域语音降噪算法实现及改进方法

  32. HEVC官方软件HM源代码分析-编码器TAppEncoder

  33. HEVC官方软件HM源代码分析-解码器TAppDecoder

  34. 音视频编解码常用知识点

  35. 微信小程序集成实时音视频通话功能

  36. 视音频编解码技术零基础学习方法

  37. RTSP协议学习

  38. HEVC码流分析

  39. H.264简单码流分析

  40. MPEG2简单码流分析

  41. 视频码流分析工具

  42. H.264分析器

  43. FFmpeg架构之IO模块分析

  44. (Video and Audio Data Processing)UDP-RTP协议解析

  45. RTSP协议实例分析

  46. RTSP协议之TCP或UDP问题

  47. ffplay工具命令使用技巧

  48. VLC RTSP网络串流播放失败

  49. RTMP协议详解

  50. STUN 原理理解

四、开源框架

实时音视频应用共包括几个环节: 采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节 每一个细分环节,还有更细分的技术模块。 比如,前后处理环节有美颜、滤镜、回声消除、噪声抑制等,采集有麦克风阵列等,编解码有VP8、VP9、H.264、H.265等。

采集->前处理编码->传输->解码后处理->渲染

实时音视频开源项目思维导图


编解码开源项目

  • WebRTC

  • 地址: webrtc.org

    WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力。

    WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。

  • H.264

  • 地址: www.linuxfromscratch.org

    H.264是ITU(International Telecommunication Union,国际通信联盟)和MPEG(Motion Picture Experts Group,运动图像专家组)联合制定的视频编码标准。而x264是一个开源的H.264/MPEG-4 AVC视频编码函数库,是最好的有损视频编码器之一。

  • FFmpeg

  • 地址: ffmpeg.org

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。 采用LGPL或GPL许可证。 它提供了录制、转换以及流化音视频的完整解决方案。 FFmpeg提供了编码、解码、转换、封装等功能,以及剪裁、缩放、色域等后期处理。

  • ijkplayer

  • 地址:bilibili/ijkplayer

    ijkplayer 是一个基于 ffplay 的轻量级 Android/iOS 视频播放器。实现了跨平台功能,API易于集成;编译配置可裁剪,方便控制安装包大小;支持硬件加速解码,更加省电;提供Android平台下应用弹幕集成的解决方案。

  • JSMpeg

  • 地址:jsmpeg.com

    JSMpeg is a Video Player written in JavaScript. It consists of an MPEG-TS Demuxer, WebAssembly MPEG1 Video & MP2 Audio Decoders, WebGL & Canvas2D Renderers and WebAudio Sound Output. JSMpeg can load static files via Ajax and allows low latency streaming (~50ms) via WebSocktes.

  • Opus

  • 地址:opus.nlpl.eu

    Opus是一个有损声音编码的格式,由Xiph.Org基金会开发,之后由IETF(互联网工程任务组)进行标准化,目标是希望用单一格式包含声音和语音,取代Speex和Vorbis,且适用于网络上低延迟的即时声音传输,标准格式定义于RFC 6716文件。Opus格式是一个开放格式,使用上没有任何专利或限制。

  • live555

  • 地址:www.live555.com

    服务端开源项目

  • jitsi

  • 地址:jitsi/jitsi

    Jitsi是一个音频/视频和聊天通信器,它支持SIP、XMPP/Jabber、IRC和许多其他有用的特性。

  • JsSIP

  • 地址:jssip.net

    JsSIP是一个简单易用的JavaScript库,它利用SIP和WebRTC的最新发展,在任何网站上提供全功能的SIP端点。通过JsSIP ,只要几行代码,任何网站都可以通过音频,视频等获得实时通信功能。

  • SRS

  • 地址:www.ossrs.net

    SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。SRS提供了丰富的接入方案将RTMP流接入SRS,包括推送RTMP到SRS、推送RTSP/UDP/FLV到SRS、拉取流到SRS。SRS还支持将接入的RTMP流进行各种变换,譬如将RTMP流转码、流截图、转发给其他服务器、转封装成HTTP-FLV流、转封装成HLS、转封装成HDS、录制成FLV。SRS包含大规模集群如CDN业务的关键特性,譬如RTMP多级集群、源站集群、VHOST虚拟服务器、无中断服务Reload、HTTP-FLV集群、Kafka对接。此外,SRS还提供丰富的应用接口,包括HTTP回调、安全策略Security、HTTP API接口、RTMP测速。

  • JRTPLIB

  • 地址:j0r1/JRTPLIB

    jrtplib是一个基于C++、面向对象的RTP封装库, jrtplib支持定义于RFC3550中的RTP协议,它使得发送和接收RTP报文变得异常简单,用户不用担心SSRC冲突,也不用考虑如何传输RTCP数据,因为RTCP功能完全在内部实现。

  • OPAL

  • 地址:opalvoip

    openphone抽象库(OPAL)是一个c++多平台、多协议的库,用于IP和其他网络上的传真、视频和语音。还包括可移植工具库(PTLib),这是一个c++多平台抽象库。

  • Kurento

  • 地址:www.kurento.org

    Kurento 是一个WebRTC流媒体服务器以及一些客户端API,开发WWW及智能手机平台的高级视频应用就变得更加容易。可以利用Kurento开发的应用类型包括,视频会议,音视频广播,音视频录制、转码等。

  • Janus

  • 地址:janus.conf.meetecho.com

    五、视频

    国外大神

    国内大佬

    六、更多给力的资源

    如:学术论文、业界大神介绍、流媒体协议、实战项目等

    通过上面对内容的简述,我想大家对这分资料,都有了一个大概的了解,也同时对它有了个大概的评价。

    从我个人感觉来说,我认为这份资料还是整理得不错的。并没有一味吹嘘。基本符合标题所写的「【🔥🔥🔥热门、吃香】音视频流媒体权威资料整理,精选文章,学术论文,大佬视频,实践项目,开源框架,协议,业界大神一览」。

    资料地址:https://github.com/0voice/audio_video_streaming

    repo最后附上的了公众号,有需要这份资料所有文档的朋友,可以联系他们。

    -- END --

    进技术交流群, 扫码添加我的微信:Byte-Flow

    获取视频教程和源码


    推荐: