Java Android-MediaPlayer';在Android 4.0+;

Java Android-MediaPlayer';在Android 4.0+;,java,android,video-streaming,media-player,android-4.2-jelly-bean,Java,Android,Video Streaming,Media Player,Android 4.2 Jelly Bean,我面临的问题是,每当我的应用程序在Android 4.0+上播放流时,MediaPlayer中的OnPrepare方法会在流加载之前调用OnPreparedListener,因此我无法向用户指出流下载/缓冲正在进行中。 下面是我正在做的事情 @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); pl

我面临的问题是,每当我的应用程序在Android 4.0+上播放流时,
MediaPlayer中的
OnPrepare
方法会在流加载之前调用OnPreparedListener
,因此我无法向用户指出流下载/缓冲正在进行中。 下面是我正在做的事情

   @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  
        playVideo(someRtspUrl);
    }
    private void playVideo(String url) {
        // if app is running on Google TV then change RTSP link to HLS
        if (url.contains("rtsp")) {

            // split the RTSP URL and make it as HLS
            String videoUrlParts[] = url.split("\\?");
            url = videoUrlParts[0].replace("rtsp", "http") + "/playlist.m3u8";

            if (videoUrlParts.length > 1)
                url += "?" + videoUrlParts[1];
        }   mVideoView.setVideoURI(Uri.parse(url));
        mVideoView.requestFocus();
        mVideoView.setOnCompletionListener(this);
        mVideoView.setOnPreparedListener(this); 

    }



    @Override
        public void onPrepared(MediaPlayer player) {
            dismissProgressDialog();
            mVideoView.start();
        }

这段代码在谷歌电视和其他安卓3.0+和<4.0+设备上运行良好

我对媒体播放器没有太多经验。但我这边有几个建议/疑问

  • 不需要准备。如果您正在这样做,是否尝试了prepareAsync
  • 您没有使用传递给onPrepared回调的mediaplayer实例。您可能试图启动错误的mediaplayer
  • 我建议使用可用的类。与之不同的是,它知道自己的状态,并为您管理更多无法提供的东西。。与设置一个屏幕来显示其中的内容相结合是非常简单的


    您只需要确保正确处理状态并使用MediaPlayer的prepareAsync()调用。

    这是安卓<4.3的.m3u8的一个已知问题


    他们在4.3中修正了这个问题。值得比较不同平台的MediaPlayer或VideoView代码,即4.3和<4.3

    ,感谢@gvmani的建议/查询。对于第二个,我会说我正在播放原始/主要对象。第一次。同步准备也在起作用。问题在于具体情况,但事实并非如此。。我也检查了rtsp和其他流。对于小于4.3的情况,它可以在4.0.4之前的3.0及以上正常运行时间工作,如问题中所述。问题是,如果视频视图不知道其状态,那么它在Android 3.1及以上的情况下如何工作良好。