Articles of android mediaplayer

stream式传输audio文件并对其进行caching

我想streamaudioMP3文件,然后通过Android媒体播放器播放,另外我也想caching这个文件 ,这样媒体播放器不必stream最近播放的曲目。 我已经尝试过使用prepareAsync方法,但是它不能访问缓冲区内容,所以我决定自己将audio文件stream式传输给媒体播放器进行播放。 我已经通过在这里遵循这篇文章来实现这一点,但是这种方法有一个问题,即在将文件传输到媒体播放器时,它会进入错误模式,导致我的播放器行为不一致。 当媒体播放器进入错误模式时,它不会自动出现,所以我不得不创build一个新的媒体播放器,然后重新提供下载的文件,这种解决方法会导致用户在播放歌曲时感觉到不希望的暂停。 那么,有没有人改进了上面的链接给出的代码版本? 或者他们知道这个问题的更好的解决scheme, 或者是实际上有一个库在Androidstream媒体audio文件? 谢谢

audiostream的最佳做法

我正在编写一个应用程序来播放远程服务器的audio。 我尝试了几种实现stream式audio的方式,但是对于我来说都不够好。 这就是我所尝试的: 天真地使用MediaPlayer 就像是: MediaPlayer player = new MediaPlayer(); player.setDataSource(context, Uri.parse("http://whatever.com/track.mp3")); player.prepare(); player.start(); (或者准备prepareAsync ,不pipe) 但播放远程内容时,标准MediaPlayer相当不稳定。 经常掉落或停止播放,我无法处理。 另一方面,我想实现媒体caching。 但是我还没有find任何方法从MediaPlayer获取缓冲内容以将其保存在设备上的某个位置。 实现自定义缓冲 然后成为一个想法,通过块下载媒体文件,将它们合并成一个本地文件,并播放此文件。 因为连接不好,下载整个文件可能会比较慢,所以最初可以下载足够的文件,然后开始播放并继续下载和附加本地文件。 此外,我们获得cachingfunction。 听起来像一个计划,但它并不总是工作。 它在HTC Sensation XE上完美工作,但是在完成这个初始部分之后没有停止4.1平板电脑播放。 不知道,为什么如此。 我问过这个问题 ,但没有收到答案。 使用两个MediaPlayers 我创build了两个MediaPlayer实例,并试图让它们相互更换。 逻辑如下: 开始下载最初的一块媒体 下载时,通过currentMediaPlayer开始播放。 其余媒体继续下载 几乎播放下载片段(完成前1秒)时,准备具有相同源文件的secondaryMediaPlayer(如在播放期间添加的那样) currentMediaPlayer完成前261ms – 暂停播放,启动次要播放,设置次要播放,安排下一个播放器准备。 来源: private static final String FILE_NAME="local.mp3"; private static final String URL = …; private […]

Android播放器继续callback,缓冲

我正在使用MediaPlayer从我的应用中的在线mp3文件播放一些声音。 但是,即使播放完成后,我仍然在控制台中获得线路和callback和缓冲。 10-24 08:08:48.467 19221-19233/com.myapp V/MediaPlayer﹕ callback application 10-24 08:08:48.467 19221-19233/com.myapp V/MediaPlayer﹕ back from callback 10-24 08:08:49.468 19221-19232/com.myapp V/MediaPlayer﹕ message received msg=3, ext1=100, ext2=0 10-24 08:08:49.468 19221-19232/com.myapp V/MediaPlayer﹕ buffering 100 10-24 08:08:49.468 19221-19232/com.myapp V/MediaPlayer﹕ callback application 10-24 08:08:49.468 19221-19232/com.myapp V/MediaPlayer﹕ back from callback 10-24 08:08:50.469 19221-19233/com.myapp V/MediaPlayer﹕ message received msg=3, ext1=100, ext2=0 10-24 08:08:50.469 19221-19233/com.myapp […]

扬声器音量(报警)在耳机插入时减less

我试图通过扬声器通过最大音量的报警声道播放报警声。 为此,我正在使用AudioManager和MediaPlayer。 如果我插入耳机,警报仍然通过扬声器播放,但通过扬声器播放的警报音量急剧下降,无法达到我的目的。 有没有办法来防止这种减less量? 我使用的代码是这样的: public void startAlarmSound() { audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setSpeakerphoneOn(false); audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0); if (!alreadyPlaying) playAlarmSound(); alreadyPlaying = true; } private void playAlarmSound() { mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } }); try { mediaPlayer.setDataSource(this, Uri.parse("android.resource://com.mystuff.mine/" + R.raw.alarm_sound)); mediaPlayer.prepare(); } catch (IOException […]

媒体播放器得到静音/取消静音太迟

我已经设置了一个Checkbox ,现在如果没有选中mediaplayers播放器应该立即取消静音 ,当检查立即静音 ,现在的问题是当我检查/取消选中checkbox,声音不会立即静音,但最近我重新开始活动… 我怎么解决这个问题? 程序的主要代码: public class QuizActivity extends AppCompatActivity { private ActionBarDrawerToggle mToggle; private QuestionLibrary mQuestionLibrary = new QuestionLibrary(); private TextView mScoreView; private TextView mQuestionView; private Button mButtonChoice1; private Button mButtonChoice2; private Button mButtonChoice3; private String mAnswer; private int mScore = 0; private int mQuestionNumber = 0; Dialog dialog; Dialog dialog2; TextView closeButton; […]

RTSP直播在Android上

我尝试在Android上进行直播。 我尝试了很多方法,但都没有工作。 我该怎么做? 这是RTSP的例子: mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(KralStream.getTvStreamUrl().toString()); mMediaPlayer.setDisplay(holder); mMediaPlayer.prepareAsync(); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.setOnVideoSizeChangedListener(this); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setLooping(true); 执行:05-26 10:22:46.186: ERROR / MediaPlayerService(10157): 创buildPVPlayer 05-26 10:23:06.382: 错误/ PlayerDriver(10157):命令 PLAYER_INIT完成了一个错误或 info -1 05-26 10:23:06.382: 错误/ MediaPlayer(23800):错误(1, -1)05-26 10:23:06.382:错误/ MediaPlayer(23800):错误(1,-1) RTSP: VideoView videoView = (VideoView)findViewById(R.id.videoView1); Uri uri = Uri.parse("rtsp://strm-3.tr.medianova.tv/rkraltv/rkraltv"); videoView.setVideoURI(uri); videoView.start(); 它给出了这个消息: “对不起,这个video 不能玩了。“解雇; 05-26 10:40:08.979: ERROR / […]

MediaPlayer TimeoutException

我制作了一个Android应用,现在在Google Play上。 但现在有人报了一个崩溃,堆栈跟踪说: java.util.concurrent.TimeoutException: android.media.MediaPlayer.finalize() timed out after 10 seconds at android.media.MediaPlayer.native_finalize(Native Method) at android.media.MediaPlayer.finalize(MediaPlayer.java:1960) at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:187) at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170) at java.lang.Thread.run(Thread.java:856) 而且我的软件包中没有任何代码。 我使用MediaPlayer类。 任何人可以帮助我在这里? 杰西。

MediaPlayer的状态更改侦听器

在这个图中有很多州 : 但是对于标准的听众,我只能听一些基本的状态。 那么有可能听MediaPlayer的每个状态更改?

Samsung Galaxy S4(SGS4)上的Android Socket问题

我们最近已经收到三星Galaxy S4在我们的Android应用程序中播放audio的报道。 该应用程序在其他设备上很好。 audio使用MediaPlayer进行stream式传输。 它使用Android Socket方法保存在本地。 Logcat中的警告是由以下原因造成的: try { byte[] buffer = httpString.toString().getBytes(); int readBytes = -1; Log.d(LOG_TAG, "writing to client"); client.getOutputStream().write(buffer, 0, buffer.length); // Start streaming content. byte[] buff = new byte[1024 * 64]; while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) { client.getOutputStream().write(buff, 0, readBytes); } } 堆栈跟踪如下: D/StreamProxy(3913): downloaded D/StreamProxy(3913): […]

如何识别哪个MP3文件在MediaPlayer.OnCompletionListener中结束?

在我的ativity的onCreate()中,我设置了一个MediaPlayer.OnCompletionListener,然后播放一个MP3文件: MediaPlayer p = MediaPlayer.create(this, R.raw.intro); p.setOnCompletionListener(this); p.start(); 而当玩完时,我只是在这个事件中处理: public void onCompletion(MediaPlayer mp) { // handle completion } 所有漂亮和花花公子,但现在我想播放两个不同的MP3文件,并根据播放的文件处理完成不同 。 有没有办法从MediaPlayer参数告诉哪个片断结束?