7

我面临的问题是,每当我的应用在 Android 4.0+ 上播放流时,甚至在加载流之前都会调用OnPreparefrom 方法MediaPlayer.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();
        }

此代码在 Google TV 和其他 Android 3.0+ 和 < 4.0+ 设备上运行良好

4

3 回答 3

1

我建议使用可用的MediaPlayer类。与VideoView不同, MediaPlayer知道它的状态并为您管理更多VideoView不提供的东西。与设置SurfaceHolder以在其中显示内容相结合非常简单。

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

于 2013-08-02T19:12:42.690 回答
1

这是 Android < 4.3 的 .m3u8 的已知问题。

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

于 2013-08-02T20:00:41.613 回答
1

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

  1. 没有电话准备。如果您正在这样做,您是否尝试过 prepareAsync ?
  2. 您没有使用传递给 onPrepared 回调的媒体播放器实例。您可能尝试启动错误的媒体播放器。
于 2013-07-31T13:30:46.543 回答