libstreaming源码阅读笔记

libstreaming是纯Java实现的安卓摄像头麦克风RTSP推流的库。代码清晰,封装合理,不过由于年代较为久远,现在存在一些缺陷,例如不支持多路客户端、不支持H265。

RtspServer:开始监听接入请求时创建,停止监听接入请求时销毁

Session:监听到接入请求后,创建SurfaceView后创建,创建后立即开启摄像头,并向目的地开始发包

Stream:每个Session两个Stream,一个VideoStream和一个AudioStream,各自再根据设定的音视频格式,使用派生的子类。Session执行configure时,会分别对音视频Stream执行configure,不过执行前有判断各个Stream的isStreaming,是的话不会执行configure。在H264Stream执行configure的时候,会更新摄像头配置,开启摄像头,设置摄像头回调。

AbstractPacketizer:负责封包及发送包。例如H264Stream初始化的时候,会初始化一个继承自AbstractPacketizer的H264Packetizer,在摄像头数据回调后,编码后,传给H264Packetizer来发送数据给socket。

缺陷

无法接受多路客户端,因为在向第一路客户端推流的时候,占用了摄像头,这时候收到第二路请求,会创建第二个Session,第二个Session会创建属于第二路的VideoStream和AudioStream,VideoStream在configure时会开启摄像头,这时候摄像头会开启失败。

想法

收到第二路接入请求时,创建第二个Session,并创建新的VideoStream和AudioStream,两个新的Stream使用新的Packetizer发送数据给第二路客户端地址,以上是不变的流程。需要做的是修改VideoStream和AudioStream,需要将Stream中MediaRecorder(录像)和AudioRecord(录声音)的逻辑,独立出来成为一个MediaServer,不再依附于Stream对象,而是各路的Stream对象去请求MediaServer分流出来的数据流,提供给各路Stream的AbstractPacketizer。并且要控制好MediaServer的生命周期,第一个Session创建后,才开始录制,最后一个Session销毁后,才停止录制。

Share

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注