(强烈推荐)移动端音视频从零到上手

本文介绍了移动端音视频从零开始的开发流程,包括采集、处理、编码、封装和传输。通过理论与实践相结合,讲解了音视频的推流、拉流过程,以及iOS和Android平台的实现细节。此外,还探讨了音视频编码的基本原理,如运动估计、运动补偿,以及常见的视频编码器。最后,提到了RTMP协议在传输中的应用,以及音视频同步播放的策略。
摘要由CSDN通过智能技术生成

概述

随着整个互联网的崛起,数据传递的形式也在不断升级变化,总的流行趋势如下:

纯文本的短信,QQ -> 空间,微博,朋友圈的图片文字结合 -> 微信语音 -> 各大直播软件 -> 抖音快手短视频

音视频的发展正在向各个行业不断扩展,从教育的远程授课,交通的人脸识别,医疗的远程就医等等,音视频方向已经占据一个相当重要的位置,而音视频真正入门的文章又少之甚少,一个刚毕业小白可能很难切入理解,因为音视频中涉及大量理论知识,而代码的书写需要结合这些理论,所以搞懂音视频,编解码等理论知识至关重要.本人也是从实习开始接触音视频项目,看过很多人的文章,在这里总结一个通俗易懂的文章,让更多准备学习音视频的同学更快入门。

划重点

本文中理论知识来自于各种音视频文章的归纳音视频编码基本原理汇总,其中也会有一些我自己总结增加的部分.若有错误可评论,检查后会更正.

为了防止大家理解过于空洞,作者花了三个月时间将最常用,最重要的一些功能的理论知识及实战Demo亲自写出来,配合文章阅读效果更佳.每一部分的文章可以在下面每章章节开始的深入学习中点击链接查看, 链接中文章均有Github地址,每个Demo都亲测可以通过,可以下载Demo运行.

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

原理

  • 采集

    无论是iOS平台,还是安卓平台,我们都是需要借助官方的API实现一系列相关功能.首先我们要明白我们想要什么,最开始我们需要一部手机,智能手机中摄像头是不可缺少的一部分,所以我们通过一些系统API获取就要可以获取物理摄像头将采集到的视频数据与麦克风采集到的音频数据.

  • 处理

    音频和视频原始数据本质都是一大段数据,系统将其包装进自定义的结构体中,通常都以回调函数形式提供给我们,拿到音视频数据后,可以根据各自项目需求做一系列特殊处理,如: 视频的旋转,缩放,滤镜,美颜,裁剪等等功能, 音频的单声道降噪,消除回声,静音等等功能.

  • 编码

    原始数据做完自定义处理后就可以进行传输,像直播这样的功能就是把采集好的视频数据发送给服务器,以在网页端供所有粉丝观看,而传输由于本身就是基于网络环境,庞大的原始数据就必须压缩后才能带走,可以理解为我们搬家要将物品都打包到行李箱这样理解.

  • 传输

    编码后的音视频数据通常以RTMP协议进行传输,这是一种专门用于传输音视频的协议,因为各种各样的视频数据格式无法统一,所以需要有一个标准作为传输的规则.协议就起到这样的作用.

  • 解码

    服务端接收到我们送过去的编码数据后,需要对其解码成原始数据,因为编码的数据直接送给物理硬件的设备是不能直接播放的,只有解码为原始数据才能使用.

  • 音视频同步

    解码后的每帧音视频中都含有最开始录制时候设置的时间戳,我们需要根据时间戳将它们正确的播放出来,但是在网络传输中可能会丢失一些数据,或者是延时获取,这时我们就需要一定的策略去实现音视频的同步,大体分为几种策略:缓存一定视频数据,视频追音频等等.

推流,拉流流程

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

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

推流如下:

 拉流如下:

具体剖析

推流,拉流实际为互逆过程,这里按照从采集开始介绍.

1. 采集

采集是推流的第一个环节,是原始的音视频数据的来源.采集的原始数据类型为音频数据PCM,视频数据YUV,RGB...。

1.1. 音频采集

  • 深入研究

  • 采集来源

    • 内置麦克风

    • 外置具有麦克风功能的设备(相机,话筒...)

    • 系统自带相册

  • 音频主要参数

    • 采样率(samplerate): 模拟信号数字化的过程,每秒钟采集的数据量,采样频率越高,数据量越大,音质越好。

    • 声道数(channels): 即单声道或双声道 (iPhone无法直接采集双声道,但可以模拟,即复制一份采集到的单声道数据.安卓部分机型可以)

    • 位宽: 每个采样点的大小,位数越多,表示越精细,音质越好,一般是8bit或16bit.

    • 数据格式: iOS端设备采集的原始数据为线性PCM类型音频数据

    • 其他: 还可以设置采样值的精度,每个数据包有几帧数据,每帧数据占多少字节等等.

  • 音频帧

    音频与视频不同,视频每一帧就是一张图片,音频是流式,本身没有明确的帧的概念,实际中为了方便,取2.5ms~60ms为单位的数据为一帧音频.

  • 计算

    数据量(字节 / 秒)=(采样频率(Hz)* 采样位数(bit)* 声道数)/ 8

    单声道的声道数为1,立体声的声道数为2. 字节B,1MB=1024KB = 1024*1024B

1.2. 视频采集

  • 深入研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值