私のアプリでは、多くの短い (1 ~ 2 秒) ムービーが外部ストレージに保存されています。1 つのアクティビティでそれらのビデオが表示されます。問題は、アクティビティを作成しているときはすべて問題ないことです。しかし、動画を再生したり、動画を変更したりすると、音声のみで黒い画面が表示されることがあります (動画の最初の部分ですが、動画が 1 ~ 2 秒の場合は許容できません)。
一部の投稿では、AsyncTask を使用してビデオを再生することを提案しています。残念ながら、それは役に立ちませんでした。
ビデオの再生は常にアクティビティの作成で機能するため、ユーザーがビデオを再生または変更したい場合に、アクティビティ全体をリロードしていくつかの実験を行いました。高速ビデオ (アクティビティ) の変更で、「ビデオを再生できません」というメッセージが表示されました。
Androidの外部メモリ管理と関係があるのでしょうか?誰かが私が間違っていることを知っていますか?
私が使用しているコード:
//on button click
public void navigateToNext(View view) {
setNextVideo();
refreshPlayer();
}
public void play(View view) {
refreshPlayer();
}
public void refreshPlayer(){
if(playingTask != null && !playingTask.isCancelled()){
playingTask.cancel(false);
}
initPlayingTask();
}
private void initPlayingTask() {
playingTask = new AsyncTask(){
@Override
protected void onPreExecute() {
super.onPreExecute();
String videoPath = getActualVideoPath();
videoView.setVideoPath(videoPath);
videoView.requestFocus();
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
}
@Override
protected Object doInBackground(Object... params) {
while(!this.isCancelled() && videoView.isPlaying());
return null;
}
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
}
};
playingTask.execute();
}
mediaPlayers と surface を使ってみました。他のmediaPlayerをキャッシュしようとしました(次のビデオのためにmediaplayerを準備しているので、再生したくないときはプレーヤーを変更しました)。何も役に立たないようでした。
動画はmp4です。