本文作者 Ahab,原题“视频相干的理论知识与根底概念”,收录时有订正和改变。
1、引言
随着挪动互联网的遍及,实时音视频技术曾经在越来越多的场景下施展重要作用,曾经不再局限于 IM 中的实时视频聊天、实时视频会议这种性能,在近程医疗、远程教育、智能家居等等场景也司空见惯。
尽管实时音视频技术的利用越来越遍及,但对于程序员来说,这方面的技术门槛依然存在(筹备地说是依然很高),想要在短时间内全面把握实时音视频相干的技术难度十分大。
以 IM 中的实时音视频聊天为例,一个简化了的视频聊天技术,实质就是:音视频技术 + 网络技术的组合体,如下图所示:网络模块之上的局部,就是音视频技术所波及的领域。
▲ 图片援用自《微信小程序音视频技术背地的故事》
所以,想学习实时音视频开发,个别都是先学习音视频相干的技术常识,至于网络技术,齐全能够离开学习。
不过,作为想从事这方面工作的小白面视者,是无奈在短时间内全面把握音视频技术,但能够通过疾速理解相干的常识概念,在自已在脑中疾速组织起相应的常识图谱,有助于日后针对相干知识点一一深刻学习和钻研,也算是一种高效的技术学习办法。
本文将通过艰深的文字,长篇累牍地为你解说实时音视频技术中跟视频技术在关的 11 个十分重要的基础知识概念,心愿能为你日后从事这方面的工作起到抛砖引玉的作用。
学习交换:
- 即时通讯 / 推送技术开发交换 5 群:215477170 [举荐]
- 挪动端 IM 开发入门文章:《新手入门一篇就够:从零开发挪动端 IM》
- 开源 IM 框架源码:https://github.com/JackJiang2011/MobileIMSDK
(本文同步公布于:http://www.52im.net/thread-3194-1-1.html)
2、对于作者
王英豪:现居广州。
Github : https://github.com/yhaolpz
CSDN: http://blog.csdn.net/yhaolpz
集体博客 : http://yhaowa.gitee.io
3、参考资料
[1] 零根底,史上最艰深视频编码技术入门
[2] 零根底入门:实时音视频技术基础知识全面盘点
[3] 了解实时音视频聊天中的延时问题一篇就够
4、什么是视频?
依据人眼视觉暂留原理,每秒超过 24 帧的图像变动看上去是平滑间断的,这样的间断画面的播放叫视频。
艰深来说说,视频相当于间断展现多张图片,原理就像上面这样:
▲ 图片援用自《零根底,史上最艰深视频编码技术入门》
5、什么是分辨率?
5.1 根底
分辨率是以横向和纵向的像素数量来掂量的,示意立体图像的精密水平。视频精密水平并不只取决于视频分辨率,还取决于屏幕分辨率。
1080P 的 P 指 Progressive scan(逐行扫描),即垂直方向像素点,也就是 “ 高 ”,所以 1920 * 1080 叫 1080P,不叫 1920P。
5.2 上采样
当 720P 的视频在 1080P 屏幕上播放时,须要将图像放大,放大操作也叫上采样。
“上采样”简直都是采纳内插值办法,即在原有图像的像素点之间采纳适合的插值算法插入新的元素,所以图像放大也称为图像插值。
简略的记录一下插值算法:
常见插值算法技术原理:
- 1)邻插值算法:将四个像素(放大一倍)用原图一个像素的色彩填充,较简略易实现,晚期的时候利用比拟广泛,但会产生显著的锯齿边缘和马赛克景象;
- 2)双线性插值法:是对邻插值法的一种改良,先对两程度方向进行一阶线性插值,再在垂直方向上进行一阶线性插值。能无效地补救邻插值算法的有余,但还存在锯齿景象并会导致一些不冀望的细节柔化;
- 3)双三次插值法:是对双线性插值法的改良,它不仅思考到四周四个间接相邻像素点灰度值的影响,还思考到它们灰度值变化率的影响,使插值生成的像素灰度值连续原图像灰度变动的连续性,从而使放大图像浓淡变动天然平滑。
除此之外还有很多更简单成果更优的算法,比方小波插值、分形等等。
5.3 下采样
当 1080P 的视频在 720P 屏幕上播放时,须要将图像放大,放大操作也叫下采样。
“下采样”的定义为: 对于一个样值序列,距离几个样值取样一次,失去新序列。
对于一幅分辨率为 MxN 的图像,对其进行 s 倍下采样,即失去 (M/s)x(N/s) 分辨率的图像(s 应为 M、N 的公约数),就是把原始图像 sxs 窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值。
最佳体验为屏幕与视频分辨率雷同且全屏播放,视频分辨率过高的话屏幕没有能力去出现,视频分辨率过低的话无奈施展屏幕的能力。
6、什么是比特率?
6.1 根底
比特率即码率,在不同畛域有不同的含意,在多媒体畛域,指单位工夫播放音频或视频的比特数,能够了解成吞吐量或带宽。
单位为 bps , 即 bits per second,每秒传输的数据量,罕用单位有:kbps、mbps 等。
计算公式:码率(kbps)= 文件大小(kb)/ 时长(s)
艰深一点了解就是取样率,取样率越大,精度就越高,图像品质越好,但数据量也越大,所以要找到一个平衡点:用最低的比特率达到起码的失真。
在一个视频中,不同时段画面的复杂程度是不同的,比方高速变动的场景和简直静止的场景,所需的数据量也是不同的,若都应用同一种比特率是不太正当的,所以引入了动静比特率。
6.2 动静比特率
简称为 VBR,即 Variable Bit Rate,比特率能够随着图像复杂程度的不同而随之变动。
图像内容简略的片段采纳较小的码率,图像内容简单的片段采纳较大的码率,这样既保证了播放品质,又兼顾了数据量的限度。
比方 RMVB 视频文件,其中的 VB 就是指 VBR,示意采纳动静比特率编码方式,达到播放品质与体积兼得的成果。
6.3 动态比特率
简称为 CBR,即 Constant Bit Rate,比特率恒定。
图像内容简单的片段品质不稳固,图像内容简略的片段品质较好。下面列出的计算公式显然是针对 CBR,除 VBR 和 CBR 外,还有 CVBR(Constrained VariableBit Rate)、ABR (Average Bit Rate) 等等。
7、什么是采样率?
定义: 每秒从间断信号中提取并组成离散信号的采样个数,单位为赫兹(Hz)。对于取样率、采样率和抽样率,没必要纠结它们的区别,都是同义词。
视频个别不标识采样率属性,比方:
采样率自身就是一个可泛化的概念,对于视频来说,若非要用采样率来形容的话,那就要分为两个层面:帧频和场频。
- 1)从帧频层面来说:采样率就是指帧率,指 1 秒钟显示多少帧图像;
- 2)从场频层面来说:采样率就是指像素频率,指 1 秒钟显示多少个像素。
像素频率是显示器的一个指标,能够了解成显示器的最大带宽,能够起到限度分辨率和刷新率的作用。
依据含意可得出一个公式:
像素频率 = 帧率 X 帧像素数量
对于:
_帧率 = 138.5 x 1024 x 1024 / 1920 / 1080 ≈ 70.04_,得出的 70Hz 为失常的帧率范畴,也能够反向确定对像素频率的了解是正确的。
8、什么是帧率?
定义: 用于测量显示帧数的量度。单位为 FPS(Frames per Second,每秒显示帧数)或赫兹(Hz)。
帧率越高,画面越晦涩、真切,对显卡的解决能力要求越高,数据量越大。
文章结尾,咱们提到每秒超过 24 帧的图像变动看上去是平滑间断的,这是针对电影等视频而言,对游戏来说 24 帧不肯定就是晦涩的。
为什么 24fps 的电影感觉晦涩,而 24fps 的游戏就感觉很卡呢?
第一个起因:两者图像生成原理不同
电影的一帧在一段时间曝光,每一帧都蕴含一段时间的信息,而游戏的画面则是由显卡计算生成的,一帧只蕴含那一瞬间的信息。
比方一个圆从左上角挪动到右下角:
前者为电影的一帧,后者为游戏的一帧,能够看到在电影中动作会呈现拖影,给人以动感的成果,连贯而不卡。
第二个起因:电影的 FPS 是稳固的,而游戏则是不稳固的
电影若为 24fps,那就示意每隔 1/24 秒刷新一次画面,帧距离是固定的。
游戏若为 60fps,示意大概每隔 1/60 秒刷新一次画面,帧距离是不稳固的,即便 1 秒能显示 60 帧,那也可能是前半秒显示了 59 帧,后半秒显示了 1 帧。
9、什么是视频编码?
9.1 根底
定义:通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式。视频数据在时域和空域层面都有极强的相关性,这也示意有大量的「时域冗余信息」和「空域冗余信息」,压缩技术就是去掉数据中的冗余信息。
9.2 无损压缩
无损压缩也称为可逆编码,重构后的数据与原数据完全相同,实用于磁盘文件的压缩等。无损压缩次要采纳熵编码方式,包含香农编码、哈夫曼编码和算术编码等。
9.2.1)香农编码:
香农编码采纳信源符号的累计概率分布函数来调配码字,效率不高,实用性不大,但对其余编码方法有很好的实践指导意义。
9.2.2)哈夫曼编码:
哈夫曼编码齐全根据呈现概率来结构异字头的均匀长度最短的码字。
根本办法为: 先对图像数据扫描一遍,计算出各种像素呈现的概率,按概率的大小指定不同长度的惟一码字,由此失去一张该图像的霍夫曼码表。
编码后的图像数据记录的是每个像素的码字,而码字与理论像素值的对应关系记录在码表中。
9.2.3)算术编码:
算术编码是用符号的概率和编码距离两个基本参数来形容的,在给定符号集和符号概率的状况下,算术编码能够给出靠近最优的编码后果。
应用算术编码的压缩算法通常先要对输出符号的概率进行预计,而后再编码,预计越准,编码后果就越靠近最优的后果。
9.3 有损压缩
有损压缩也称为不可逆编码,重构后的数据与原数据有差别,实用于任何容许有失真的场景,例如视频会议、可视电话、视频播送、视频监控等。
编码方式包含预测编码、变换编码、量化编码、混合编码等。
10、什么是编码标准?
10.1 根底
定义: 为保障编码的正确性,编码要规范化、标准化,所以就有了编码标准。
研制视频编码标准的有两大正式组织:
1)ISO/IEC(国际标准化组织);
2)ITU-T(国际电信联盟通信规范部)。
ISO/IEC 制订的编码标准有:MPEG-1、MPEG-2、MPEG-4、MPEG-7、MPEG-21 和 MPEG-H 等。
ITU-T 制订的编码标准有:H.261、H.262、H.263、H.264 和 H.265 等。
MPEG-x 和 H.26x 规范的视频编码都是采纳有损压缩的混合编码方式,次要区别在于解决图像的分辨率、预测精度、搜寻范畴、量化步长等参数的不同,所以其利用场合也不同。
10.2 MPEG-x 系列
10.2.1)MPEG-1:
MPEG-1 共 5 局部。
第 2 局部视频编码方案,规定了逐行扫描视频的编码方案。
第 3 局部音频编码方案,将音频流的压缩分为 3 层并顺次增大压缩比,广为流传的 MP3(MPEG-1 Layer 3)就是依照此局部编码方案压缩之后的文件格式。
10.2.__2)MPEG-2:
MPEG-2 共 11 个局部,在 MPEG-1 的根底上进步了码率和品质。
第 2 局部视频编码方案,规定了隔行扫描视频的编码方案,是和 ITU-T 共同开发的,ITU-T 称其为 H.262。
第 3 局部音频编码方案,连续了 MPEG-1 的 3 层压缩计划,压缩后文件格式仍为 MP3,但在压缩算法上有所改进。
第 7 局部首次提出 AAC(MPEG Advanced Audio Coding)编码,目标以更小的容量和更好的音质取代 MP3 格局。
10.2.__3)MPEG-4:
MPEG-4 共 27 个局部,更加重视多媒体系统的交互性和灵活性。
第 3 局部音频编码方案,优化了 AAC 编码算法,并在推出后逐步取代 MP3,比方和视频封装在一起的音频优先思考 AAC 格局,但就民用而言大部分还是应用 MP3 格局。
第 10 局部提出 AVC(Advanced Video Coding)编码,是和 ITU-T 共同开发的,ITU-T 称其为 H.264。
第 14 局部提出了 MP4 格局封装,官网文件后缀名是 “.mp4″,还有其余的以 mp4 为根底进行的扩大或缩水版本的格局,包含:M4V, 3GP, F4V 等。
10.2.__4)MPEG-7:
MPEG-7 不同于 MPEG-1、MPEG-2、MPEG-4,它不是音视频压缩规范。
MPEG-7 被称为 “ 多媒体内容形容接口 ”,目标就是产生一种形容多媒体信息的规范,并将该形容与所形容的内容相分割,以实现疾速无效的检索。
10.2.__5)MPEG-12:
MPEG-12 其实就是一些关键技术的集成,通过这种集成环境对寰球数字媒体资源进行治理,实现内容形容、创立、公布、应用、辨认、免费治理、版权保护等性能。
10.2.__6)MPEG-H:
MPEG-H 蕴含了 1 个数字容器规范、1 个视频压缩规范、1 个音频压缩规范和 2 个一致性测试规范。
其中视频压缩规范为高效率视频编码(HEVC),和 ITU-T 联合开发,相比 H.264/MPEG-4 AVC 数据压缩率减少了 1 倍。
10.3 H.26x 系列
10.3.1)H.261:
H.261 是第一个实用的数字视频编码标准,应用了混合编码框架,包含了基于静止弥补的帧间预测,基于离散余弦变换的空域变换编码,量化,zig-zag 扫描和熵编码。
H.261 的设计相当胜利,之后的视频编码国际标准基本上都是基于 H.261 的设计框架,包含 MPEG-1,MPEG-2/H.262,H.263,甚至 H.264。
10.3.__2)H.262:
H.262 由 MPEG-1 裁减而来,反对隔行扫描,在技术内容上和 MPEG-2 视频规范统一,DVD 就是采纳了该技术。
10.3.__3)H.263:
H.263 是一种用于视频会议的低码率视频编码标准,在 H.261 根底上倒退而来。
与 H.261 相比采纳了半象素的静止弥补,并减少了 4 种无效的压缩编码模式,在低码率下可能提供比 H.261 更好的图像成果。
H.263 于 1995 年推出第一版,后续在 1998 年和 2000 年还推出了第二版 H.263+、第三版 H.263++。
10.3.__4)H.264:
H.264 又称为 MPEG-4 第 10 局部,即 MPEG-4 AVC,它是一种面向块,基于静止弥补的视频编码标准。
于 2003 年正式公布,当初曾经成为高精度视频录制、压缩和公布的最罕用格局之一。
H.264 能够在低码率状况下提供高质量的视频图像,相比 H.263 可节俭 50% 的码率。
相比 H.263,H.264 不需设置较多的编码选项,升高了编码的复杂度。
H.264 能够依据不同的环境应用不同的传输和播放速率,并且提供了丰盛的错误处理工具,能够很好的管制或打消丢包和误码。
H.264 性能的改良是以减少复杂性为代价而取得的,H.264 编码的计算复杂度大概相当于 H.263 的 3 倍,解码复杂度大概相当于 H.263 的 2 倍。
H.264 协定中定义了三种帧,别离为 I 帧、P 帧以及 B 帧:
- 1)I 帧:I 帧即帧内编码帧、关键帧,能够了解为一帧画面的残缺保留,解码时只须要本帧数据就能够实现,不须要参考其余画面,数据量比拟大;
- 2)P 帧:P 帧即前向预测编码帧,记录以后帧跟上一关键帧(或 P 帧)的差异,解码时依赖之前缓存的画面,叠加上本帧定义的差异,能力生成最终画面,数据量较 I 帧小很多;
- 3)B 帧:B 帧即双向预测编码帧,记录以后帧跟前后帧的差异,解码时依赖后面的 I 帧(或 P 帧)和前面的 P 帧,数据量比 I 帧和 P 帧小很多。
数据压缩比大概为:I 帧:P 帧:B 帧 = 7:20:50,可见 P 帧和 B 帧极大的节俭了数据量,节俭进去的空间能够用来多保留一些 I 帧,以实现在雷同码率下,提供更好的画质。
10.3.__5)H.265:
H.265 即高效视频编码(High Efficiency Video Coding,简称 HEVC),于 2013 年正式推出。
H.265 编码架构和 H.264 类似,次要也蕴含,帧内预测、帧间预测、转换、量化、去区块滤波器、熵编码等模块。
H.265 编码架构整体被分为编码单位、预测单位和转换单位。
H.265 在 H.264 的根底之上,应用先进的技术用以改善码流、编码品质、延时和算法复杂度之间的关系,达到最优化设置。
在码率缩小 51-74% 的状况下,H.265 编码视频的品质还能与 H.264 编码视频近似甚至更好。
H.265 能够在无限带宽下传输更高质量的网络视频,智能手机、平板机等挪动设施将能间接在线播放 1080p 的全高清视频,让网络视频跟上了显示屏“高分辨率化”的脚步。
来张图感受一下吧:
除 MPEG-x 和 H.26x 系列规范外,还有其余的编码标准,如谷歌的 VP 系列,对视频编码标准演绎一下,如图:
11、什么是视频封装格局?
视频封装格局如 mp4、mkv,用来存储或传输编码数据,能够了解成一个容器。
封装就是依照肯定规定把音视频、字幕等数据组织起来,蕴含编码类型等公共信息,播放器能够依照这些信息来匹配解码器、同步音视频。
不同的封装格局反对的视音频编码格局是不一样的,比方 MKV 格局反对比拟多,RMVB 则次要反对 Real 公司的视音频编码格局。
WiKi 百科上列出了常见的视频封装格局,能够查看各封装格局反对的音视频编码格局等信息。
12、什么是视频解码?
定义: 将视频压缩编码过的数据,解压缩成为视频原始数据,即视频编码的反过程。
对于一个播放器来说,很重要的一个指标就是能反对多少种视频解码。
13、视频播放原理是什么?
播放一个本地视频文件,须要通过解封装、解码音视频、音视频同步等步骤。
解封装: 就是将输出的封装格局的数据,拆散成为音频压缩编码数据和视频压缩编码数据。例如,FLV 格局的数据,通过解封装操作后,输入 H.264 编码的视频码流和 AAC 编码的音频码流。
解码: 将视频 / 音频压缩编码数据,解码成为非压缩的视频 / 音频原始数据。
音频的压缩编码标准蕴含 AAC,MP3,AC-3 等等,视频的压缩编码标准则蕴含 H.264,MPEG2,VC-1 等等。
解码是整个零碎中最重要也是最简单的一个环节。
通过解码,压缩编码的视频数据输入成为非压缩的色彩数据,例如 YUV420P,RGB 等等;压缩编码的音频数据输入成为非压缩的音频抽样数据,例如 PCM 数据。
音视频同步: 依据解封装模块处理过程中获取到的参数信息,同步解码进去的视频和音频数据,并将视频音频数据送至零碎的显卡和声卡播放进去。
14、实时音视频中音视频与网络的关系是什么?
以下是一个典型的实时音视频数据的具体流转原理图:
▲ 图片援用自《微信小程序音视频技术背地的故事》
如上图所示,相较于一般的音视频本地播放,实时音视频技术多了一个网络传输的步骤,换句话说:实时音视频技术 = 音视频技术 + 网络技术。
因为篇幅受限,本篇就不对具体的技术细节展开讨论,感兴趣的读者,能够持续深刻浏览即时通讯网收录的《实时音视频开发技术专辑》。
15、深刻学习
如果你是初学者,还想以通俗易懂的形式理解实时音视频技术,能够持续浏览以下文章:
《即时通讯音视频开发(十九):零根底,史上最艰深视频编码技术入门》(* 强烈推荐)
《零根底入门:实时音视频技术基础知识全面盘点》
如果你想零碎业余的学习实时音视频技术,那么务必浏览以下文章:
《即时通讯音视频开发(一):视频编解码之实践概述》
《即时通讯音视频开发(二):视频编解码之数字视频介绍》
《即时通讯音视频开发(三):视频编解码之编码根底》
《即时通讯音视频开发(四):视频编解码之预测技术介绍》
《即时通讯音视频开发(五):意识支流视频编码技术 H.264》
《即时通讯音视频开发(六):如何开始音频编解码技术的学习》
《即时通讯音视频开发(七):音频根底及编码原理入门》
《即时通讯音视频开发(八):常见的实时语音通信编码标准》
《即时通讯音视频开发(九):实时语音通信的回音及回音打消概述》
《即时通讯音视频开发(十):实时语音通信的回音打消技术详解》
《即时通讯音视频开发(十一):实时语音通信丢包弥补技术详解》
《即时通讯音视频开发(十二):多人实时音视频聊天架构探讨》
《即时通讯音视频开发(十三):实时视频编码 H.264 的特点与劣势》
《即时通讯音视频开发(十四):实时音视频数据传输协定介绍》
《即时通讯音视频开发(十五):聊聊 P2P 与实时音视频的利用状况》
《即时通讯音视频开发(十六):挪动端实时音视频开发的几个倡议》
《即时通讯音视频开发(十七):视频编码 H.264、VP8 的前世今生》
《即时通讯音视频开发(十八):详解音频编解码的原理、演进和利用选型》
《实时语音聊天中的音频解决与编码压缩技术简述》
《网易视频云技术分享:音频解决与压缩技术疾速入门》
《学习 RFC3550:RTP/RTCP 实时传输协定基础知识》
《基于 RTMP 数据传输协定的实时流媒体技术钻研(论文全文)》
《声网架构师谈实时音视频云的实现难点 (视频采访)》
《浅谈开发实时视频直播平台的技术要点》
《还在靠“喂喂喂”测试实时语音通话质量?本文教你迷信的评测办法!》
《实现提早低于 500 毫秒的 1080P 实时音视频直播的实际分享》
《挪动端实时视频直播技术实际:如何做到实时秒开、晦涩不卡》
《如何用最简略的办法测试你的实时音视频计划》
《技术揭秘:反对百万级粉丝互动的 Facebook 实时视频直播》
《简述实时音视频聊天中端到端加密(E2EE)的工作原理》
《挪动端实时音视频直播技术详解(一):开篇》
《挪动端实时音视频直播技术详解(二):采集》
《挪动端实时音视频直播技术详解(三):解决》
《挪动端实时音视频直播技术详解(四):编码和封装》
《挪动端实时音视频直播技术详解(五):推流和传输》
《挪动端实时音视频直播技术详解(六):提早优化》
《实践联系实际:实现一个简略地基于 HTML5 的实时视频直播》
《IM 实时音视频聊天时的回声打消技术详解》
《浅谈实时音视频直播中间接影响用户体验的几项要害技术指标》
《如何优化传输机制来实现实时音视频的超低提早?》
《首次披露:快手是如何做到百万观众同场看直播仍能秒开且不卡顿的?》
《Android 直播入门实际:入手搭建一套简略的直播零碎》
《网易云信实时视频直播在 TCP 数据传输层的一些优化思路》
《实时音视频聊天技术分享:面向不牢靠网络的抗丢包编解码器》
《P2P 技术如何将实时视频直播带宽升高 75%?》
《专访微信视频技术负责人:微信实时视频聊天技术的演进》
《腾讯音视频实验室:应用 AI 黑科技实现超低码率的高清实时视频聊天》
《微信团队分享:微信每日亿次实时音视频聊天背地的技术解密》
《近期大热的实时直播答题零碎的实现思路与技术难点分享》
《福利贴:最全实时音视频开发要用到的开源工程汇总》
《七牛云技术分享:应用 QUIC 协定实现实时视频直播 0 卡顿!》
《实时音视频聊天中超低提早架构的思考与技术实际》
《了解实时音视频聊天中的延时问题一篇就够》
《实时视频直播客户端技术盘点:Native、HTML5、WebRTC、微信小程序》
《写给小白的实时音视频技术入门提纲》
《微信多媒体团队访谈:音视频开发的学习、微信的音视频技术和挑战等》
《腾讯技术分享:微信小程序音视频技术背地的故事》
《微信多媒体团队梁俊斌访谈:聊一聊我所理解的音视频技术》
《新浪微博技术分享:微博短视频服务的优化实际之路》
《实时音频的混音在视频直播利用中的技术原理和实际总结》
《以网游服务端的网络接入层设计为例,了解实时通信的技术挑战》
《腾讯技术分享:微信小程序音视频与 WebRTC 互通的技术思路和实际》
《新浪微博技术分享:微博实时直播答题的百万高并发架构实际》
《技术干货:实时视频直播首屏耗时 400ms 内的优化实际》
《爱奇艺技术分享:轻松滑稽,解说视频编解码技术的过来、当初和未来》
本文已同步公布于“即时通讯技术圈”公众号:
▲ 本文在公众号上的链接是:点此进入,原文链接是:http://www.52im.net/thread-3194-1-1.html