我想在播放期间的某个时刻将MediaPlayer
中的视频方式切换为TextureView
的{{1}}。但我得到的只是一个黑屏(声音播放)。我确定Surface
的大小没问题,所以事实并非如此。
如果我在TextureView
上调用Surface
之前设置TextureView
的prepare
,则会显示视频。
所以看来调用MediaPlayer
并应用表面的顺序至关重要。
有趣的是,如果prepare
一切正常(无论我何时设置SurfaceView
的持有人:在准备完成之前或之后)。
有没有办法在播放期间将TextureView设置为MediaPlayer?在必须处理进度的同时调用SurfaceView
并重新创建它将非常不方便。
答案 0 :(得分:1)
WAMP connection closed unreachable { reason: null,
message: null,
retry_delay: 1.8090544409276008,
retry_count: 1,
will_retry: true }
你的onPrepared听众就像这样
@Override
public void onSurfaceTextureAvailable(final SurfaceTexture surface, final int width, final int height) {
s = new Surface(surface);
Thread play = new Thread(new Runnable() {
@Override
public void run() {
try {
player = new MediaPlayer();
player.setSurface(s);
player.setDataSource(vidAddress);
player.prepare();
player.setOnPreparedListener(MainActivity.this);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setOnCompletionListener(MainActivity.this);
player.setScreenOnWhilePlaying(true);
Log.e("mediaplayer", "true");
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
play.start();
}
onSreate
中的setSurfaceTextureListenerpublic void onPrepared(MediaPlayer mp) {
if (!player.isPlaying()) {
player.start();
}
}
我希望这会有所帮助:)