Android 4.0.4 MediaPlayer 使用 RTSP url 准备问题

2024-02-07

我正在开发的视频流应用程序遇到了一个奇怪的问题。实际的视频/音频流在我的所有测试设备上都运行良好。然而,在看似任何 4.0+ 的设备上,当使用 RTSP URL 时,prepare() 会立即返回(这会导致在加载视频时向用户提供正确反馈的问题,并干扰我现有的一些其他系统)。

下面是我初始化和设置 MediaPlayer 的代码块,但请记住以下几点:

  • 我的 initPlayer 方法是从 AsyncTask 调用的。
  • 视频最终确实可以正确播放,但立即准备返回会导致在视频加载期间缺乏对用户的反馈。
  • 整个过程没有出现任何错误
  • start() 是通过 OnPreparedListener 中的 onPrepared 方法在 MediaPlayer 上调用的,这显然会成为一个问题,因为在准备好播放之前就返回了 prepare() 。
  • HTTP 流似乎工作正常,并且在低于 4.0 的每个测试设备上都不会出现此问题。

我花了很长一段时间试图解决这个问题,但找不到其他人遇到过这个问题。任何想法将不胜感激。

    public void initPlayer() {
        //We first need to make sure the MediaPlayer isn't null
        if(mMediaPlayer==null){
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setOnPreparedListener(mediaPlayerPreparedListener);
            mMediaPlayer.setOnCompletionListener(mediaPlayerCompletionListener);
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        }
        //If a video/stream has been chosen while another is already playing
        else if(mMediaPlayer.isPlaying()){
            mMediaPlayer.reset();
        }
        //Video is not in full screen mode
        second = false;
        try {
            mMediaPlayer.setDataSource(videoString);
            holder = mPreview.getHolder();
            mMediaPlayer.setDisplay(holder);
            mMediaPlayer.prepare();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //onPreparedListener
    private OnPreparedListener mediaPlayerPreparedListener = new OnPreparedListener(){
        public void onPrepared(MediaPlayer mp) {
            mp.start();
            vidPb.setVisibility(View.INVISIBLE);
        }
    };

Use mp.prepareAsync() http://developer.android.com/reference/android/media/MediaPlayer.html#prepareAsync%28%29因为它更适合流媒体。使用prepare()阻塞,直到 MediaPlayer 准备好播放或发生 IllegalStateException。此外,在 android 4 (ICS) 中,任何 UI 线程上的阻塞更加严格,可能会导致出现 ANR(活动未响应)对话框。

最后一个想法,尽量避免使用e.printStackTrace();在 Android 应用程序中。 相反,使用Log.e("TAG_STRING", e.getMessage(), e);将错误打印到您可以访问的 android 日志系统logcat http://developer.android.com/tools/debugging/ddms.html#logcat.

总而言之,它应该看起来像这样:

    try {
        mMediaPlayer.setDataSource(videoString);
        holder = mPreview.getHolder();
        mMediaPlayer.setDisplay(holder);
        mMediaPlayer.prepareAsync();
    } catch (IllegalArgumentException e) {
        Log.e("TAG_STRING", e.getMessage(), e);
    } catch (SecurityException e) {
        Log.e("TAG_STRING", e.getMessage(), e);
    } catch (IllegalStateException e) {
        Log.e("TAG_STRING", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("TAG_STRING", e.getMessage(), e);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 4.0.4 MediaPlayer 使用 RTSP url 准备问题 的相关文章

  • 如何在android系统状态栏中显示文本

    我正在尝试为 Android Nougat 开发一个应用程序 我想在从 android 服务例程生成的状态栏中显示一些信息 文本 所以我的问题是 我不知道如何在状态栏中显示文本 我添加了一个示例图像来显示我的确切含义 红色圆圈 我知道这是可
  • 使用 Jack 时未生成 Dagger 2 组件

    当我启用杰克编译器 https source android com source jack html在Android Studio 2 2中Dagger 2 https google github io dagger 组件未生成 Dagg
  • Android 4+ 获取联系人组时出现重复条目

    我使用以下查询获取所有联系人组 get list of contact groups from ContactsContract Cursor groups cursor getContentResolver query ContactsC
  • Android:如何创建MotionEvent?

    MotionEvent没有获取构造函数 我想在单元测试中手动创建MotionEvent 那么如何获取它 谢谢 您应该使用静态之一obtain的方法MotionEvent类来创建一个新事件 最简单的方法 除了从现有事件包装新事件之外 是 st
  • FirebaseRemoteConfigClientException:Firebase 安装无法获取用于提取的安装身份验证令牌

    我遇到异常 com google firebase remoteconfig FirebaseRemoteConfigClientException Firebase Installations failed to get installa
  • 将 EditText 添加到工具栏

    My Toolbar and EditText看起来像这样 我尝试将其添加为ActionView但我得到了这个结果 它基本上只是添加了我的话 点击下方 作为标题 而没有TextView 这就是我所做的 menu xml menu menu
  • VideoView SeekTo 在不同设备上工作异常 - Android

    我在视频视图上使用此代码来寻求自定义位置 但它在三星设备上工作正常 但在索尼设备上 视频寻求开始位置 开始 我想让视频回到上次暂停的位置 创建视频视图 VideoView mVideoPlayer setVideoPath ViDpath
  • 如何在android文本视图的任意一端插入文本?

    是否可以有一个文本视图 其中在文本视图的最左侧包含一些文本 在文本视图的最右侧包含一些文本 例如 我想要一个应该像这样显示的文本视图 文字 a 可以使用单个 TextView 只需将文本放入 HTML 格式即可 例如
  • Android ArrayList 的 IndexOutOfBoundsException [重复]

    这个问题在这里已经有答案了 我遇到了一个非常烦人的问题 一些代码抛出 IndexOutOfBoundsException 我真的不明白为什么 logcat 指向以下代码的 addTimetableItem 我们将对此进行更多解释 if so
  • Android JSONObject内部多个JSONObject的解析

    我有一个来自服务器的 JSON 字符串 它看起来像这样 categories 0 term id 247 name Content Curation 1 term id 50 name Content Marketing 2 term id
  • Android 为多个活动存储 Socket.io 对象

    我正在制作我的第一个基于 Socket io 的 Android 应用程序 套接字从 Web 服务发送和接收数据 应用程序中有许多屏幕用于不同的功能 我如何在这些不同的活动中使用相同的套接字连接 我尝试在 Application 类中设置和
  • 通过 ExoPlayer 进行 Android 流传输

    我正在尝试从MediaPlayer有利于ExoPlayer但我找不到任何更新的演示如何使用它 我认为他们已经删除了FrameworkSampleSource方法 我从 Github 下载了演示 但找不到播放器的实现 我可以找到添加 URL
  • 使用包名称获取所有活动

    我想通过使用 PackageInfo 将应用程序中存在的所有活动作为列表获取 请告诉我有什么办法可以做到这一点 提前致谢 我的问题得到的答复如下 public static ArrayList
  • 这是什么文本选择控件?

    我想在具有各种文本字段的活动上的文本选择上实现相同性质的控制类型 实现图片所示行为的任何想法 参考此来自安卓2 3 http developer android com sdk android 2 3 html文档 您可以使用此方法创建自己
  • 从一系列图像创建视频?

    如何从一系列 png 图像创建视频 在 Android 中是否有可能任何人建议我这样做 是的 可以通过一系列图像生成视频 不完全是视频 而是类似视频 有一种所谓的 mpeg 流 它由多部分方式的 JPEG 图像组成 您可以从源 基本上是远程
  • Dagger 2.10 Android 子组件和构建器

    使用新的 2 10 中 dagger android 类 我尝试使用依赖于其他模块的子组件来注入东西 因此 有一个带有这些模块的设置器的构建器 有关的文档https google github io dagger android html
  • 使用 Android 手机在空中绘画

    我正在开发一个用 Android 手机在空中画画的应用程序 当我的手机移动时 借助加速度计 我检索了每个轴 ax ay az 上的加速度 我感兴趣的是 x y z 根据我在论坛和一些教程中读到的内容 两次积分加速会产生巨大的错误 那么 对于
  • 如何从 Android 设备检索 RCS 消息

    我如何在android中检索RCS消息 我可以使用 contentproviders 检索 SMS MMS 是否有适用于 Android 的 RCS 消息传递的 URI 我发现我的设备有这个 contentprovider 可用 所以我尝试
  • 打算在 Android 上打开 Instagram 用户个人资料

    我正在开发一款社交网络应用程序 我们的用户可以将他们的 Instagram 帐户连接到我们的服务 我想直接在他们的官方 Android 应用程序 如果已安装 中打开 Instagram 个人资料 但我找不到任何方法来做到这一点 然而 有一个
  • Android:创建自定义形状进度条的最佳方法

    我想创建一个自定义形状的进度条 它会根据其进度改变颜色 但这几乎是一个不同的问题 那么 创建如下图所示的自定义形状进度条的最佳方法是什么 抱歉 MS Paint 绘图技巧不佳 为了拥有所有可能性 您应该创建一个从进度条派生的自定义类并完全重

随机推荐