Articles of android mediaplayer

Android:在媒体播放器活动中正确使用PrepareAsync()

我正在学习本教程,但是prepareAsync的用法并不清楚,我的代码也没有输出任何音频。 我正在使用prepareAsync(),因为我的mp3在线,我不想在媒体播放器准备期间锁定活动。 你能解释一下prepareAsync的基本用法吗? package com.example.simplemediaplayer.app; import android.media.AudioManager; import android.media.MediaPlayer; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import java.io.IOException; public class MediaPlayerActivity extends ActionBarActivity implements MediaPlayer.OnPreparedListener { private static final String TAG = “tag”; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_media_player); String url = “http://www.brothershouse.narod.ru/music/pepe_link_-_guitar_vibe_113_club_mix.mp3”; // your URL here MediaPlayer […]

调用onStop()时MediaPlayer抛出IllegalStateException

我有一个AlertDialog ,当我点击时停止播放声音,但在某些设备上,调用onStop()会抛出IllegalStateException ,但为什么呢? 如果对话框已启动,则表示正在播放声音,因此应该是音频未播放的情况。 我暂时把它包围起来,但这会导致什么呢? alert.setPositiveButton(“YES”, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { try{ mp.stop(); //error mp.reset(); mp.release(); }catch(Exception e){ Log.d(“Nitif Activity”, e.toString()); } v.cancel(); popupMessage(); finish(); } });

如何维护MediaPlayer的单个实例

我正在使用Android媒体播放器类在我的Android应用程序中播放通知声音。 MediaPlayer player = MediaPlayer.create(getApplicationContext(), R.raw.notify); player.setLooping(false); player.start(); 我需要在不同的活动中播放不同的通知声音,所以每次我需要播放声音我需要创建媒体播放器实例然后我需要说开始。 但是,不是这样做,我如何在整个应用程序中维护媒体播放器的单个实例,并在所有活动中使用它来播放声音。 有人可以建议我更好的实施方式。 从我的角度来看,我将创建一个单例类,我将在此类中添加所有与MediaPlayer相关的函数。 谢谢。

MediaPlayer有环绕效果?

是否有可能强制Android MediaPlayer在播放像默认播放器(至少在三星设备上)的轨道时模拟5.1环绕声? 任何有用的链接和建议值得赞赏,花了很多时间寻找解决方案,但仍然没有find任何结果。

如何从android mediaplayer分离/释放surfaceview

我有一个在后台服务中运行的mediaplayer实例。 在我的主要活动中,我有一个surfaceview。 当活动启动并创建了surfaceview时,我绑定到服务并将mediaplayer的显示表面设置为我的主活动的surfaceview。 我用mPlayer.setSurface(sv.getHolder().getSurface()); video显示,到目前为止一切正常。 当我的surfaceview被销毁时,在surfaceDestroyed()回调中,我尝试通过调用mPlayer.setSurface(null);从mediaplayer中分离surfaceview mPlayer.setSurface(null); 。 问题是,当我这样做时,我从媒体播放器收到错误(错误代码1)。 所以我的问题是,在我设置了一个MediaPlayer对象后,我用mPlayer.setSurface(sv.getHolder().getSurface());设置了mPlayer.setSurface(sv.getHolder().getSurface()); 有没有办法释放或分离该surfaceview而不停止或重新初始化mediaplayer对象? 提前致谢。

如何为早期版本的Android实现setVideoScalingMode

MediaPlayer.setVideoScalingMode(int模式)适用于API 16及更高版本,允许在VIDEO_SCALING_MODE_SCALE_TO_FIT和VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING之间进行选择。 有没有办法在API 16之前为Android实现相同的function? 我试图设置MediaPlayer使用的SurfaceView的尺寸,但MediaPlayer裁剪原始video以适合SurfaceView任何尺寸。

Android MediaPlayer在启动时崩溃

我有一段代码在某些设备上运行得很好(三星Galaxy S2,Acer A510),但在其他设备(HTC One S)上,它使MediaPlayer崩溃。 导致问题的代码: if(file.exists()) { mediaPlayer = MediaPlayer.create(this, Uri.fromFile(file)); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setVolume(100, 100); mediaPlayer.start(); }; 我尝试在onPrepared回调或其他创建mediaPlayer的方法中启动它。 它们都可以在除HTC之外的任何设备上正常工作。 logcat错误: 06-20 15:33:13.810: W/AudioSystem(6021): AudioFlinger server died! 06-20 15:33:13.810: W/IMediaDeathNotifier(6021): media server died 06-20 15:33:13.810: E/MediaPlayer(6021): error (100, 0) 06-20 15:33:13.810: E/MediaPlayer(6021): Mediaserver died in 16 state 06-20 15:33:13.820: I/ServiceManager(6021): Waiting for service media.audio_flinger… 06-20 15:33:14.821: […]

Android MediaPlayer错误(1,-38)和(-38,0)

我正在使用MediaPlayer组件,我得到错误(1,-38)和(-38,0)。 我正在使用player.prepareAsync(),我在onPrepared()方法中调用了player.start()。 奇怪的是,当我第四次复制video时,我收到了错误。 我不知道发生了什么。 有人可以帮帮我吗? 这是我的代码: public class VideoPlayerActivity extends Activity implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener, VideoControllerView.MediaPlayerControl, OnCompletionListener, OnErrorListener { SurfaceView videoSurface; MediaPlayer player; VideoControllerView controller; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.video_player); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); if(player != null) { player.release(); player = null; } player = new MediaPlayer(); controller= new VideoControllerView(this); try { player.setAudioStreamType(AudioManager.STREAM_MUSIC); String path […]

Android mediaPlayer在暂停时无法正常工作

seekTo()方法在播放mediaPlayer时效果很好。 如果mediaPlayer暂停,当我寻找一个位置并调用start() ,它就会开始播放暂停的位置。 我的代码如下,在logcat中,我可以看到它的搜索。 @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub if(player == null || player.mediaPlayer == null){ return; } Log.e(“player status”, “status is ” + PlayerStatusCache.playerStatus); if(durationProgress < player.mediaPlayer.getDuration()){ player.mediaPlayer.seekTo(durationProgress); Log.e("player", "seeking"); } else { player.mediaPlayer.seekTo(player.mediaPlayer.getDuration() – 1000); } }

Android在MediaPlayer中显示video流并使用MediaCodec进行编码

问题:我有来自GoPro相机的video流,格式为.m3u8。 我需要在应用程序中显示流的内容,然后流式传输video。 对于流媒体,我有与MediaCodec和ffmpeg一起使用的库。 我应该能够流式传输MediaCodec的outputBuffer。 我可以在SurfaceView上使用MediaPlayer流式传输video,没问题。 真正的困难在于使用MediaCodec。 我可以初始化MediaCodec,获取表面并将其添加到MediaPlayer – 蒸汽播放 – 我可以听到声音。 现在的问题是: 在SurfaceView上显示流 – 或MP和MC可以使用的任何其他视图。 从Surface到SurfaceView / TextureView显示数据的最佳方法是什么? 我无法从MediaCodec获取数据。 我只需要支持5.0+设备,所以我尝试使用MediaCodec.Callback。 但我每次都会得到错误。 我还没有find错误的含义。 我可以做些什么来配合Callback工作? 是否有任何“简单”的方法,或者我必须深入到缓冲区和表面,如谷歌Grafika? 以下是我得到的错误: E/ACodec﹕ [OMX.qcom.video.encoder.avc] storeMetaDataInBuffers (output) failed w/ err -2147483648 1877-1904/com.example.marek.goprorecorder E/ACodec﹕ [OMX.qcom.video.encoder.avc] ERROR(0x80001009) 07-15 15:54:47.411 1877-1904/com.example.marek.goprorecorder E/ACodec﹕ signalError(omxError 0x80001009, internalError -2147483648) 07-15 15:54:47.411 1877-1903/com.example.marek.goprorecorder E/MediaCodec﹕ Codec reported err 0x80001009, actionCode 0, […]