Android 视频直播的流程总览

    视频直播整个流程,就是不断把数据采集端的数据编码后推送到流媒体服务器,经CDN加速后,由播放端拉取这些数据进行解码播放。
    在手机客户端主要可分为五个步骤:音视频数据采集、音视频效果处理、数据编码、推流到服务器、拉流播放。
(整个过程类似于源源不断送快递,推流端是生产方,生产的货物送到库房(流媒体服务器),由专业的快递公司(CDN),快速送到各个消费者手中(拉流播放端)。没有快递公司当然也能送货,但货物太多、距离太远,送货速度就会慢。)
#.Android客户端的主要工作步骤
1.画面、音频采集
1.1美颜直播使用相机(Camera)采集图像。相关笔记:
1.2录屏直播,使用MediaProjection捕获手机屏幕画面。相关笔记: Android 使用MediaProjection+ImageReader捕捉屏幕画面_丞恤猿的博客-CSDN博客
2.画面、音频加工处理
        一般会引入OpenGL来对画面做各种效果处理,如添加水印、美颜、各种特效。可以自研,也可以引入强大的第三方SDK来处理美颜和各种特效。
        音频方面,在该阶段,可以加入各种音效处理、如混响、伴奏混音等。
相关笔记:
3.编码压缩
一般使用MediaCodec来进行音视频编码,视频流采用H264格式、音频流采用AAC格式。
相关笔记:     
4.推流到服务器(或者合成本地视频文件)
        一般使用RTMP协议推流到流媒体服务器,相对同类协议,RTMP协议延迟较低(1~3s,网络状态正常情况下)。
        Android端可使用RtmpDump开源库,根据从服务端获取到的推流地址,将MediaCodec的输出编码帧上传到流媒体服务器。
        若要在本地合成视频文件,则将MediaCodec的输出编码帧交给MediaMuxer来处理。
5.客户端拉流播放
Android端可使用IjkPlayer,支持各种常见的拉流协议,支持软解码和硬解码,支持变速播放。
相关笔记:
##.其它补充
        音视频连麦、视频PK等,一般会接入第三方SDK来完成,例如声网(Agora)、即构(Zego)等。
        因为手机的性能有限,视频混流一般在服务端进行,混流后再旁路推流到设定好的推流地址,然后由观看端拉取播放。
#.相关概念
##.流媒体服务器
    流媒体服务器是运行在服务端的程序,支持按照流式协议(RTMP、HLS、HPPT-FLV等)让客户端上传或拉取媒体数据,并提供媒体数据处理能力。
(如果自己只需要一个简单的服务器来测试直播功能的话,现在网上有很多搭建RTMP服务器的教程,可以买个便宜的VPS或云服务器搭建一下。而且还有更简单的手段,例如腾讯云之类的,在云服务器装系统时,直接可以选择SRS音视频服务器,
会自动配置流媒体服务器。)
##.CDN大致介绍
    CDN(Content Delivery Network),即内容分发网络,通过在各个用户访问比较集中的地区设置一些缓存服务器( CDN节点),缓存网站要下发给用户的资源。当用户请求这些资源时,CDN会根据距离、网络状态等做出判断,让用户从适合的CDN节点上获取到对应资源。从网站服务器到CDN节点的速度一般较快,而且CDN可以降低网站服务器的网络负载,因此提升了用户获取资源的速度。

猜你喜欢

转载自blog.csdn.net/u013914309/article/details/124761289