gpt4 book ai didi

android - MediaPlayer 在模拟器上工作,但不在设备上

转载 作者:行者123 更新时间:2023-11-29 14:05:05 25 4
gpt4 key购买 nike

我正在开发适用于 Android 的广播应用程序,我发现了一个奇怪的问题。这是代码的一部分:

mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setVolume(1, 1);
try {
mediaPlayer.setDataSource(url);
mediaPlayer.setOnPreparedListener(
mediaPlayer.prepareAsync(); // prepare async to not block main thread

该程序在模拟器(2.2、2.3)上运行良好,但是当我在我的两台设备(均为 Android 2.2)上尝试时,没有音频。我已经尝试了很多变通方法,但音频在模拟器上运行但在设备上运行似乎很奇怪。

PS:我设置了上网权限

所有的监听器都启动了(OnBufferingUpdateListener、OnCompletionListener、OnErrorListener、OnInfoListener、OnPreparedListener)在模拟器上我听音乐,但它在 logcat 中给出错误:emulator log

这是 logcat 中显示的错误(在设备上):

E/OMXPlayer(  953): Creating new NVOMXPlayer: 0x9c1a8
E/OMXPlayer( 953): onFirstRef ++
E/OMXPlayer( 953): onFirstRef --
E/OMXPlayer( 953): setdatasource ++
E/OMXPlayer( 953): 0x9c1a8 setDataSource url=http://XXXXXX:8000
E/OMXPlayer( 953): render thread(10972) started: 0x9c1a8
E/OMXPlayer( 953): STATE_PREPARING - signal wait 0x9c1a8
E/OMXPlayer( 953): prepareAsync: 0x9c1a8
E/OMXPlayer( 953): STATE_PREPARING - signal rx'd 0x9c1a8
E/OMXPlayer( 953): prepare 0x9c1a8
E/OMXPlayer( 953): 0x9c1a8 Creating player for: http://XXXXX:8000
D/ ( 961): NVRM_DAEMON(803): rt_exist=2, add client ref
D/ ( 953): NvMMSetUserAgentString:: Len: 49: String: User-Agent: (NvMM Client v0.1; Linux;Android 2.2)
D/ ( 953): connect cancelled
D/ ( 953): connect cancelled
D/ ( 953): connect cancelled
D/ ( 953): connect cancelled
D/ ( 953): connect cancelled
D/ ( 953): connect cancelled
D/ ( 953): connect cancelled
D/ ( 953): Event_BlockError from 13SuperParser : Error code - 4
D/ ( 953): Graph_EventHandler: ERROR for READER [0x80001005]
D/ ( 953): Graph_EventHandler: ERROR for READER [0x80001005]
E/MediaPlayer(10958): error (1, 0)
E/ (10958): Prepare failed.: status=0x1
E/ (10958): java.io.IOException: Prepare failed.: status=0x1
E/ (10958): at android.media.MediaPlayer.prepare(Native Method)
E/ (10958): at app.relax.com.StreamingMediaPlayer.listen(StreamingMediaPlayer.java:64)
E/ (10958): at app.relax.com.StreamingMediaPlayer.startListening(StreamingMediaPlayer.java:74)
E/ (10958): at app.relax.com.StreamingMediaPlayer.access$0(StreamingMediaPlayer.java:70)
E/ (10958): at app.relax.com.StreamingMediaPlayer$1.run(StreamingMediaPlayer.java:51)
E/ (10958): at java.lang.Thread.run(Thread.java:1096)
E/OMXPlayer( 953): prepare 0x9c1a8 exit with error
E/OMXPlayer( 953): Error in prepare
E/OMXPlayer( 953): Worker Thread Exit -

最佳答案

流的媒体类型是什么?也许您在生产设备上缺少该格式的编解码器。

老实说,生产设备往往比仿真器具有更好的编解码器,因为 2.x 设备通常具有 WMA 以及 MP3 和 MP4。但也许这会破坏某些东西。

如果它是播放列表格式(例如 m3u),或复合格式(atom?rss?,或在信封中包含多种格式的多个流 URL 的其他格式),制作设备可能会选择一种不流式传输的格式那么好。例如他们选择了一个 WMA 流,但只有在他们开始解码时才发现它有 DRM。

网络广播确实经常使用某种复合格式。他们经常将 DRM 放在他们的 WMA 流中。实际上,那将是一个很好的候选人。

就其值(value)而言,2.x 流媒体支持相当薄弱。如果您能突破极限并选择 MP3 或 MP4 而不是 WMA,您可能会做得更好。

但第一个问题是:流的格式是什么。

我想也有可能:如果您的生产设备已获得 root 权限,则将禁用对受 DRM 保护的文件的解码。用没 Root过的设备试试?

最后一种可能性:2.x 设备使用各种音频堆栈。 NVOMXPlayer 看起来并不熟悉。它们是 Atrix 设备吗?

关于android - MediaPlayer 在模拟器上工作,但不在设备上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7457276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com