前言

  耽误了很久,一直想写音视频开发的教程,一方面,音视频的发展正在向各个行业扩展,从教育的远程授课,交通的人脸识别,医疗的远程就医等,音视频方向已经占据一个相当重要的位置,而音视频真正入门的文章又少之甚少,一个刚毕业小白可能很难切入理解,因为音视频中涉及大量理论知识,而代码的书写需要结合这些理论,所以搞懂音视频,编解码等理论知识至关重要。另一方面,公司的业务也在逐渐向音视频靠拢,我需要先将积累的知识点重新梳理后分享给其他同学。

  整个过程可能会花费较长时间,为了防止大家理解过于空洞,我会将demo上传到Github,供大家对照学习。 在代码实现上,我更多会以iOS开发为着重点。

  如果喜欢,请帮忙点赞并支持转载,转载请附原文链接.

  教程概述

  整个教程在我目前的规划里面大概分为几块:

  交叉编译音频体系iOS音频开发视频体系iOS视频开发直播、短视频及其他实际应用

  音视频基础知识体系

  在教程开始之前,我们先了解音视频技术的基础知识,当然我更多的是讲解有那些知识体系以及如何使用,而不会去详细讲解知识体系的细节或理论基础,例如我会讲解压缩数据原理,但是不会讲解I帧,P帧,B帧具体的编码。简而言之,我们将站在巨人肩膀上,而不会去探究巨人是怎样形成的。

  1、封装格式

  封装格式也称多媒体容器,它只是为多媒体编码提供了一个“外壳”,也就是将所有的处理好的视频、音频或字幕都包装到一个文件容器内呈现给观众,这个包装的过程就叫封装。

  

  常见音视频的封装格式.png

  Tips:封装格式不影响视频画质。它只负责把内部的视频轨和音频轨集成在一起,只起到一个文件夹(或者压缩包)的作用,并没有对视频轨和音频轨造成影响。

  2、视频编码技术

  视频编码就是指通过特定的压缩技术,将某个视频格式的文件转换成另 一种视频格式文件的方式。视频传输中的编码标准 1.国际电联的H.264 2.国际标准化组织运动图像专家 组的MPEG系列标准 3.微软公司的WMV 4.Apple公司的 QuickTime 5.google力推的WebM格式常见视频编码格式

  常见视频编码格式.png

  3、音频编码技术

  音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量,偏于存储和传输。

  描述一段PCM数据一般需要以下几个概念:

  采样率:记录声音时每秒的采样个数,它用赫兹(Hz)来表示。量化格式(采样精度):指记录声音的动态范围,它以位(Bit)为单位。声道数:通道的数目比特率:每秒传输的数据量。公式如下:比特率=采样率 × 采样深度 × 通道数

  常见音频编码格式有:

  

  常见音频编码格式.png

  4、流媒体协议技术

  流媒体协议是用于传输音视频的协议,包括RTP、RTCP、RTSP、RTMP、HLS等,本文只介绍技术,其中常用的是RTMP协议。

  RTP(Real-time Transport Protocol)实时传输协议 RTP是用于Internet上针对多媒体数据流的一种传输协议。建立在UDP协议上的。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(配合RTCP协议)、视频会议。和一键通(Push to Talk)系统(配合H.323或SIP),使它成为了IP电话产业的技术基础。RTCP(Real-time Transport Control Protocol)实时传输控制协议 RTCP控制协议需要与RTP数据协议一起配合使用,当应用程序启动一个RTP会话时将同时占用两个端口,分别供RTP和RTCP使用。RTP本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成。 通常RTCP会采用与RTP相同的分发机制,向会话中的所有成员周期性地发送控制信息,应用程序通过接收这些数据,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进行控制或者对网络状况进行诊断。RTSP(Real Time Streaming Protocol)实时流协议 RTSP是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP对流媒体提供了诸如暂停,快进等控制,但它本身并不传输数据,RTSP的作用相当于流媒体服务器的远程控制。服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。 RTSP之所以特意使用与HTTP/1.1类似的语法和操作,在很大程度上是为了兼容现有的Web基础结构,正因如此,HTTP/1.1的扩展机制大都可以直接引入到RTSP中。由RTSP控制的媒体流集合可以用表示描述(Presentation Description)来定义,所谓表示是指流媒体服务器提供给客户机的一个或者多个媒体流的集合,而表示描述则包含了一个表示中各个媒体流的相关信 息,如数据编码/解码算法、网络地址、媒体流的内容等。 虽然RTSP服务器同样也使用标识符来区别每一流连接会话(Session),但RTSP连接并没有被绑定到传输层连接(如TCP等),也就是说在整个 RTSP连接期间,RTSP用户可打开或者关闭多个对RTSP服务器的可靠传输连接以发出RTSP 请求。此外,RTSP连接也可以基于面向无连接的传输协议(如UDP等)。RTMP(Real Time Messaging Protocol)实时消息传输协议 RTMP(Real Time Messaging Protocol)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。它有三种变种: (1)工作在TCP之上的明文协议,使用端口1935; (2)RTMPT封装在HTTP请求之中,可穿越防火墙; (3)RTMPS类似RTMPT,但使用的是HTTPS连接。

  RTMP视频播放的特点:

  (1)RTMP协议是采用实时的流式传输,所以不会缓存文件到客户端,这种特性说明用户想下载RTMP协议下的视频是比较难的;

  (2)视频流可以随便拖动,既可以从任意时间点向服务器发送请求进行播放,并不需要视频有关键帧。相比而言,HTTP协议下视频需要有关键帧才可以随意拖动。

  (3)RTMP协议支持点播/回放(通俗点将就是支持把flv,f4v,mp4文件放在RTMP服务器,客户端可以直接播放),直播(边录制视频边播放)。

  HLS (HTTP Live Streaming) HTTP Live Streaming(HLS)是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用于iOS系统。HLS点播是分段HTTP点播,不同在于它的分段非常小。要实现HLS点播,重点在于对媒体文件分段,目前有不少开源工具可以使用。 相对于常见的流媒体直播协议,HLS直播最大的不同在于,直播客户端获取到的并不是一个完整的数据流,HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。

  总结

  RTSP协议

  (1)是流媒体协议。

  (2)RTSP协议是共有协议,并有专门机构做维护。.

  (3)RTSP协议一般传输的是 ts、mp4 格式的流。

  (4)RTSP传输一般需要 2-3 个通道,命令和数据通道分离。

  (5)常用于安防监控领域

  RTMP协议

  (1)是流媒体协议。

  (2)RTMP协议是 Adobe 的私有协议,未完全公开。

  (3)RTMP协议一般传输的是 flv,f4v 格式流。

  (4)RTMP一般在 TCP 1个通道上传输命令和数据

  (5)通用,浏览器直接可以看,可支持百万,千万人同时在线看

  HLS协议

  (1)是流媒体协议。

  (2)苹果公司开放标准

  (3)可以穿过任何允许HTTP数据通过的防火墙或者代理服务器

  (4)IOS上支持完美。Android3.0开始支持。PC/flash上现在也有各种as插件支持

  5、音视频原理

  采集 通过系统API获取物理摄像头采集到的视频数据与麦克风采集到的音频数据。采集的原始数据类型音频数据为PCM,视频数据为YUV或RGB。处理 音频和视频原始数据本质都是一大段数据,系统将其包装进自定义的结构体中,以回调函数形式提供,在我们的项目中需求做一系列特殊处理,如: 视频的旋转、缩放、滤镜、美颜、裁剪等; 音频的单声道降噪、消除回声、静音等。编码 原始数据自定义处理后就可以进行传输,像直播这样的功能就是把采集好的视频数据发送给服务器,以在网页端供所有粉丝观看,而传输由于本身就是基于网络环境,庞大的原始数据就必须压缩后才能带走,可以理解为我们搬家要将物品都打包到行李箱这样理解。传输 编码后的音视频数据通常以RTMP协议进行传输,这是一种专门用于传输音视频的协议,因为各种各样的视频数据格式无法统一,所以需要有一个标准作为传输的规则,协议就起到这样的作。解码 服务端接收到编码数据后,对其解码成原始数据,因为编码的数据直接送给物理硬件的设备是不能直接播放的,只有解码为原始数据才能使用。音视频同步 解码后的每帧音视频中都含有最开始录制时候设置的时间戳,我们需要根据时间戳将它们正确的播放出来,但是在网络传输中可能会丢失一些数据,或者是延时获取,这时我们就需要一定的策略去实现音视频的同步,大体分为几种策略:缓存一定视频数据,视频追音频等。

  业务剖析

  音视频在互联网行业的需求实际上简单归纳为互逆过程的两个部分:推流和拉流。

  推流:将手机采集到的视频数据传给后台播放端进行展示,播放端可以是windows、linux、web端,即手机充当采集的功能,将手机摄像头采集到视频和麦克风采集到的音频合成编码后传给对应平台的播放端。

  推流.jpeg拉流:将播放端传来的视频数据在手机上播放,推流的逆过程,即将windows、linux、web端传来的视频数据进行解码后传给对应音视频硬件,最终将视频渲染在手机界面上播放。

  更多音视频专题资料获取 后台私信【架构】

  

  

  更多c++ linux 免费视频资料获取 后台私信【架构】详情课程大纲

(零)音视频技术基础知识,现实项目相关推荐

  1. 零基础入门:实时音视频技术基础知识全面盘点

    1.引言 随着移动网络速度越来越快.质量越来越来,实时音视频技术已经在各种应用场景下全面开花,语音通话.视频通话.视频会议.远程白板.远程监控等等. 实时音视频技术的开发也越来越受到重视,但是由于音视 ...

  2. 分享即时通讯开发之实时音视频技术基础知识

    随着移动网络速度越来越快.质量越来越来,实时音视频技术已经在各种应用场景下全面开花,语音通话.视频通话.视频会议.远程白板.远程监控等等.实时音视频技术的开发也越来越受到重视,但是由于音视频开发涉及知 ...

  3. 音视频开发基础知识到进阶剖析

    全网最强音视频开发教学--音视频开发基础知识到进阶剖析 1.要掌握多深的原理才能开始做项目 2.音视频基础有哪些必须掌握的 3.进阶需要学习什么项目 视频讲解如下,点击观看: 全网最强音视频开发--音 ...

  4. 5G时代来临,前端开发工程师必须了解的音视频入门基础知识

    1. 音视频基础 本文将给大家进行音视频基础的常规知识点的梳理.当然,短短的一篇文章并不能让大家立即变成音视频领域的专家,但这些知识点已经基本涵盖了音视频的入门知识.我们将按照下面的内容给大家 音视频 ...

  5. 音视频开发基础知识(转载)

    音视频入门前,需要了解下一些基础概念,不必死记硬背,可之后再补再翻阅. 一. 颜色模式 RGB RGB颜色模型的主要目的是在电子系统中检测,表示和显示图像,比如电视和计算机,但是在传统摄影中也有应用. ...

  6. 音视频处理基础知识扫盲:数字视频YUV像素表示法以及视频帧和编解码概念介绍

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...

  7. 音视频开发基础知识(2)——最通俗易懂的视频编解码理论知识

    更多音视频知识请关注公众号:进击的代码家 音视频学习项目:LearnVideo AndroidMediaCodecDemo 视频基础概念 像素 **像素是图像的基本单元,一个个像素就组成了图像.你可以 ...

  8. WebRTC实时音视频技术基础:基本架构和协议栈

    概述 本文主要介绍WebRTC的架构和协议栈. 最基本的三角形WebRTC架构 为了便于理解,我们来看一个最基本的三角形WebRTC架构(见下图): 在这个架构中,移动电话用"浏览器M&qu ...

  9. FFmpeg音视频同步基础知识

    1. I帧/P帧/B帧 I帧:I帧(Intra-coded picture, 帧内编码帧,常称为关键帧)包含一幅完整的图像信息,属于帧内编码图像,不含运动矢量,在解码时不需要参考其他帧图像.因此在I帧 ...

最新文章

  1. c语言课程思政教案设计,设计类专业课程思政教学案例及教学设计
  2. Azkaban的Web Server源码探究系列20:resolvebuildFlow
  3. Linux进程管理工具的使用
  4. [Windows]_[0基础]_[使用命令行工具dumpbin分析文件]
  5. 关闭网页如何接收服务器消息,WebSocket服务端发消息给客户端,浏览器收到消息就关闭了...
  6. numpy中求解范数(numpy.linalg.norm)以及各阶范数详解
  7. python将两个list类型的全排列转换为tuple类型
  8. Atitit 外包管理规范attilax总结
  9. pythonarp攻击_python通过scapy模块进行arp断网攻击
  10. 第10题 正则表达式匹配(动态规划)
  11. 邮箱怎么打开smtp服务器端口号,什么是SMTP协议?SMTP端口号是多少?什么是SMTP服务器?免费smtp服务器?...
  12. 咸鱼Maya笔记—Maya 编辑法线
  13. 数据结构--括号匹配检验(数据结构习题)
  14. 介绍 PostgreSql 两个有用的比较操作
  15. 详细不啰嗦,电脑重装系统win10教程分享
  16. 一起学英语第二季第五期
  17. bugkuCTF之散乱的密文
  18. 代码优化- 前端优化
  19. 【报告分享】阿里研究院:2020中国淘宝村研究报告(附下载)
  20. 全局搜索软件Everything,安利一波呀

热门文章

  1. 小体积神器!这款不到500KB的电脑软件,功能也太赞了!
  2. 如何将 Pycharm 打造得更称手
  3. 阻止地图的放大和缩小_Arcgis画地图详细步骤(真的!!)
  4. 华硕xhci灰色_xHCI模式作怪无法使用USB设备?解决办法这里有!
  5. springboot异步注解_SpringBoot如何实现异步、定时任务?
  6. PyTorch基础-Tensor的属性,数据,运算-01
  7. css文字下滑,CSS3 文本下落渐变动效
  8. php中td的属性设置,html table表格是什么?table标签中各种属性的使用方法
  9. ubuntu下查看caj文件
  10. nacos mysql8.0修改