总体流程为:客户端采集数据------上报nginx服务器-------服务器分发视频流到其它客户端
其中服务器分发视频为nginx去实现。
故这里的重点是采集数据&上报服务器。
先说采集数据
这里要采集两种,音频&视频
----------------------------------------------------------------------------------------视频
首先将安卓Camera采集到的视频NV21数据转码成YUV420给到H264进行编码。
NV21与YUV420p都属于YUV420格式,每四个Y共用一组UV分量。区别是UV分量的空间排列不同。
采用H264对视频进行编码!IPB帧压缩, 编码后放入视频数据队列。
----------------------------------------------------------------------------------------音频
fireAudio将麦克风采集到的音频数据使用faac编码,并加入到队列中。
每次从实时的pcm音频队列中读出量化位数为8的pcm数据,用8个二进制位来表示一个采样量化点(模数转换)。然后利用FAAC进行编码。 编码后放入音频数据队列。
----------------------------------------------------------------------------------------传输层
利用RTMP协议将编码后的视频数据&音频数据发送到流媒体nginx服务器。
Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。RTMP协议是TCP/IP五层体系结构中应用层的协议。
这就是整体的一个流程,比较详细的流程见1204.
最终其它客户端去获得直播流,需要用支持RTMP协议的播放器才能正确解码,android自带的播放器并不能支持此协议。可用第三方开源框架解决
网友评论