Android MediaPlayer java.io.IOException: Prepare failed.: status=0x1

后端 未结 2 904
花落未央
花落未央 2020-12-31 18:32

I am using Android\'s MediaPlayer to set up a URL stream in my application. I have tried several different posts to deal with the exit code and error: (1, -2147483648).

相关标签:
2条回答
  • 2020-12-31 19:00

    try with this code Tested with real device Vivo V7+ Android 8.1.0

        private MediaPlayer player;
        String url = "http://199.180.75.118:80/stream";     //temp stream
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        private void initializeMediaPlayer() {
            player = new MediaPlayer();
            player.setAudioAttributes( new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .build());
    
            try {
                //change with setDataSource(Context,Uri);
                player.setDataSource(this, Uri.parse(url));
                player.prepareAsync();
                player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    public void onPrepared(MediaPlayer mp) {
                        //mp.start();
                        player.start();
                    }
                });
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    Make sure u defined the permission in manifest file

    Manifest.xml

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    
    <Application
      android:usesCleartextTraffic="true"
      ....
      >
      //.....
      </Application>
    

    Ref :: https://developer.android.com/training/articles/security-config

    Network security configuration

    The Network Security Configuration feature lets apps customize their network security settings in a safe, declarative configuration file without modifying app code. These settings can be configured for specific domains and for a specific app. The key capabilities of this feature are as follows:

    • Custom trust anchors: Customize which Certificate Authorities (CA) are trusted for an app's secure connections. For example, trusting particular self-signed certificates or restricting the set of public CAs that the app trusts.
    • Debug-only overrides: Safely debug secure connections in an app without added risk to the installed base.
    • Cleartext traffic opt-out: Protect apps from accidental usage of cleartext traffic.
    • Certificate pinning: Restrict an app's secure connection to particular certificates.

    Add a Network Security Configuration file

    The Network Security Configuration feature uses an XML file where you specify the settings for your app. You must include an entry in the manifest of your app to point to this file. The following code excerpt from a manifest demonstrates how to create this entry:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ... >
        <application android:networkSecurityConfig="@xml/network_security_config"
                        ... >
            ...
        </application>
    </manifest>
    

    network_security_config.xml

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates src="system" />
                <certificates src="user" />
            </trust-anchors>
        </base-config>
    </network-security-config>
    
    0 讨论(0)
  • 2020-12-31 19:09
    private void initializeMediaPlayer() {
            player = new MediaPlayer();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                player.setAudioAttributes(new AudioAttributes.Builder()
                        .setUsage(AudioAttributes.USAGE_MEDIA)
                        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                        .setLegacyStreamType(AudioManager.STREAM_MUSIC)
                        .build());
            } else {
                player.setAudioStreamType(AudioManager.STREAM_MUSIC);
            }
            try {
                player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mp.start();
                    }
                });
                player.setDataSource(url);
                player.prepareAsync();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    

    onPrepared calling in seconds.

    In android 9, check this https://developer.android.com/training/articles/security-config

    AndroidManifest.xml add networkSecurityConfig attributes

    ...
    <application
    android:networkSecurityConfig="@xml/network_security_config"
    ...>
    ...
    

    in src/res/xml add network_security_config.xml file

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates src="system" />
                <certificates src="user" />
            </trust-anchors>
        </base-config>
    </network-security-config>
    
    0 讨论(0)
提交回复
热议问题