A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区


Android福利——陈长远老师“直播”技术详解


直播的概念:
直播就是:由手机一端作为视频采集端,采集视频信息,通过网络实时传递到服务器,再由服务器推送到视频播放端的过程。

涉及概念:
推流端,采流端:主播一端
拉流端,播放端:观众一端

图示:


直播中涉及的专业词汇解析
为了了解视频的码率、帧率、分辨率。我们先来看看视频编码的基本原理:视频图像数据有极强的相关性,也就是说有大量的冗余信息。
压缩技术就是将数据中的冗余信息去掉(去除数据之间的相关性),压缩技术包含帧内图像数据压缩技术、帧间图像数据压缩技术和熵编码压缩技术。

视频压缩中的每一帧画面都有相似的地方,在压缩时只保留与前一帧不同的地方及将信号中部分感觉不出的分量压缩掉或“掩蔽掉”,即祛除冗余压缩.

#硬编码和软编码
硬编码:通过调用Android系统自带的Camera录制视频,实际上是调用了底层的高清编码硬件模块,也即显卡,不使用CPU,速度快
软编码:使用CPU进行编码,如常见C/C++代码,一般编译生成的二进制都是的,速度相对较慢。例如使用Android NDK编译H264生成so库,编写jni接口,再使用java调用so库。
视频文件一般涉及到三个参数:帧率、分辨率和码率。

帧率:
###每秒显示的图片数。影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,此现象称之为视觉暂留。并且当帧速达到一定数值后,再增长的话,人眼也不容易察觉到有明显的流畅度提升了。

分辨率:
(矩形)图片的长度和宽度,即图片的尺寸
   
码率:
把每秒显示的图片进行压缩后的数据量。影响体积,与体积成正比:码率越大,体积越大;码率越小,体积越小。(体积=码率×时间)  帧率X分辨率=压缩前的每秒数据量(单位应该是若干个字节)   压缩比=压缩前的每秒数据量/码率(对于同一个视频源并采用同一种视频编码算法,则:压缩比越高,画面质量越差。)

所谓“清晰”,是指画面十分细腻,没有马赛克。并不是分辨率越高图像就越清晰。  简单说:在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰。在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。  
   
但是,事实情况却不是这么简单。可以这么说:在码率一定的情况下,分辨率在一定范围内取值都将是清晰的;同样地,在分辨率一定的情况下,码率在一定范围内取值都将是清晰的。  在视频压缩的过程中, I帧是帧内图像数据压缩,是独立帧。而P帧则是参考I帧进行帧间图像数据压缩,不是独立帧。在压缩后的视频中绝大多数都是P帧,故视频质量主要由P帧表现出来。由于P帧不是独立帧,而只是保存了与邻近的I帧的差值,故实际上并不存在分辨率的概念,应该看成一个二进制差值序列。而该二进制序列在使用熵编码压缩技术时会使用量化参数进行有损压缩,视频的质量直接由量化参数决定,而量化参数会直接影响到压缩比和码率。  视频质量可以通过主观和客观方式来表现,主观方式就是通常人们提到的视频清晰度,而客观参数则是量化参数或者压缩比或者码率。在视频源一样,压缩算法也一样的前提下比较,量化参数,压缩比和码率之间是有直接的比例关系的。  分辨率的变化又称为重新采样。由高分辨率变成低分辨率称为下采样,由于采样前数据充足,只需要尽量保留更多的信息量,一般可以获得相对较好的结果。而由低分辨率变成高分辨率称为上采样,由于需要插值等方法来补充(猜测)缺少的像素点,故必然会带有失真,这就是一种视频质量(清晰度)的损失。

CDN:
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

RTMP协议:
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。
在RTMP协议中信令和媒体数据都称之为Message,在网络中传输这些Message,为了区分它们肯定是要加一个Message head的,所以RTMP协议也有一个Message head,还有一个问题因为RTMP协议是基于TCP的,由于TCP的包长度是有限制的(一般来说不超过1500个字节),而RTMP的Message长度是有可能很大的,像一个视频帧的包可能会有几十甚至几千K,这个问题就必然有一个分片的问题,在RTMP协议中对应的说法就是chunk,每一个Message + head都是由一个和多个chunk组成的。到这里对RTMP协议的概要理解就算完了。

直播推流端和播放端的处理逻辑

采集端(推流端)架构图示


播放端架构图示


给予开发者的建议:

若开发者欲进行直播开发,有如下两条方案可以采用:

1,自己独立开发
困难重重,需要学习的知识较多,学习成本高,坑较多,开发周期长.
需要学习的知识包含:
①OpenGL
②摄像头相关知识
③C语言
④JNI
⑤音视频开发相关知识

2,使用第三方sdk
开发容易,很快上手,但也存在缺点,服务器要采用第三方sdk提供的,技术受制于人,用户受制于人.

市面上采用的sdk:
1,金山:采用最新H.265编码
2,阿里云:
3,腾讯云:
4,AnyRTC:小公司,不知道稳定性如何
5,七牛云:这个公司虽然不像BAT那么有名气,但是公司技术很牛,整个公司确实是在一心研究技术.最开始做图片云存储,最近在搞直播,推荐这家公司的sdk.



25 个回复

倒序浏览
回复 使用道具 举报 1 0
有需要的小伙伴顶起来!
回复 使用道具 举报 1 0
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复 使用道具 举报
必须来顶
回复 使用道具 举报
好吧 顶一个
回复 使用道具 举报
MasksX 中级黑马 2016-10-6 21:34:08
7#
这个必须顶
回复 使用道具 举报
这个必须要顶...顶 顶 顶
回复 使用道具 举报
必须顶,顶,顶.
回复 使用道具 举报
顶一个!!
回复 使用道具 举报
橘子哥,顶顶起来
回复 使用道具 举报
顶起来!!!
回复 使用道具 举报
爱黑马,爱生活……
回复 使用道具 举报
顶起来!!!!!
回复 使用道具 举报
爱生活,爱黑马!!!
回复 使用道具 举报
由手机一端作为视频采集端,采集视频信息,通过网络实时传递到服务器,再由服务器推送到视频播放端的过程。 涉及概念:推流端,采流端:主播一端拉流端, ...
回复 使用道具 举报
顶起来!
回复 使用道具 举报
可以,深夜贴
回复 使用道具 举报
6666666666666666
回复 使用道具 举报
顶一下,技术贴收藏起来
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马