简体   繁体   English

E/MediaPlayer:使用模拟器时出错(1,-2147483648)

[英]E/MediaPlayer: Error (1,-2147483648) when using emulator

I'm making a online radio streaming app for a friend.我正在为朋友制作一个在线广播流媒体应用程序。 When I run it on a physical device the stream plays no problem.当我在物理设备上运行它时,stream 播放没有问题。 But if I run it on Android Studio's built-in emulator it gives the following error:但是,如果我在 Android Studio 的内置模拟器上运行它,则会出现以下错误:

E/MediaPlayer: Error (1,-2147483648) 

From the research I've done it means just a general error?从我所做的研究来看,这意味着只是一个普遍的错误? I've tried adding:我试过添加:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        player.setAudioAttributes(new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_MEDIA)
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .build());
    } else {
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }

I've also added the right permissions in the manifest for access to inte.net.我还在清单中添加了访问 inte.net 的正确权限。 I'm sure this has been answered already but I can't find any answers that fix the problem.我确定这已经得到解答,但我找不到任何解决问题的答案。 Here is the full code I'm using to play the stream:这是我用来播放 stream 的完整代码:

 private void initializeUIElements(View root) {

    playSeekBar = root.findViewById(R.id.progressBar1);
    playSeekBar.setMax(100);
    playSeekBar.setVisibility(View.INVISIBLE);

    buttonPlay =  root.findViewById(R.id.buttonPlay);
    buttonPlay.setOnClickListener(this);

    buttonStopPlay = root.findViewById(R.id.buttonStopPlay);
    buttonStopPlay.setEnabled(false);
    buttonStopPlay.setOnClickListener(this);

}
public void onClick(View v) {
    if (v == buttonPlay) {
        startPlaying();
    } else if (v == buttonStopPlay) {
        stopPlaying();
    }
}

private void startPlaying() {
    buttonStopPlay.setEnabled(true);
    buttonPlay.setEnabled(false);

    playSeekBar.setVisibility(View.VISIBLE);



    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

        public void onPrepared(MediaPlayer mp) {
            player.start();
        }
    });
    player.prepareAsync();
}

private void stopPlaying() {
    if (player.isPlaying()) {
        player.stop();
        player.release();
        initializeMediaPlayer();
    }

    buttonPlay.setEnabled(true);
    buttonStopPlay.setEnabled(false);
    playSeekBar.setVisibility(View.INVISIBLE);
}

private void initializeMediaPlayer() {
    player = new MediaPlayer();
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        player.setAudioAttributes(new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_MEDIA)
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .build());
    } else {
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }
    try {
        player.setDataSource("http://s5.citrus3.com:8162/stream");
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    player.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {

        public void onBufferingUpdate(MediaPlayer mp, int percent) {
            playSeekBar.setSecondaryProgress(percent);
            Log.i("Buffering", "" + percent);
        }
    });
}

@Override
public void onPause() {
    super.onPause();
    if (player.isPlaying()) {
        player.stop();
    }
}   

Using URLEncoder is a good option, however can be a little unwieldy (you'll need to escape only the end part).使用 URLEncoder 是一个不错的选择,但可能有点笨拙(您只需要转义结尾部分)。

String url = "http://s5.citrus3.com:8162/stream"; 
String fixedUrl = url.replaceAll(" ", "%20");

and then接着

player.setDataSource(fixedUrl);

find your issue from here your link is working with this code从这里找到您的问题您的链接正在使用此代码

playme = (Button)findViewById(R.id.playme);
    playme.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            Toast.makeText(MainActivity.this, " " + pl,Toast.LENGTH_SHORT).show();

            URL = "http://s5.citrus3.com:8162/stream";

            mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
            stopme.setEnabled(true);
            playme.setEnabled(false);

            // get data from internet ...

            try
            {
                mp.setDataSource(URL);
            }catch(Exception e){
                e.printStackTrace();
            }

            // buffer...

            try
            {
                mp.prepare();
            }catch(Exception e){
                e.printStackTrace();
            }
            mp.start();

        }

    });

i went with a different approach n used exo player.我采用了不同的方法 n 使用 exo 播放器。 loads much faster and the errror goes away lol加载速度更快,错误消失了,哈哈

private void initializeUIElements(View root) {

    playSeekBar = root.findViewById(R.id.progressBar1);
    playSeekBar.setMax(100);
    playSeekBar.setVisibility(View.INVISIBLE);





}


@Override
public void onStop() {
    super.onStop();
    if (Util.SDK_INT >= 24) {
        initializeMediaPlayer(root);
    }
}


private void initializeMediaPlayer(View root) {

    playerView = root.findViewById(R.id.video_view);
    player = new SimpleExoPlayer.Builder(getContext()).build();
    playerView.setPlayer(player);

    MediaItem media = MediaItem.fromUri(revurl);
    player.setMediaItem(media);

    player.setPlayWhenReady(playWhenReady);
    player.seekTo(currentWindow, playbackPosition);
    player.prepare();
}

@Override
public void onPause() {
    super.onPause();
    if (Util.SDK_INT < 24) {
        releasePlayer();
    }
}

@Override
public void onStart() {
    super.onStart();
    if (Util.SDK_INT >= 24) {
        initializeMediaPlayer(root);
    }
}

@Override
public void onResume() {
    super.onResume();

    if ((Util.SDK_INT < 24 || player == null)) {
        initializeMediaPlayer(root);
    }
}

@SuppressLint("InlinedApi")
private void hideUi() {
    playerView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
private boolean playWhenReady = true;
private int currentWindow = 0;
private long playbackPosition = 0;


private void releasePlayer() {
    if (player != null) {
        playWhenReady = player.getPlayWhenReady();
        playbackPosition = player.getCurrentPosition();
        currentWindow = player.getCurrentWindowIndex();
        player.release();
        player = null;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM