MediaPlayer 没有准备
MediaPlayer not preparing
我的代码运行良好,然后我在我的项目中编写了另一个 class,返回尝试完全相同的代码并开始出现错误。
这是我的代码:
public class myMediaPlayer extends Activity implements TextureView.SurfaceTextureListener,
MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener,
MediaPlayer.OnPreparedListener, MediaPlayer.OnVideoSizeChangedListener{
private TextureView mTextureView;
private MediaPlayer mMediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_channel_player);
mTextureView = (TextureView)findViewById(R.id.Video);
mTextureView.setSurfaceTextureListener(this);
Log.d("debug","Listener Set");
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Surface s = new Surface(surface);
Log.d("debug", "Surface Texture Available");
try {
mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.t));
} catch (IOException e) {
Log.d("IOException", "setDataSource method faulty");
}
Log.d("debug", "data source set");
mMediaPlayer.setSurface(s);
Log.d("debug", "Surface set");
try {
mMediaPlayer.prepare();
} catch (IOException e) {
Log.d("IOException", "Prepare method problem");
}
Log.d("debug", "prepared");
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
Log.d("debug", "listeners set");
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
//TODO
Log.d("Debug","SurfaceTextureSizeChanged");
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
Log.d("Debug","SurfaceTextureDestroyed");
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
//TODO
Log.d("Debug","SurfaceTextureUpdated");
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
Log.d("Debug","BufferingUpdate");
}
@Override
public void onCompletion(MediaPlayer mp) {
Log.d("Debug", "Media Player Complete");
}
@Override
public void onPrepared(MediaPlayer mp) {
Log.d("Debug","Media Player Prepared");
mp.start();
}
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
Log.d("Debug","VideoSizeChanged");
}
@Override
public void onDestroy() {
Log.d("Debug","Activity Destroyed");
if (mMediaPlayer != null) mMediaPlayer.release();
}
}
这与演示所做的几乎完全相同。它工作了一段时间,但突然 prepare 方法出错(我在我的日志中得到 "prepare method error")。有人知道为什么它突然停止工作了吗?
这是 LogCat 输出:
01-12 20:18:10.530 23003-23003/com.edifyelectronics.tv.app
W/ActivityThread﹕ Application com.edifyelectronics.tv.app can be
debugged on port 8100... 01-12 20:18:10.559
23003-23003/com.edifyelectronics.tv.app D/debug﹕ Listener Set 01-12
20:18:10.570 23003-23023/com.edifyelectronics.tv.app
D/OpenGLRenderer﹕ Render dirty regions requested: true 01-12
20:18:10.579 23003-23003/com.edifyelectronics.tv.app D/Atlas﹕
Validating map... 01-12 20:18:10.608
23003-23023/com.edifyelectronics.tv.app I/Adreno-EGL﹕
: QUALCOMM Build: 10/28/14, c33033c,
Ia6306ec328 01-12 20:18:10.609
23003-23023/com.edifyelectronics.tv.app I/OpenGLRenderer﹕ Initialized
EGL, version 1.4 01-12 20:18:10.637
23003-23023/com.edifyelectronics.tv.app D/OpenGLRenderer﹕ Enabling
debug mode 0 01-12 20:18:10.742
23003-23003/com.edifyelectronics.tv.app D/debug﹕ Surface Texture
Available 01-12 20:18:11.080 23003-23003/com.edifyelectronics.tv.app
D/debug﹕ data source set 01-12 20:18:11.082
23003-23003/com.edifyelectronics.tv.app D/debug﹕ Surface set 01-12
20:18:11.176 23003-23021/com.edifyelectronics.tv.app E/MediaPlayer﹕
error (1, -2147483648) 01-12 20:18:11.177
23003-23003/com.edifyelectronics.tv.app D/IOException﹕ Prepare method
problem 01-12 20:18:11.177 23003-23003/com.edifyelectronics.tv.app
D/debug﹕ prepared 01-12 20:18:11.177
23003-23003/com.edifyelectronics.tv.app D/debug﹕ listeners set
不是答案或解决方案,但什么也没做,它突然又开始工作了。
我的代码运行良好,然后我在我的项目中编写了另一个 class,返回尝试完全相同的代码并开始出现错误。
这是我的代码:
public class myMediaPlayer extends Activity implements TextureView.SurfaceTextureListener,
MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener,
MediaPlayer.OnPreparedListener, MediaPlayer.OnVideoSizeChangedListener{
private TextureView mTextureView;
private MediaPlayer mMediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_channel_player);
mTextureView = (TextureView)findViewById(R.id.Video);
mTextureView.setSurfaceTextureListener(this);
Log.d("debug","Listener Set");
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Surface s = new Surface(surface);
Log.d("debug", "Surface Texture Available");
try {
mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.t));
} catch (IOException e) {
Log.d("IOException", "setDataSource method faulty");
}
Log.d("debug", "data source set");
mMediaPlayer.setSurface(s);
Log.d("debug", "Surface set");
try {
mMediaPlayer.prepare();
} catch (IOException e) {
Log.d("IOException", "Prepare method problem");
}
Log.d("debug", "prepared");
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
Log.d("debug", "listeners set");
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("error", e.getMessage());
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
//TODO
Log.d("Debug","SurfaceTextureSizeChanged");
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
Log.d("Debug","SurfaceTextureDestroyed");
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
//TODO
Log.d("Debug","SurfaceTextureUpdated");
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
Log.d("Debug","BufferingUpdate");
}
@Override
public void onCompletion(MediaPlayer mp) {
Log.d("Debug", "Media Player Complete");
}
@Override
public void onPrepared(MediaPlayer mp) {
Log.d("Debug","Media Player Prepared");
mp.start();
}
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
Log.d("Debug","VideoSizeChanged");
}
@Override
public void onDestroy() {
Log.d("Debug","Activity Destroyed");
if (mMediaPlayer != null) mMediaPlayer.release();
}
}
这与演示所做的几乎完全相同。它工作了一段时间,但突然 prepare 方法出错(我在我的日志中得到 "prepare method error")。有人知道为什么它突然停止工作了吗?
这是 LogCat 输出:
01-12 20:18:10.530 23003-23003/com.edifyelectronics.tv.app W/ActivityThread﹕ Application com.edifyelectronics.tv.app can be debugged on port 8100... 01-12 20:18:10.559 23003-23003/com.edifyelectronics.tv.app D/debug﹕ Listener Set 01-12 20:18:10.570 23003-23023/com.edifyelectronics.tv.app D/OpenGLRenderer﹕ Render dirty regions requested: true 01-12 20:18:10.579 23003-23003/com.edifyelectronics.tv.app D/Atlas﹕ Validating map... 01-12 20:18:10.608 23003-23023/com.edifyelectronics.tv.app I/Adreno-EGL﹕ : QUALCOMM Build: 10/28/14, c33033c, Ia6306ec328 01-12 20:18:10.609 23003-23023/com.edifyelectronics.tv.app I/OpenGLRenderer﹕ Initialized EGL, version 1.4 01-12 20:18:10.637 23003-23023/com.edifyelectronics.tv.app D/OpenGLRenderer﹕ Enabling debug mode 0 01-12 20:18:10.742 23003-23003/com.edifyelectronics.tv.app D/debug﹕ Surface Texture Available 01-12 20:18:11.080 23003-23003/com.edifyelectronics.tv.app D/debug﹕ data source set 01-12 20:18:11.082 23003-23003/com.edifyelectronics.tv.app D/debug﹕ Surface set 01-12 20:18:11.176 23003-23021/com.edifyelectronics.tv.app E/MediaPlayer﹕ error (1, -2147483648) 01-12 20:18:11.177 23003-23003/com.edifyelectronics.tv.app D/IOException﹕ Prepare method problem 01-12 20:18:11.177 23003-23003/com.edifyelectronics.tv.app D/debug﹕ prepared 01-12 20:18:11.177 23003-23003/com.edifyelectronics.tv.app D/debug﹕ listeners set
不是答案或解决方案,但什么也没做,它突然又开始工作了。