【问题标题】:Android- Mediaplayer streaming issue with test devicesAndroid-测试设备的媒体播放器流问题
【发布时间】:2012-06-25 23:49:54
【问题描述】:

我目前有一个媒体播放器,它具有可流式传输的数据源。我有两个测试设备:HTC Thunderbolt 和三星 Galaxy SII Skyrocket。

HTC 设备能够完美地流式传输文件;但是,galaxy sII 根本不能,并且给了我一堆媒体播放器错误代码。

我正在正确实施与媒体播放器相关的所有内容...但是,我无法解决这个问题...为什么它可以在一部手机上运行,​​而在另一部手机上不行?它是相同的链接。

有什么想法吗?来自以下设备的日志。如有必要,也可以发布我的代码。

谢谢!

从 HTC 设备记录:

06-25 18:19:23.192: D/MainAudioService(23564): next song is: http://soundcloud.com/stopdroprave/chromeo-night-by-night/download/s-bpPu1
06-25 18:19:26.675: W/MediaPlayer(23564): info/warning (1, 902)
06-25 18:19:28.497: D/dalvikvm(23564): GC_EXTERNAL_ALLOC freed 515K, 50% free 3544K/7047K, external 477K/989K, paused 22ms
06-25 18:19:31.250: D/MainAudioService(23564): Song length in minutes is: -6:5
06-25 18:19:31.250: D/MediaPlayer(23564): start() in
06-25 18:19:31.250: D/MediaPlayer(23564): start() out
06-25 18:19:31.310: I/MediaPlayer(23564): Info (1,902)
06-25 18:19:31.310: D/MainAudioService(23564): On Info in MP: 1and 902
06-25 18:19:50.909: D/MediaPlayer(23564): stop() in
06-25 18:19:50.919: D/MediaPlayer(23564): stop() out
06-25 18:19:50.919: D/MediaPlayer(23564): reset() in
06-25 18:19:50.929: D/MediaPlayer(23564): reset() out
06-25 18:19:50.939: D/MainAudioService(23564): next song is: http://soundcloud.com/stopdroprave/subvibe-mizukis-last-chance/download/s-Jaezp
06-25 18:19:55.433: W/MediaPlayer(23564): info/warning (1, 902)
06-25 18:19:58.656: D/dalvikvm(23564): GC_EXTERNAL_ALLOC freed 503K, 57% free 3099K/7047K, external 1102K/1614K, paused 45ms
06-25 18:20:00.338: D/MainAudioService(23564): Song length in minutes is: -6:39
06-25 18:20:00.338: D/MediaPlayer(23564): start() in
06-25 18:20:00.338: D/MediaPlayer(23564): start() out
06-25 18:20:00.408: I/MediaPlayer(23564): Info (1,902)

来自 SGSII 的日志:

06-25 18:27:32.797: E/MediaPlayer(24277): stop called in state 0
06-25 18:27:32.797: E/MediaPlayer(24277): error (-38, 0)
06-25 18:27:32.807: D/MainAudioService(24277): next song is: http://soundcloud.com/stopdroprave/doctor-p-watch-out-crazes-locd/download/s-qQhJP
06-25 18:27:32.807: E/MediaPlayer-JNI(24277): setDataSource: outside path in JNI is �x@
06-25 18:27:33.498: E/MediaPlayer(24277): error (1, -2147483648)
06-25 18:27:33.498: E/MediaPlayer(24277): Error (1,-2147483648)
06-25 18:27:33.498: D/MainAudioService(24277): Error in MP: 1 and -2147483648
06-25 18:27:33.498: E/MediaPlayer(24277): stop called in state 0
06-25 18:27:33.498: E/MediaPlayer(24277): error (-38, 0)
06-25 18:27:33.508: D/MainAudioService(24277): next song is: http://soundcloud.com/stopdroprave/digitalism-circle-eric-prydz/download/s-XlYFv
06-25 18:27:33.508: E/MediaPlayer-JNI(24277): setDataSource: outside path in JNI is �x@
06-25 18:27:34.149: E/MediaPlayer(24277): error (1, -2147483648)
06-25 18:27:34.149: E/MediaPlayer(24277): Error (1,-2147483648)
06-25 18:27:34.149: D/MainAudioService(24277): Error in MP: 1 and -2147483648

编辑:

这里是我设置数据源的地方......

SdrPlaylist p = mPlaylist.get(currentNum);

            String path = p.songUrl;

            artistInfo = p.songName;
            nextSong = Toast.makeText(getApplicationContext(),
                    "Buffering Next Song...", Toast.LENGTH_LONG);
            nextSong.setGravity(Gravity.TOP, 0, 110);
            nextSong.show();

            try {
                Log.d(TAG, "next song is: " + path);

                mediaPlayer.setDataSource(path);

                mediaPlayer.prepareAsync();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

【问题讨论】:

  • 尝试在设置媒体播放器数据源的位置添加代码
  • 刚刚添加了数据源代码部分
  • 我在 SGS2 上尝试了与您相同的链接,但没有一个有效。例如这个链接; soundcloud.com/fanu/d-b-show-with-fanu-docius-on/download 工作正常。但无法判断您使用的下载链接有什么问题。
  • @harism 和 Splitusa 我在使用 Android 媒体播放器流式传输 mp3 文件时遇到了同样的问题,它适用于每台设备,但不适用于三星设备。我用几个设备进行了测试,但没有一个能工作。您了解原因并找到解决方法了吗?谢谢。

标签: android streaming media-player android-mediaplayer


【解决方案1】:

docs for MediaPlayer 状态:

对于流,你应该调用prepareAsync(),它会立即返回,而不是阻塞直到缓冲足够的数据。

所以我会先尝试一下。您需要使用 OnPreparedListener 为您调用 start() 而不是假设准备在它返回后完成。

private MediaPlayer mp = new MediaPlayer();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer arg0) {
        mp.start();

    }
});

mp.reset(); //<--- you probably shouldn't need this here.
mp.setDataSource(soundUri);
mp.prepareAsync();

这样可以保证在 MediaPlayer 准备好之前不会调用 start()。

如果您在此更改后仍然遇到问题,我的下一个猜测是它与编解码器相关。 android 上的媒体播放有点挑剔,对于流媒体来说更是如此。您要播放什么类型的文件?

【讨论】:

  • 也许你可以帮助我 - 我正在做你在这里建议的一切,但我的流在三星 S3 设备上不起作用 - 所有其他三星设备(S4、Note I 和 II、 SII、SIII mini、Nexus 手机、音乐)完美播放流媒体。我的问题在这里:stackoverflow.com/questions/16672568/…
【解决方案2】:

因为您设置媒体播放器的数据源似乎是一个问题,所以应该这样做:

private MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(soundUri);
mp.prepare();
mp.start();

或者您可以在此处查看完整答案:https://stackoverflow.com/a/9061259/1084764

【讨论】:

  • 这就是我设置它的方式...这并不能解释为什么它可以在一个设备上运行,但不能在另一个设备上运行...
  • 如果所有 4 首歌曲都在 HTC 上播放,这有点令人惊讶,因为其中 3 首歌曲似乎已被删除; soundcloud.com/stopdroprave.
  • 所有歌曲都在 HTC 上播放。它们不可见的原因是它们被设置为私有。您流式传输的歌曲设置为公开,这就是它起作用的原因。
  • 啊,我明白了。抱歉,我对 SoundCloud 不太熟悉,不知道有隐私设置。无论如何,一旦我放弃了尾随 id,歌曲soundcloud.com/stopdroprave/subvibe-mizukis-last-chance/… 在我的 SGS2(唯一的公开歌曲)上播放正常。
  • 是的,这是唯一一个在我的 SGS2 上也为我流式传输的链接...任何想法为什么其他链接在 HTC 上流式传输而不是 SGS2 上流式传输?
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多