MediaPlayer 音频流在 Galaxy Tab 上失败

发布于 2024-10-16 08:42:48 字数 3788 浏览 7 评论 0原文

我在 Galaxy Tab(适用于 HTC Desire HD 和 Nexus One)上播放流式*音频时遇到一些问题。当我创建 MediaPlayer 对象时,它会产生如下错误:

02-09 02:21:39.088: VERBOSE/MediaPlayer-JNI(9325): native_setup
02-09 02:21:39.088: VERBOSE/MediaPlayer(9325): constructor
02-09 02:21:39.088: VERBOSE/MediaPlayer(9325): setListener
02-09 02:21:39.092: INFO/MediaPlayer(9325): uri is:http://147.83.39.86:3200/osgi/files/TTS/1297185775715.ogg
02-09 02:21:39.092: INFO/MediaPlayer(9325): path is null
02-09 02:21:39.092: DEBUG/MediaPlayer(9325): Couldn't open file on client side, trying server side
02-09 02:21:39.092: VERBOSE/MediaPlayer-JNI(9325): setDataSource: path http://147.83.39.86:3200/osgi/files/TTS/1297185775715.ogg
02-09 02:21:39.092: VERBOSE/MediaPlayer(9325): setDataSource(http://147.83.39.86:3200/osgi/files/TTS/1297185775715.ogg)
02-09 02:21:39.092: ERROR/MediaPlayerService(2392): Failed to create player object
02-09 02:21:39.092: ERROR/MediaPlayer(9325): Unable to to create media player
02-09 02:21:39.104: DEBUG/MediaPlayer(9325): create failed:
02-09 02:21:39.104: DEBUG/MediaPlayer(9325): java.io.IOException: setDataSource failed.: status=0x80000000
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.setDataSource(Native Method)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:745)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:675)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.create(MediaPlayer.java:611)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.create(MediaPlayer.java:592)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at com.vodafone.inredis.movil.interfazweb.InredisWebViewClient.shouldOverrideUrlLoading(InredisWebViewClient.java:37)

这就是我创建 MediaPlayer 对象的方式,没什么奇怪的:

Uri tempPath = Uri.parse(url);
player = MediaPlayer.create(interfazWeb, tempPath);
if (player != null){
  player.start();
} else {
  Log.e(TAG, "No se puede abrir el audio:" + url);
}
return true;

为了提供更多信息,我可以说我测试了传递的 url,并且我可以使用本机下载它浏览器即可正常播放。显然我可以用桌面浏览器玩它。

有人在使用上述设备时遇到过这个问题吗?

提前致谢。

######## EDIT ##############

我还没有解决这个问题,但我一直在研究一下,现在我正在一个单独的线程中下载该文件,将其保存到临时文件中并使用 MediaPlayer 打开。它会产生另一种错误,我怀疑文件夹和权限,但我还不确定。

所以现在我有了这些临时文件,我可以使用银河系的本机播放器播放这些临时文件,但不能使用我在代码中创建的文件,以及另一段日志跟踪,这没有给我任何提示。

02-10 01:36:36.945: VERBOSE/MediaPlayer-JNI(8371): native_setup
02-10 01:36:36.945: VERBOSE/MediaPlayer(8371): constructor
02-10 01:36:36.945: VERBOSE/MediaPlayer(8371): setListener
02-10 01:36:36.948: VERBOSE/MediaPlayer-JNI(8371): setDataSource: path /sdcard/audioTmp360988.ogg
02-10 01:36:36.948: VERBOSE/MediaPlayer(8371): setDataSource(/sdcard/audioTmp360988.ogg)
02-10 01:36:36.952: VERBOSE/MediaPlayer(8371): prepare
02-10 01:36:36.952: ERROR/MediaPlayerService(2394): Client::notify In
02-10 01:36:36.952: ERROR/MediaPlayer(8371): message received msg=1, ext1=0, ext2=0
02-10 01:36:36.952: VERBOSE/MediaPlayer(8371): prepared
02-10 01:36:36.952: VERBOSE/MediaPlayer(8371): signal application thread
02-10 01:36:36.952: ERROR/MediaPlayer(8371): callback application
02-10 01:36:36.952: ERROR/MediaPlayer(8371): back from callback
02-10 01:36:36.952: VERBOSE/MediaPlayer(8371): prepare complete - status=0
02-10 01:36:41.437: VERBOSE/MediaPlayer-JNI(8371): native_finalize
02-10 01:36:41.437: VERBOSE/MediaPlayer-JNI(8371): release
02-10 01:36:41.437: VERBOSE/MediaPlayer(8371): setListener
02-10 01:36:41.437: VERBOSE/MediaPlayer(8371): disconnect
02-10 01:36:41.437: VERBOSE/MediaPlayer(8371): destructor
02-10 01:36:41.437: VERBOSE/MediaPlayer(8371): disconnect

来吧,我不能是唯一的一个!

I have some issue playing streaming* audio on a Galaxy Tab (works on HTC Desire HD and Nexus One). When I create the MediaPlayer object, it produces an error like this:

02-09 02:21:39.088: VERBOSE/MediaPlayer-JNI(9325): native_setup
02-09 02:21:39.088: VERBOSE/MediaPlayer(9325): constructor
02-09 02:21:39.088: VERBOSE/MediaPlayer(9325): setListener
02-09 02:21:39.092: INFO/MediaPlayer(9325): uri is:http://147.83.39.86:3200/osgi/files/TTS/1297185775715.ogg
02-09 02:21:39.092: INFO/MediaPlayer(9325): path is null
02-09 02:21:39.092: DEBUG/MediaPlayer(9325): Couldn't open file on client side, trying server side
02-09 02:21:39.092: VERBOSE/MediaPlayer-JNI(9325): setDataSource: path http://147.83.39.86:3200/osgi/files/TTS/1297185775715.ogg
02-09 02:21:39.092: VERBOSE/MediaPlayer(9325): setDataSource(http://147.83.39.86:3200/osgi/files/TTS/1297185775715.ogg)
02-09 02:21:39.092: ERROR/MediaPlayerService(2392): Failed to create player object
02-09 02:21:39.092: ERROR/MediaPlayer(9325): Unable to to create media player
02-09 02:21:39.104: DEBUG/MediaPlayer(9325): create failed:
02-09 02:21:39.104: DEBUG/MediaPlayer(9325): java.io.IOException: setDataSource failed.: status=0x80000000
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.setDataSource(Native Method)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:745)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:675)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.create(MediaPlayer.java:611)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at android.media.MediaPlayer.create(MediaPlayer.java:592)
02-09 02:21:39.104: DEBUG/MediaPlayer(9325):     at com.vodafone.inredis.movil.interfazweb.InredisWebViewClient.shouldOverrideUrlLoading(InredisWebViewClient.java:37)

And this is how I create the MediaPlayer object, nothing weird:

Uri tempPath = Uri.parse(url);
player = MediaPlayer.create(interfazWeb, tempPath);
if (player != null){
  player.start();
} else {
  Log.e(TAG, "No se puede abrir el audio:" + url);
}
return true;

And to provide more information, I can say I tested the url passed, and I can download it with the native browser and play it normally. Obviously I can play it with my desktop browser.

Has anyboedy experienced this problem with the mentioned device?

Thanks in advance.

######## EDIT ##############

I haven't solved this issue yet, but I've been researching a bit, now I'm downloading the file in a separate thread, saving it to a temp file and opening with the MediaPlayer. It produces another kind of error, I'm suspecting of the file folders and permissions, but I'm not sure yet.

So now I have those temp files which I can play with the galaxy's native player, but not with the one I create in my code, and a different piece of log trace, which gives me no hint.

02-10 01:36:36.945: VERBOSE/MediaPlayer-JNI(8371): native_setup
02-10 01:36:36.945: VERBOSE/MediaPlayer(8371): constructor
02-10 01:36:36.945: VERBOSE/MediaPlayer(8371): setListener
02-10 01:36:36.948: VERBOSE/MediaPlayer-JNI(8371): setDataSource: path /sdcard/audioTmp360988.ogg
02-10 01:36:36.948: VERBOSE/MediaPlayer(8371): setDataSource(/sdcard/audioTmp360988.ogg)
02-10 01:36:36.952: VERBOSE/MediaPlayer(8371): prepare
02-10 01:36:36.952: ERROR/MediaPlayerService(2394): Client::notify In
02-10 01:36:36.952: ERROR/MediaPlayer(8371): message received msg=1, ext1=0, ext2=0
02-10 01:36:36.952: VERBOSE/MediaPlayer(8371): prepared
02-10 01:36:36.952: VERBOSE/MediaPlayer(8371): signal application thread
02-10 01:36:36.952: ERROR/MediaPlayer(8371): callback application
02-10 01:36:36.952: ERROR/MediaPlayer(8371): back from callback
02-10 01:36:36.952: VERBOSE/MediaPlayer(8371): prepare complete - status=0
02-10 01:36:41.437: VERBOSE/MediaPlayer-JNI(8371): native_finalize
02-10 01:36:41.437: VERBOSE/MediaPlayer-JNI(8371): release
02-10 01:36:41.437: VERBOSE/MediaPlayer(8371): setListener
02-10 01:36:41.437: VERBOSE/MediaPlayer(8371): disconnect
02-10 01:36:41.437: VERBOSE/MediaPlayer(8371): destructor
02-10 01:36:41.437: VERBOSE/MediaPlayer(8371): disconnect

Come on, I can't be the only one!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

掐死时间 2024-10-23 08:42:48

使用 MediaPlayer 进行 WAV 和 OGG 音频流无法在 Samsung Galaxy TAB(使用 FroYo)上运行。我一直在测试,并且使用了 API Demo (8),特别是 /Demos/src/com/example/android/apis/media/MediaPlayerDemo_Audio.java 中的这段代码:

    private void playAudio(Integer media) {
        try {
            switch (media) {
                case LOCAL_AUDIO:
                    /**
                     * TODO: Set the path variable to a local audio file path.
                     */
//                  path = "http://upload.wikimedia.org/wikipedia/commons/a/a9/Tromboon-sample.ogg";
//                  path = "http://www.robtowns.com/music/blind_willie.mp3";
                    path = "http://www.nch.com.au/acm/8k16bitpcm.wav";
                    if (path == "") {
                        // Tell the user to provide an audio file URL.
                        Toast
                                .makeText(
                                        MediaPlayerDemo_Audio.this,
                                        "Please edit MediaPlayer_Audio Activity, "
                                                + "and set the path variable to your audio file path."
                                                + " Your audio file must be stored on sdcard.",
                                        Toast.LENGTH_LONG).show();

                    }
                    mMediaPlayer = new MediaPlayer();
                    Uri tempUri = Uri.parse(path);
                    try {
                        mMediaPlayer.setDataSource(this, tempUri);
                    }
                    catch (IllegalStateException e) {
                        Log.d(TAG, "IllegalStateException: " + e.getMessage());
                    }
                    catch (IOException e) {
                        Log.d(TAG, "IOException: " + e.getMessage());
                    }
                    catch (IllegalArgumentException e) {
                        Log.d(TAG, "IllegalArgumentException: " + e.getMessage());
                    }
                    catch (SecurityException e) {
                        Log.d(TAG, "SecurityException: " + e.getMessage());
                    }
                    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    mMediaPlayer.prepare();
                    mMediaPlayer.start();
                    break;
                case RESOURCES_AUDIO:
                    /**
                     * TODO: Upload a audio file to res/raw folder and provide
                     * its resid in MediaPlayer.create() method.
                     */
                    mMediaPlayer = MediaPlayer.create(this, R.raw.test_cbr);
                    mMediaPlayer.start();

            }
            tx.setText("Playing audio...");

        } catch (Exception e) {
            Log.e(TAG, "error: " + e.getMessage(), e);
        }

    }

我只是更改了定义要播放的文件路径的 3 行以及项目中的其他任何内容。好吧,只有 Mp3 文件可以播放,WAV 和 OGG 都会产生与我的问题类似的异常。

还有人愿意尝试吗?我应该假设存在错误吗?

WAV and OGG Audio Streaming with MediaPlayer does not work on Samsung Galaxy TAB (with FroYo). I've been testing, and I used the API Demo (8), specifically this piece of code at /Demos/src/com/example/android/apis/media/MediaPlayerDemo_Audio.java:

    private void playAudio(Integer media) {
        try {
            switch (media) {
                case LOCAL_AUDIO:
                    /**
                     * TODO: Set the path variable to a local audio file path.
                     */
//                  path = "http://upload.wikimedia.org/wikipedia/commons/a/a9/Tromboon-sample.ogg";
//                  path = "http://www.robtowns.com/music/blind_willie.mp3";
                    path = "http://www.nch.com.au/acm/8k16bitpcm.wav";
                    if (path == "") {
                        // Tell the user to provide an audio file URL.
                        Toast
                                .makeText(
                                        MediaPlayerDemo_Audio.this,
                                        "Please edit MediaPlayer_Audio Activity, "
                                                + "and set the path variable to your audio file path."
                                                + " Your audio file must be stored on sdcard.",
                                        Toast.LENGTH_LONG).show();

                    }
                    mMediaPlayer = new MediaPlayer();
                    Uri tempUri = Uri.parse(path);
                    try {
                        mMediaPlayer.setDataSource(this, tempUri);
                    }
                    catch (IllegalStateException e) {
                        Log.d(TAG, "IllegalStateException: " + e.getMessage());
                    }
                    catch (IOException e) {
                        Log.d(TAG, "IOException: " + e.getMessage());
                    }
                    catch (IllegalArgumentException e) {
                        Log.d(TAG, "IllegalArgumentException: " + e.getMessage());
                    }
                    catch (SecurityException e) {
                        Log.d(TAG, "SecurityException: " + e.getMessage());
                    }
                    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    mMediaPlayer.prepare();
                    mMediaPlayer.start();
                    break;
                case RESOURCES_AUDIO:
                    /**
                     * TODO: Upload a audio file to res/raw folder and provide
                     * its resid in MediaPlayer.create() method.
                     */
                    mMediaPlayer = MediaPlayer.create(this, R.raw.test_cbr);
                    mMediaPlayer.start();

            }
            tx.setText("Playing audio...");

        } catch (Exception e) {
            Log.e(TAG, "error: " + e.getMessage(), e);
        }

    }

I just changed those 3 lines defining the path of the file to play, anything else on the project. Well, only the Mp3 file would play, both WAV and OGG produce and exception similar to the one on my question.

Would anybody else like to try? Should I assume there is a bug?

忆伤 2024-10-23 08:42:48

我的音频文件用AudioEncoder.AMR_NB编码,该文件可以在3G中播放,但不能在Wifi中播放,Mp3文件可以在所有情况下播放。所以我猜文件格式会影响结果。

my audio file encoded with AudioEncoder.AMR_NB,the file can be played in the 3G,but cann't played in Wifi,Mp3 file can be played in all.so I guess file format affect the result.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文