Articles of 媒体播放器

android.media.MediaPlayer缓冲问题

我正在尝试在Android应用程序上实现MediaPlayer,但是现在我有两个问题,这些问题不是很大的问题,但它们更令人烦恼,我必须解决它,仅适合我。 我为一个Activity实现了一个异步MediaPlayer + Controller,工作正常。 我的计划是显示MediaControl上缓冲的百分比。 这也有效。 但是现在,在我看到百分比之后,我看到了一个奇怪的行为:如果我寻找已经在缓冲区中的位置,缓冲将再次从这个位置开始。 这是一个已知和/或正常的行为/问题/function吗? 这里有更多细节: 我正在使用2.2 SDK这是我实现它的方式 public class Details extends Activity implements MediaPlayer.OnPreparedListener, MediaController.MediaPlayerControl { […] private void setPosition(int currentPos ){ position = currentPos; } […] public void onCreate(Bundle savedInstanceState) { […] mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() { @Override public void onBufferingUpdate(MediaPlayer mp, int progress) { setPosition(progress); } }); […] public int getBufferPercentage() […]

通知中的播放/暂停按钮图像,Android

我已经实现了音乐播放器,可以在播放流音频时触发自定义通知。 一切正常,我可以使用通知中的按钮播放/暂停音频。 唯一的问题是图像按钮:单击按钮无法更改图像以指示播放/暂停。 在RemoteReceiver中使用remoteViews.setImageViewResource()不起作用。 控件是使用BroadcastReceiver完成的,这是从玩家活动中触发通知的代码: public void setNotification(String songName){ String ns = Context.NOTIFICATION_SERVICE; NotificationManager notificationManager = (NotificationManager) getSystemService(ns); @SuppressWarnings(“deprecation”) Notification notification = new Notification(R.drawable.ic_launcher, null, System.currentTimeMillis()); RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.notification_view); notificationView.setImageViewResource(R.id.button1, R.drawable.pause); notificationView.setTextViewText(R.id.textView1, songName); //the intent that is started when the notification is clicked (works) Intent notificationIntent = new Intent(this, PlayerActivity.class); PendingIntent pendingNotificationIntent […]

在Android中获取音频文件持续时间的最佳方法是什么?

我正在使用SoundPool在我的应用程序中播放音频剪辑。 一切都很好,但我需要知道剪辑播放何时完成。 目前,我通过使用MediaPlayer实例获取每个剪辑的持续时间来在我的应用中跟踪它。 这工作正常,但加载每个文件两次看起来很浪费,只是为了得到持续时间。 我可以自己知道文件的长度(可从AssetFileDescriptor获得 )粗略计算持续时间,但我仍然需要知道采样率和通道数。 我看到了这个问题的两种可能解决方案: 弄清楚剪辑何时播放完毕(SoundClip似乎无法实现)。 有一个类可以只加载音频文件的标题,并给我采样率/通道数(理想情况下,样本计数,以获得确切的持续时间)。 有什么建议么? 谢谢,马克斯 我目前正在使用的代码(工作正常,但为此目的相当沉重): String[] fileNames = … MediaPlayer mp = new MediaPlayer(); for (String fileName : fileNames) { AssetFileDescriptor d = context.getAssets().openFd(fileName); mp.reset(); mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength()); mp.prepare(); int duration = mp.getDuration(); // … } 在旁注中,这个问题已被提出但没有得到答案。

在Android中流和播放.m4a流(Itunes预览url)

我想流式播放iTunes播放预览url,如http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a 。 我尝试使用AAC Decoder Android Library。 通过它我可以流式传输和播放AAC流url,如http://http.yourmuze.com:8000/play/paradise/l.aac 。 但是dnt流式传输m4aurl(Logcat说java.io.FileNotFoundException: http://a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a //a2.mzstatic.com/us/r1000/044/Music/e9/40/ec/mzm.evyxvimp.aac.p.m4a)。 我如何流式传输.m4a链接? 我的代码: public class AACPlayerActivity extends Activity implements OnClickListener,PlayerCallback{ private Button btnPlay; private ProgressBar progress; private Handler uiHandler; private MultiPlayer multiPlayer; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnPlay = (Button)findViewById(R.id.playButton); progress = (ProgressBar)findViewById(R.id.progress); […]

MediaButtonIntentReceiver无法在Android 4.0+中运行

目标是拦截来自耳机的广播以及最终的蓝牙,以响应来自耳机的不同types的点击以改变媒体播放器。 此解决方案适用于ICS之前的所有版本。 这是我尝试过的一些代码和事情: …. private BroadcastReceiver mediaButtonReceiver = new MediaButtonIntentReceiver(); …. public void onCreate() { … IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); mediaFilter.setPriority(2147483647); // this is bad…I know this.registerReceiver(mediaButtonReceiver, mediaFilter); … } public class MediaButtonIntentReceiver extends BroadcastReceiver { private KeyEvent event; public MediaButtonIntentReceiver() { super(); } @Override public void onReceive(Context context, Intent intent) { String intentAction […]

如何在Android上播放背景中的流式音频?

我有一个Android应用程序,使用MediaPlayer类从Internet播放流式音频。 当用户点击主页按钮运行其他应用程序时,如何让它继续在后台播放音频? 在运行其他应用程序时,我希望它继续播放音频。

播放简短的.wav文件 – Android

我想在触摸按钮后播放声音。 MediaPlayer运行正常,但我在某处读到这个库很长.wav(就像音乐一样)。 有没有更好的方法来打短.wav(2-3秒)?

如何在Android中获取音乐文件(MP3)的采样率和频率?

我正在开发android中的音频播放器。 所以我想添加播放歌曲的细节,即艺术家姓名,持续时间,比特率和采样频率。 我可以使用MediaStore.Audio.Media library获取音乐文件的艺术家姓名和持续时间。 但我无法获得同一文件的比特率和采样频率。 那么我怎么能得到相同的? 据我所知,它可以通过使用本机库来完成。 但不知道怎么办? 所以任何人都可以帮助我吗?

Android Media Player在调用Stop后重新启动音频

我能够流动音频并且没有任何问题地停止它,但是当我尝试在停止后再次启动它时,它不会启动并且我得到一个IllegalStateexception。 这是我正在做的事情: 开始玩 mediaPlayer.setDataSource(PATH); mediaPlayer.prepare(); mediaPlayer.start(); 停止播放 mediaPlayer.stop 现在,如果我想再次开始播放相同的媒体,我该怎么做? * PATH是连续运行的无线电台的URL。

Android MediaPlayer – 如何在STREAM_ALARM中播放?

我已经尝试使用以下代码在我的应用程序中设置媒体播放器的音频流,但是当我这样做时,我在模拟器中听不到声音。 如果我没有为播放器设置流,则音频播放正常。 我确定我使用这个错误但不能锻炼如何,任何帮助? MediaPlayer player = MediaPlayer.create(getApplicationContext(), R.raw.test_audio); AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); audioManager.getStreamVolume(AudioManager.STREAM_ALARM); audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); player.setAudioStreamType(AudioManager.STREAM_ALARM); player.start(); 注意:我已经为我的清单添加了MODIFY_AUDIO_SETTINGS权限。 谢谢!