Backport stagefright和NuPlayer到Android 2.2

时间:2012-04-24 11:49:23

标签: android android-ndk android-mediaplayer

我的要求是能够在我的Android应用中播放实时视频流。流将通过RTSP / RTP。我无法控制来源;看起来RTP有效负载不符合开发人员指南Video encoding recommendations中列出的要求。具体而言,视频源似乎违反了以下要求:

  

对于3GPP和MPEG-4容器,moov原子必须先于任何mdat原子,但必须接替ftyp原子

基本上,看起来我们得到原始的H264数据(没有包装在容器中)。

现在,

  1. 我无法在Android 2.2 Samsung Galaxy Tab上使用MediaPlayer课程播放此流。
  2. 但是,我能够在Android 2.3三星Galaxy S上播放它。
  3. 某些第三方应用(MX Player)也可以在2.2 Galaxy Tab上播放相同的流。
  4. 在上述情况2和3中,DDMS日志指出了Stage Fright框架在内部使用的事实,而在案例1中,正在使用PVP(即OpenCore)。这一切使我得出结论:

    1. 我的信息流不能由OpenCore框架播放。
    2. 我的流可以使用Stagefright播放 - 即使在Android 2.2
    3. 上也是如此

      这让我想到了我的问题:

        

      为Android 2.2移植stagefright涉及什么?

      此外,我在AOSP来源中注意到,较新的NuPlayer现在负责播放RTSP流。问题:

        
          
      1. 是否可以将NuPlayer移回旧版本的Android(2.2或2.3)?
      2.   
      3. 如果是这样,我需要做些什么才能在我的应用中使用它?
      4.   

      我知道我可以查看源代码并使用NDK来构建stagefright和NuPlayer(尽管我从未在NDK级别工作过)。我不知道的是我的应用程序如何使用这个NuPlayer。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,但我找到了一个解决方案。您必须修补系统build.prob文件。请查看我的问题,我也发布了answer.

默认情况下,stagefright在build.prop文件中保持禁用状态。您必须启用它并重启设备。然后,您可以访问支持您的要求的stagefright框架。

对于RTSP流媒体下载远程机器中的live555MediaServer.exe文件,并将某些媒体文件保存在同一位置。打开live555MediaServer.exe文件。

使用以下代码 -

private final String RTSP_FILE = "rtsp://<remote machine IP>/<file name>";

mVideoView.setVideoURI(Uri.parse(RTSP_FILE));