【问题标题】:Android - MediaPlayer not playing SHOUTcast stream URL on Android 9 deviceAndroid - MediaPlayer 未在 Android 9 设备上播放 SHOUTcast 流 URL
【发布时间】:2019-08-13 06:03:39
【问题描述】:

奇怪的问题,我有一个 Android 6.0 华为和一个 9.0 三星设备,我正在这两个设备上测试以下代码:

String streamURL = radioObj.getString(RADIOSTATIONS_STREAM_URL) + "/stream"; 
        Log.i(TAG, "STREAM URL: " + streamURL);
        // prints: http://109.123.70.138:8136/stream

        // Play selected station
        if (mediaPlayer != null && mediaPlayer.isPlaying()) {
            mediaPlayer.pause();
            playPauseButton.setBackgroundResource(R.drawable.play_icon);
        }

        mediaPlayer = new MediaPlayer();

        try {
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(streamURL);
            mediaPlayer.prepareAsync();
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mediaPlayer.start();
            }});

        } catch (IOException e) { e.printStackTrace();
            simpleAlert("Thers's something wrong with this stream's URL:" + e.getMessage(), ctx);
        }

我知道该 URL 是有效的,因为我正在调用另一个检查 ArtistCurrent Song 的函数,并且通过在 Logcat 中打印该信息可以正常工作,但我的 Android 9 设备三星 A40 根本没有音乐。音量已满。
相反,在我的 6.0 设备上,音乐播放!

我也试图得到一些这样的 Logcat 消息:

public void onPrepared(MediaPlayer mp) {
    Log.i(TAG, "MEDIA PLAYER: " + mp.getDuration());
    mediaPlayer.start();
}});

但是什么都没有打印出来,就像我的代码忽略了 onPreparedListener 调用一样。

我还尝试将我的 mediaPlayer 分配给 mp,如下所示:

@Override
public void onPrepared(MediaPlayer mp) {
    Log.i(TAG, "MEDIA PLAYER: " + mp.getDuration());
    mediaPlayer = mp;
    mp.start();

}});

再一次,完全没有成功。
我做错了什么?

【问题讨论】:

    标签: android url streaming android-mediaplayer shoutcast


    【解决方案1】:

    解决方案

    我在 res/xml 文件夹中创建了一个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>
    

    然后我更新了我的Manifest.xml

    <application
            ...
            android:networkSecurityConfig="@xml/network_security_config"
            android:usesCleartextTraffic="true"
            tools:targetApi="n">
    

    最后,我更新了我的 Java 代码:

    // Initialize mediaPlayer
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioAttributes( new AudioAttributes.Builder()
                  .setUsage(AudioAttributes.USAGE_MEDIA)
                  .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                  .build());
    
    try {
                mediaPlayer.setDataSource(ctx, Uri.parse(streamURL));
                mediaPlayer.prepareAsync();
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    public void onPrepared(MediaPlayer mp) {
                        mediaPlayer.start();
                }});
            } catch (IllegalArgumentException e) { e.printStackTrace();
                simpleAlert(e.getMessage(), ctx);
            } catch (IllegalStateException e) { e.printStackTrace();
                simpleAlert(e.getMessage(), ctx);
            } catch (IOException e) { e.printStackTrace();
                simpleAlert(e.getMessage(), ctx);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2017-10-24
      相关资源
      最近更新 更多