音视频入门/音视频基础_gop motion vector residual-程序员宅基地

技术标签: 音视频基础  音视频/直播  

直播产品的种类:

泛娱乐化直播:

       花椒,映客等娱乐直播, 斗鱼,熊猫,yy 等游戏直播

实时互动直播

音视频会议,教育直播等, 像思科,全时,声网

直播架构: todo

常用的工具: ffmpeg , ffplay, flashplayer,  

搭建流媒体服务:

准备流媒体服务器(Linux 或 Mac)

编译并安装Nginx 服务

配置RTMP 服务并启动 Nginx 服务

 

声音三要素

音调: 就是音频, 男生  >  女生  >  儿童

音量: 振动的幅度

音色: 它与材质有很大关系, 本质是谐波

音量与音调

图:v-9-声音三要素.jpeg 

 

音色(音品) : v-10-声音三要素.jpeg

 

 

人类的听觉范围: 20Hz —    20kHz

人类的发声范围: 85Hz ——  1100 Hz

 

听觉/发声范围: v-12-声音三要素.jpeg

 

音频量化过程:

模拟数据  —》  采样 —〉 量化 —》  编码 —〉 数字信号

 

量化基本概念:

采样大小: 一个采样用多少bit 存放。常用的是 16bit

采样率:    采样频率 8k, 16k, 32k, 44.1k   , 48k

声道数:   单声道, 双声道, 多声道

 

音频量化过程: v-13-音频量化.jpeg

 

 

码率计算:

要计算一个PCM音频流的 码率  公式如: 采样率 x 采样大小  x 声道数

例如: 采样率为44.KHz,  采样大小为 16bit, 双声道的PCM 编码的WAV 文件? 

它的码率为 44.1K x 16 x 2 = 1411.2 kb/s

音频压缩技术:

目的/手段是:消除冗余数据;

冗余数据包括: 人耳听觉范围外的音频信号,以及被掩蔽掉的音频 信号。

信号的掩蔽分为: 频域掩蔽  和 时域掩蔽

方法: 哈夫曼无损编码

频域掩蔽效应: v-18-音频压缩.jpeg

时域掩蔽效应: v-19-音频压缩.jpeg 

音频编码过程:

v-20-音频压缩.jpeg

 

常见的音频编码器

常见的音频编码器 包括 OPUS,   AAC,  Vorbis, Speex,  iLBC,  AMR, G.711 等。

网上评测结果:     OPUS   >  AAC   >  Vorbis

音频编码器性能对比:

v-22-音频编码器.jpeg

AAC介绍:

AAC( Advanced Audio Coding) 目的是取代MP3 格式;

 

目前常用的规格有:  

AAC  LC  (Low  Complexity) 

AAC   HE  V1  ( AAC  +  SBR 技术)

AAC   HE  V2( AAC + SBR技术 +  PS技术)

 

SBR (Spectral Band Replication)

PS( Parametric Stereo)

 

AAC 格式 有哪些?

ADIF ( Audio Data Interchange Format )   //这种格式只能从头开始解码,常用在磁盘文件中。

ADTS(Audio Data Transport Stream)        //这种格式每一帧都有一个同步字,可以在音频流的任何位置开始解码,它类似数据流格式

 

AAC 编码库那个好?

 

Libfdk_AAC  > ffmpeg AAC  > libfaac > libvo_aacenc

 

H264 基本概念

I 帧:  关键帧, 采用帧内压缩技术。

P 帧 :  向前参考帧, 压缩时只参考前一个帧, 属于帧间压缩技术。

B 帧 : 双向参考帧,压缩时既参考前一帧,也参考后一帧,帧间压缩技术。

GOF  : 一组帧的 结构 如图:v-29-视频.jpeg

SPS  与 PPS

SPS   Sequence Parameter Set , 序列参数集 ; 存放帧数,参考帧数目, 解码图像尺寸, 帧场编码模式选择标识等。

PPS   Picture Parameter Set, 图像参数集; 存放熵编码模式选择标识, 片组数组,初始量化参数,去方块滤波系数调整标识等。

 

视频花屏/卡顿 原因

如果 GOP分组中的P 帧 丢失会造成解码端的图像发生错误。

为了避免花屏问题的发生,一般如果发现P帧 或者I帧 丢失,就不显示本 GOP内的所有帧, 直到下一个 I 帧来后重新刷新图像。

 

视频都有哪些视频编码器?

x264/x265

openH264

vp8/vp9

 

H264压缩技术

帧内预测压缩,解决的是 空域数据冗余 问题 

帧间预测压缩, 解决的是  时域数据 冗余问题

整数离散余弦变换(DCT);

CABAC压缩。

运动矢量 与补偿压缩;  Motion Vector  + Residual Picture

 

预测模式与残差值压缩:

Prediction  Mode  Info  + Residual  Picture

图: v-40-视频.jpeg 

图 : v-41-视频.jpeg

 

 

DCT 压缩:

图: v-42-视频.jpeg

图: v-43-视频.jpeg

VLC压缩, 和 CABAC 压缩

 

H264结构图:

v-45-h264.jpeg

 

H264编码分层:

NAL层:

Network Abstraction Layer, 视频数据网络抽象层

VCL 层:

Video Coding  Layer, 视频数据编码层。

码流基本概念:

SODB  (String Of  Data  Bits;) 原始数据比特流,长度不一定是 8的倍数,它是由VCL层产生的。

RBSP ( Raw Byte Sequence Payload, SODB + trailing bits)  算法是在SODB最后一位补1, 不按字节对齐则补0

EBSP ( Encapsulate  Byte  Sequence Payload);  需要两个连续的0x00  就增加一个0x03

NALU   :  NAL  Header   + EBSP

 

NAL Unit  (简称 NALU): 

包括: NALU头部  + 一个切片

切片 包括  切片头(slice header) + 切片数据(slice data)

切片数据由 很多 MacroBlock (宏块) 组成 ;

MB (MacroBlock) 由 mb_type;  mb_pred;  coded residual  组成

一帧图片 使用 H. 264编码器编码 ,可能可以有多张切片 分出来。

H264码流分层  图 

NAL Header (NALU 头部)

F:  0  // 在 H.264规范中规定了这一位必须为0

NRI :  // 占2位, 指示重要性,暂无用。

Type :   //占5位,这个NALU 单元的类型。 

5   //I 帧,IDR 图像的片

7  //   序列参数集

8  //   图像参数集

 

24   // STAP-A   单一时间的组合包

25   //STAP-B 单一时间的组合包

26 //MTAP16   多个时间的组合包

27 //MTAP24   多个时间的组合包

 

28   //FU-A    ; 分片的单元

29   // FU-B   ; 分片的单元

NAL 类型介绍

单一类型   //一个RTP包  只包含  一个  NALU

组合类型   //一个RTP包   包含多个NALU,   类型是24-27

分片类型   //一个NALU 单元分成多个RTP包,类型是 28和 29

 

单一NALU的RTP包

图:v-57-nal.jpeg

组合NALU的RTP包

图:v-58-nal.jpeg

分片NALU 的  RTP包

图: v-59-nal.jpeg

FU Header  (占一个字节)

S   // start bit, 用于指明分片的开始

E   // end bit, 用于指明分片的结束

R   //0   ; 未使用

Type    //指明  NAL 类型

 

YUV

YUV  也称为  YCbCr :  是电视系统所采用的一种颜色编码方法

Y 表示明亮度/  灰阶值, 它是基础信号。

U 和 V 表示的则是 色度 ,UV的作用 是描述 影像色彩及饱和度,他们用于指定像素的颜色。

 

YUV 常见格式:

YUV4:2:0 (YCbCr  4:2:0)

YUV4:2:2 ( YCbCr  4:2:2)

YUV4:4:4 ( YCbCr  4:4:4)

 

YUV4:2:0

并不意味着只有  Y, Cb 两个分量,没有Cr分量。 它实际上指的是 对每行扫描线来说,只有一种色度分量,它以2:1 的抽样率存储

相邻的扫描行存储不同的色度分量,也就是说,如果一行是 4:2:0, 下一行就是4:0:2, 再下一行是4:2:0  。。。以此类推。

 

YUV存储格式

planar(平面)

I420  :  YYYYYYYY  UU  VV  => YUV420P

YV12 :  YYYYYYYY  VV   UU => YUV420P

 

Packed(打包)

NV12 :  YYYYYYYY   UVUV  => YUV420SP

NV21 :  YYYYYYYY   VUVU  => YUV420SP

称为专业的音频工程师还要学习啥?

音/视频采集;  音/视频硬件 编/解码;  FFMPEG;

视频渲染与 OpenGL  ;   x264 优化;  交叉编译与优化;

WebRTC;  

行业痛点?

视频秒开;  回音消除;  音频降噪; 视频出现花屏/卡顿/绿边;  手机发烫;  音视频同步;

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013862108/article/details/87866471

智能推荐

Linux查看登录用户日志_怎么记录linux设备 发声的登录和登出-程序员宅基地

文章浏览阅读8.6k次。一、Linux记录用户登录信息文件1  /var/run/utmp----记录当前正在登录系统的用户信息;2  /var/log/wtmp----记录当前正在登录和历史登录系统的用户信息;3  /var/log/btmp:记录失败的登录尝试信息。二、命令用法1.命令last,lastb---show a listing of la_怎么记录linux设备 发声的登录和登出

第四章笔记:遍历--算法学中的万能钥匙-程序员宅基地

文章浏览阅读167次。摘要:1. 简介 2. 公园迷宫漫步 3. 无线迷宫与最短(不加权)路径问题 4. 强连通分量1. 简介在计算机科学裡,树的遍历(也称为树的搜索)是圖的遍歷的一种,指的是按照某种规则,不重复地访问某种樹的所有节点的过程。具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。两种著名的基本遍历策略:深度优先搜索(DFS) 和 广度优先搜索(B...

【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表_activereports.net 实现查询报表功能-程序员宅基地

文章浏览阅读591次。提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表。今天我们来一起了解一下什么是报表,报表的结构、构成元素,以及为什么需要报表。什么是报表简单的说:报表就是通过表格、图表等形式来动态显示数据,并为使用者提供浏览、打印、导出和分析的功能,可以用公式表示为:报表 = 多样的布局 + 动态的数据 + 丰富的输出报表通常包含以下组成部分:报表首页:在报表的开..._activereports.net 实现查询报表功能

Ubuntu18.04 + GNOME xrdp + Docker + GUI_docker xrdp ubuntu-程序员宅基地

文章浏览阅读6.6k次。最近实验室需要用Cadence,这个软件的安装非常麻烦,每一次配置都要几个小时,因此打算把Cadence装进Docker。但是Cadence运行时需要GUI,要对Docker进行一些配置。我们实验室的服务器运行的是Ubuntu18.04,默认桌面GNOME,Cadence装进Centos的Docker。安装Ubuntu18.04服务器上安装Ubuntu18.04的教程非常多,在此不赘述了安装..._docker xrdp ubuntu

iOS AVFoundation实现相机功能_ios avcapturestillimageoutput 兼容性 ios17 崩溃-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏2次。首先导入头文件#import 导入头文件后创建几个相机必须实现的对象 /** * AVCaptureSession对象来执行输入设备和输出设备之间的数据传递 */ @property (nonatomic, strong) AVCaptureSession* session; /** * 输入设备 */_ios avcapturestillimageoutput 兼容性 ios17 崩溃

Oracle动态性能视图--v$sysstat_oracle v$sysstat视图-程序员宅基地

文章浏览阅读982次。按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。 类似于v$sesstat,该视图存储下列的统计信息:1>.事件发生次数的统计(如:user commits)2>._oracle v$sysstat视图

随便推点

Vue router报错:NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated"}的解决方法_navigationduplicated {_name: 'navigationduplicated-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏9次。我最近做SPA项目开发动态树的时候一直遇到以下错误:当我点击文章管理需要跳转路径时一直报NavigationDuplicated {_name: “NavigationDuplicated”, name: “NavigationDuplicated”}这个错误但是当我点击文章管理后,路径跳转却是成功的<template> <div> 文章管理页面 <..._navigationduplicated {_name: 'navigationduplicated', name: 'navigationduplic

Webrtc回声消除模式(Aecm)屏蔽舒适噪音(CNG)_webrtc aecm 杂音-程序员宅基地

文章浏览阅读3.9k次。版本VoiceEngine 4.1.0舒适噪音生成(comfort noise generator,CNG)是一个在通话过程中出现短暂静音时用来为电话通信产生背景噪声的程序。#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)static const EcModes kDefaultEcMode = kEcAecm;#elsestati..._webrtc aecm 杂音

医学成像原理与图像处理一:概论_医学成像与图像处理技术知识点总结-程序员宅基地

文章浏览阅读6.3k次,点赞9次,收藏19次。医学成像原理与图像处理一:概论引言:本系列博客为医学成像原理与图像处理重要笔记,由于是手写,在此通过扫描录入以图片的形式和电子版增补内容将其进行组织和共享。前半部分内容为图像处理基础内容,包括图像的灰度级处理、空间域滤波、频率域滤波、图像增强和分割等;后半部分内容为医学影象技术,包括常规胶片X光机、CR、DR、CT、DSA等X射线摄影技术、超声成像技术、磁共振成像(MRI)技术等。本篇主要内容是概论。_医学成像与图像处理技术知识点总结

notepad++ v8.5.3 安装插件,安装失败怎么处理?下载进度为0怎么处理?_nodepa++-程序员宅基地

文章浏览阅读591次,点赞13次,收藏10次。notepad++ v8.5.3 安装插件,下载进度为0_nodepa++

hive某个字段中包括\n(和换行符冲突)_hive sql \n-程序员宅基地

文章浏览阅读2.1w次。用spark执行SQL保存到Hive中: hiveContext.sql(&quot;insert overwrite table test select * from aaa&quot;)执行完成,没报错,但是核对结果的时候,发现有几笔数据超出指定范围(实际只包含100/200)最终排查到是ret_pay_remark 字段包含换行符,解决方案:执行SQL中把特殊字符替换掉regexp_replace(..._hive sql \n

印象笔记05:如何打造更美的印象笔记超级笔记_好的印象笔记怎么做的-程序员宅基地

文章浏览阅读520次,点赞10次,收藏8次。印象笔记05:如何打造更美的印象笔记超级笔记本文介绍印象笔记的具体使用,如何打造更美更实用的笔记。首先想要笔记更加好看和实用,我认为要使用超级笔记。所谓超级笔记就是具有很多便捷功能的笔记。_好的印象笔记怎么做的

推荐文章

热门文章

相关标签