MediaPlayer的工作模拟器,但不是在装置

问题描述 投票:2回答:1

我正在为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:我已经设置上网权限

所有listiners均达到(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 -
android streaming android-mediaplayer emulation
1个回答
0
投票

什么是媒体类型的流?也许你错过了对生产设备的该格式编解码器。

老实说,生产设备往往具有比模拟器更好的编解码器,因为2.x的设备往往有WMA以及MP3和MP4。但也许,打破东西。

如果它的播放列表格式(例如M3U)或化合物格式(原子?RSS ?,或与多种格式的多个流的URL在一个信封一些其他格式),也许是生产装置挑不流这么好的格式。例如他们挑WMA流,但发现它具有DRM只有当他们开始解码。

互联网电台的经常使用某种复合格式。他们经常把DRM他们的WMA流。这将是一个不错的人选,其实。

对于它的价值,2.X流的支持是相当薄弱。如果你能破解的信封,并挑选MP3或MP4,而不是WMA你可以做得更好。

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

还依稀有可能,我想:如果您的生产设备是植根,禁用DRM保护的文件进行解码。与无根的设备尝试呢?

最后一种可能性:2.x设备使用各种音频堆栈。 NVOMXPlayer不眼熟。难道他们的Atrix设备?

© www.soinside.com 2019 - 2024. All rights reserved.