微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android 7 MediaPlayer错误1,-2147483648

如何解决Android 7 MediaPlayer错误1,-2147483648

我正在尝试使用RTSP中来自videcam的视频流制作一个屏幕。我将MediaPlayer与SurfaceView一起使用,但我也尝试使用VideoView,但它们都无法在Android 7(sdk 24)上运行,在其他版本上,我的代码也能很好地工作。

以下是代码

Scanner input = new Scanner(system.in);
String Array[] = {"Henry","Alex"};

System.out.print("Enter a name: ");
String ans = input.nextLine();
 
if (ans > array){
  System.out.println("Name is available");
} else {
  System.out.println("Name is not available"
}

这是我在android 7设备上启动应用程序时的完整日志:

class MainActivity : AppCompatActivity(),SurfaceHolder.Callback,MediaPlayer.OnPreparedListener {
private var mediaPlayer: MediaPlayer? = null
private var vidHolder: SurfaceHolder? = null
private var vidSurface: SurfaceView? = null
private var progress: ProgressBar? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    vidSurface = findViewById(R.id.videoView)
    progress = findViewById(R.id.progress)
    progress?.visibility = View.VISIBLE

    vidHolder = vidSurface?.holder
    vidHolder?.addCallback(this)
}

override fun surfaceCreated(holder: SurfaceHolder) {
    try {
        if (mediaPlayer != null) {
            if (!mediaPlayer!!.isPlaying) mediaPlayer?.start()
        } else {
            mediaPlayer = MediaPlayer()
            mediaPlayer?.setDataSource(CAMERA2_URL)
            mediaPlayer?.setonPreparedListener(this)
            mediaPlayer?.setAudioAttributes(
                AudioAttributes.Builder().setContentType(
                    AudioAttributes.CONTENT_TYPE_MOVIE
                ).build()
            )

            mediaPlayer?.prepareAsync()
        }
        mediaPlayer?.setdisplay(vidHolder)
    } catch (e: Exception) {
        e.printstacktrace()
    }
}

override fun onPrepared(mp: MediaPlayer?) {
    progress?.visibility = View.GONE
    mediaPlayer?.start()
}

override fun onDestroy() {
    super.onDestroy()
    mediaPlayer?.release()
}

override fun surfaceChanged(holder: SurfaceHolder,format: Int,width: Int,height: Int) {}

override fun surfaceDestroyed(holder: SurfaceHolder) {}
}

我的rtsp流配置: h264(基准),yuv420p(逐行),704x576、15 fps,25 tbr,90k tbn,30 tbc

当我在android 7.0上启动它时,它显示错误(1,-2147483648)。以前,它在android 5上也不起作用,但是我们将配置文件更改为Baseline,除android 7.0之外,其他所有地方(即使在android 7.1上)都运行良好。我尝试了there的一些解决方案,但没有任何帮助。我也尝试过使用VLC lib并修复了android 7问题,但是它在apk中的重量约为80 mb,这对我的应用程序来说太大了。

我认为问题出在流配置中,但是实际上无法弄清楚到底是什么...而Android 7的情况对我来说似乎有点奇怪,因为{ {3}},也许您知道它是什么?

那么您对rtsp有任何类似的问题吗?您知道如何以正确的方式为Android配置rtsp流吗?确切的Android 7版本可能有什么问题?我怎样才能使它起作用?任何帮助表示赞赏!


更新

我通过使用official info使其起作用,但是这花了我一些时间,而且无论如何我的项目都变得很重要(尽管与vlc相比还不算多)。我仍然不明白为什么认的Android MediaPlayer无法正常工作,如果出现解决方案,我将坚定地返回mediaplayer代码,因为它比exoplayer简单得多。

解决方法

在您的(模块)build.gradle文件中,在依赖项{...}

之后最后放下以下conf
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == "androidx") {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion "${targetSdk}.+"
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。