gpt4 book ai didi

android 检查媒体播放器是否在 TextureView 中完成

转载 作者:行者123 更新时间:2023-11-30 01:48:03 26 4
gpt4 key购买 nike

我有一个 TextureView。我可以从我的 TextureView 中的评估文件夹播放视频。现在我想检查视频是否完成。我写了 setOnCompletionListener 但没有工作。这是我的来源

 private void playVideoAnimation()
{
textureView.setVisibility(View.VISIBLE);
mMediaPlayer = new MediaPlayer();

textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) {
Surface surface = new Surface(surfaceTexture);

try {
Log.e("FILE_NAME",FILE_NAME);
AssetFileDescriptor afd = getAssets().openFd(FILE_NAME);

mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mMediaPlayer.setSurface(surface);
mMediaPlayer.setLooping(true);
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});

mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {

Log.e("FILE_NAME", "Finished");
}

});



} catch (IllegalArgumentException e) {
Log.d(TAG, e.getMessage());
} catch (SecurityException e) {
Log.d(TAG, e.getMessage());
} catch (IllegalStateException e) {
Log.d(TAG, e.getMessage());
} catch (IOException e) {
Log.d(TAG, e.getMessage());
}
}

@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {

}

@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {

return false;
}

@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {

}
});
}

我还在 setSurfaceTextureListener 之外编写了 setOnCompletionListener 监听器,但也无法正常工作。我该如何解决我的问题?如果有人知道解决方案请帮助我

最佳答案

很可能,您的 OnCompletionListener 从未被调用,因为以下行:

mMediaPlayer.setLooping(true);

根据MediaPlayer documentation :

When the playback reaches the end of stream, the playback completes.

  • If the looping mode was being set to true with setLooping(boolean), the MediaPlayer object shall remain in the Started state.
  • If the looping mode was set to false, the player engine calls a user supplied callback method, OnCompletion.onCompletion(), if a OnCompletionListener is registered beforehand via setOnCompletionListener(OnCompletionListener). The invoke of the callback signals that the object is now in the PlaybackCompleted state.
  • While in the PlaybackCompleted state, calling start() can restart the playback from the beginning of the audio/video source.

如果您希望在MediaPlayer 完成播放并且还循环播放时获得回调,您可以更改您的实现以遵循第三个项目符号中给出的建议要点:删除 mMediaPlayer.setLooping(true) 并在您的 OnCompletionListener 中调用 mp.start() 从头开始​​播放。

关于android 检查媒体播放器是否在 TextureView 中完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33434171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com