Android中基于NuPlayer的RTSP框架学习
2017-02-07 15:49
253 查看
http://blog.csdn.net/sadamoo/article/details/38513461
一、整体框架图
Android中基于NuPlayer的RTSP框架如下图所示(该图来自网上)。
整个图主要分为两个部分,一部分是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中基于NuPlayer的RTSP框架如下图所示(该图来自网上)。
整个图主要分为两个部分,一部分是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中基于NuPlayer的RTSP框架学习
- Android中基于NuPlayer的RTSP框架学习
- Android中基于NuPlayer的RTSP框架学习
- Android中基于Nuplayer的RTSP框架解析
- android Nuplayer RTSP 学习
- 基于xmpp协议的开源框架androidpn学习笔记
- Android 源码分析之基于NuPlayer的RTSP流媒体协议
- Android 源码分析之基于NuPlayer的RTSP流媒体协议
- Android 源码分析之基于NuPlayer的RTSP流媒体协议
- Android4.x的RTSP框架学习
- 基于 Android NDK 的学习之旅-----Android.mk 介绍
- 基于移动平台的多媒体框架——移植SDL到Android
- Android自动化测试框架Robotium学习笔记
- 基于线程池和NIO技术构建高效的多协议Android通讯框架
- 基于CPPUNIT测试框架开发Android平台的测试程序
- 基于 Android NDK 的学习之旅-----Android.mk 介绍
- Android源码学习之六——ActivityManager框架解析
- 基于Android的虚拟校园移动学习系统
- Android JNI 的学习还是要基于NDK环境!
- 基于移动平台的多媒体框架——移植ffmpeg到Android