Android4.x的RTSP框架学习

Android4.xRTSP框架学习

                                      ——NuPlayer介绍

本文介绍如下内容:

      播放框架介绍

      RTSP源介绍

      HTTP流媒体的区别

      要研究的点

 

NuPlayer框图:

 

概述:

1.        整个播放框架是基于ALooperAHandlerAmessage实现的消息机制的。

2.        MediaPlayerService看,有RTSPhttp且为m3u8url会用NuPlayerDriver,前者就走RTSPSource后者走HTTPLiveSource(还没看呢)

3.        分播放框架和RTSP源两部分来介绍,他们之间耦合很低,可以分开看代码。

播放框架:

1.        NuPlayerDriver是对NuPlayer的封装,前者继承MediaPlayerInterface接口,后者实现播放的功能。

2.        NuPlayer通过RTSPSource接口得到数据流的信息和解码数据本身,RTSPSource的接口有startgetFormatgetDurationseekTodequeueAccessUnitfeedMoreTSDatastop。后面会对NuPlayer做详细介绍。

3.        Decoder的核心是ACodec,后者相当于stagefrightOMXCodec,实例化一个OMXClient,调用OMX组件,实现Decode功能。

4.        ACodec有几个跟OMX状态对应的内部类,这里有个状态机的概念。如果一个msgHandlerAcodec,那么他对应的处理函数就对应其所在状态的onMessageReceived实现。看ACodec代码要了解OMX的一些概念,否则找不到调用关系了,有些流程是要靠OMX回调来串联的。

5.        Render,奇怪,我始终没能找到google组件软解的显示是在哪里实现的,期待debug

6.        Android4.0引入了SurfaceTexture的概念,在给组件分配输出buffer时有两种方式可选,分配一段内存buffer,或是从显示模块分配buffer,后者显然更高效。前者还需要再做一次格式转换,后者貌似由OMX完成。

7.        OMX组件,在qcom平台上有两套组件pluginqcom的和google的,qcomlibstagefrighthw.so中。google的组件和库命名规则为"OMX.google. aac.decaac.decoder"//对应动态库libstagefright_soft_aacdec.so

 

RTSP源:

1.        RTSPSource的与播放框架接口,是播放框架的数据源。其主要接口有:

2.        AnotherPacketSourceRTSPSource中作为mAudioTrackmVideoTrack,他虽然继承了MediaSource接口,但是并没有使用read来读数据,而是通过dequeueAccessUnit接口,Server端的压缩流通过queueAccessUnit保存到这里。

3.        MyHandler是核心,其中包含ARTSPConnectionARTPConnection两大部分。MyHandler负责向Server端发送Request和处理Response

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

      

5.        代码使用的RTSP请求有DESCRIBE,其Response中有SDP信息,接下来是SETUP,将本端的端口信息等发给服务器,然后是PLAY。为了保持RTSP链接,还要周期性发OPTIONS

6.        ARTPConnection负责RTPRTCP两个socket,接收RTPRTCP包,周期性发送RTCP包。

      Public接口:

      

Private接口:

      

7.        每个RTP数据流都有一个ARTPSource,后者会创建一个ARTPAssembler。依据处理数据流的压缩格式,实例化对应格式的Assembler

      ARTPAssemblerPublic接口:

      

      ARTPAssemblerPrivate接口:

      

8.        ARTPAssemblerARTPConnection接收到的数据进行处理,如AVC数据,他会把单一NALNAL分片和复合NAL分别处理后,都以单独NAL的形式回调传给RTSPSource,存放在AnotherPacketSource中,供decoder端使用。

 

HTTP的比较:

1.      HTTPLive还没看。

2.      普通的httprtsp最大的区别是什么呢?

      HTTP流媒体是本地解析,而RTSP流媒体是server段解析。HTTP流媒体通过HTTP协议,下载一定buffer量的server端文件到本地,利用本地的parser,像播放文件一样解析,播放。而RTSP流媒体,从server端得到的就是可解码流。

      HTTP在实现seek时,是丢掉当前所有buffer内容的。

 

要研究的点:

1, RTSP协议,requestresponse数据包的解析。

2, RTSP播放过程的管理。

      Seek过程为,先向Server端发一个PAUSE,带响应后再发一个带时间点的PLAY请求。

3, SDP协议。

4, RTPRTCP协议,要了解接收到的RTP包头字段的信息。

5, RTSP协议,要了解接收到RTCP SR(SendReprot)和发送出的RR(Receive Report)信息。

6, AVC要了解NAL单元信息。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值