Android中基于NuPlayer的RTSP框架学习

一、整体框架图

Android中基于NuPlayer的RTSP框架如下图所示(该图来自网上)。


Android中基于NuPlayer的RTSP框架学习_第1张图片

整个图主要分为两个部分,一部分是NuPlayer的架构,另一部分则是实现了基于RTSP的流媒体播放功能,即RTSPSource。当然还有一些其他的Source,如图中的HTTPLiveSource,还有图中没有画出的GenericSource、StreamingSource等,他们是并列关系,实现了不同的播放功能。

二、NuPlayer架构

1、NuPlayerDriver是对NuPlayer的封装,与NuPlayerDriver处于并列位置的是StagefrightPlayer,他们都继承MediaPlayerInterface接口。通过NuPlayer来实现播放的功能。

2、NuPlayer真正实现了播放的功能,通过各个Source的接口来得到数据流的信息和解码数据本身。在Stagefright媒体框架中,和NuPlayer处于相同地位的是AwesomePlayer。

三、RTSP功能实现架构

1、RTSPSource是NuPlayer架构的Source,给NuPlayer输送媒体需据信息和媒体数据。在整个NuPlayer架构中,与RTSPSource并列的Source有HTTPLiveSource、GenericSource、StreamingSource,还有一个MP4Source,他们都继承NuPlayer::Source。

2、MyHandler是核心,其中包含ARTSPConnection和ARTPConnection两大部分。MyHandler负责向Server端发送Request和处理Response,并负责将待解码的媒体数据传送给RTSPSource。

3、AnotherPacketSource在RTSPSource中作为mAudioTrack和mVideoTrack,他虽然继承了MediaSource接口,但是并没有使用read来读数据,而是通过dequeueAccessUnit接口来获得数据。RTSPSource通过调用queueAccessUnit结构将数据保存到这里。

4、ARTSPConnection负责维护RTSP的socket,发送Request,循环接收Server端数据,响应Server的Request。这里只是接收Response,真正的处理在MyHandler里。

5、ARTPConnection负责维护RTP和RTCP的socket,接收RTP和RTCP包,周期性发送RTCP包。需要说明的一点是,如果传输RTP和RTCP数据使用的是TCP,那么会共用RTSP的socket;如果用的是UDP,那么针对每个stream都会创建两个socket,一个用于传输RTP数据,一个用于传输RTCP数据。

6、ARTPSource,每个RTP数据流都有一个ARTPSource,后者会创建一个ARTPAssembler。依据处理数据流的压缩格式,实例化对应格式的Assembler。在ARTPSource中实现的一个最主要而且重要的功能就是根据SeqNum对RTP包进行排序。

7、ARTPAssembler对ARTPConnection接收到的数据进行处理,说的简单一点就将接收到的媒体数据进行重组,以满足解码器的要求。如AVC数据,他会把单一NAL,NAL分片和复合NAL分别处理后,都以单独NAL的形式回调传给RTSPSource,存放在AnotherPacketSource中,供decoder端使用。目前支持的Assembler有一下几种,他们都继承ARTPAssembler。

(1)AAVCAssembler

(2)AMPEG4AudioAssembler

(3)AH263Assembler

(4)AAMRAssembler

(5)AMPEG4ElementaryAssembler

(6)ARawAudioAssembler

(7)AMPEG2TSAssembler

8、APacketSource用来包存和设置每个stream的属性。针对每个stream都会创建一个APacketSource。


待序。

你可能感兴趣的:(android,RTSP,NuPlayer)