Android视频推流直播学习【四】

前面已经分析完客户端和服务器的RTSP会话连接,下面就进入推流阶段,也就是客户端向服务器发送音视频数据。这里就暂时只分析视频了,音频也是差不多的。
首先是VideoStream类,这个类和AudioStream一样继承了MediaStream,然后MediaStream实现了Stream接口。VideoStream也有子类:H264Stream和H263Stream,当然我们如果有其他编码方式也可以按照这个进行扩展。这里主要讲H264Stream的软编码。
发送数据的流程是,首先调用了H264Strem的start方法,在这个方法里首先执行了config()方法,这个方法主要是获取视频的sps和pps信息,并且以分辨率,帧率和码率为键值存储在sharepreference中,如果下一次参数一样则直接从sharepreference中取。
接着把sps和pps传递给了H264Packetizer对象,这个H264Packetizer是一个用来进行RTP打包的类,暂时就不分析了。接着调用了父类的start方法,然后根据判断系统能否使用硬编码来决定视频的编码器,这里我们先分析软编码。
在VideoStream的encodeWithMediaRecorder方法中我们看到,首先是创建了Localsocket,这是一个本地的Socket,主要用于系统的MediaRecoder服务接收数据;然后打开了Camera,并设置了视频采集编码参数。最后通过H264Packetizer对象进行编码。
注意:Spydroid的作者使用了很多子线程,很多地方的try catch并没有做任何处理,所以如果推流失败的时候,请检查这些try catch。
本次分析就到此为止了,Spydroid的RTP打包完全可以照搬!

你可能感兴趣的:(流媒体相关)