0

私のアプリでは、多くの短い (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です。

4

1 に答える 1

0

mp.start() --> videoView.start(); を置き換えるだけです。onPrepared で、または onPreparedListener を実装せずに試すこともできます

        videoView.setVideoPath(videoPath);
        videoView.requestFocus();

使用する::

        videoView.start(); // As you are using mediaplayer to start that's why it's only playing sound with black screen

            OR

        videoView.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared() {
                videoView.start(); // As you are using mediaplayer to start that's why it's only playing sound with black screen
            }
        });

それがあなたのために働くことを願っています!!

于 2013-01-02T13:59:00.327 に答える