10

VideoView が HLS の再生を開始するのを待っている間に、ProgressDialog をユーザーに表示したいと考えています。これにはOnPreparedListenerを使用しようとしましたが、彼は早い段階でトリガーします(ビデオの開始時ではなく、プレーヤーがm3u8ファイルをダウンロードした後)。

VideoView player = (VideoView) findViewById(R.id.player);
String httpLiveUrl = "http://example.com/playlist.m3u8";

player.setVideoURI(Uri.parse(httpLiveUrl));
player.setMediaController(new MediaController(this));
player.requestFocus();

player.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
    progress.dismiss();
}
});

progress.show();
player.start();

私は別の適切なリスナーを見つけられませんでした.

4

2 に答える 2

15

ありがとうございます。次のハックで問題を解決しました:

videoView.setOnPreparedListener(new OnPreparedListener() {
    public void onPrepared(MediaPlayer mp) {

        final Handler handler = new Handler();
        videoPositionThread = new Runnable() {
             public void run() {
                try {
                    int duration = videoView.getCurrentPosition();
                    if (!(videoPosition == duration && videoView.isPlaying())) {
                        progress.dismiss();
                    }
                    videoPosition = duration;
                    handler.postDelayed(videoPositionThread, 1000);
                } catch (IllegalArgumentException e) {
                    Log.d(TAG, e.getMessage(), e);
                }
            }
        };
        handler.postDelayed(videoPositionThread, 0);
    }
});
于 2012-12-12T12:25:56.187 に答える
1

私は同じ問題を経験し、自分のニーズに合った解決策を見つけました。たぶん、これもあなたに適しています。少なくとも、Android 2.2、2.3、および 4.2 でテストおよび動作しています。

これは、videoView の現在の位置が 0 より大きいかどうかを定期的に確認することを目的としています。これはミハイルの答えの修正です。ミハイルにも感謝します:)

public class VideoViewActivity extends Activity {

    // Declare variables
    ProgressDialog pDialog;
    VideoView videoview;
    Runnable videoPositionThread;

    // Insert your Video URL
    String VideoURL = "enter your video rtsp url here";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videoview_main);
        videoview = (VideoView) findViewById(R.id.VideoView);

        pDialog = new ProgressDialog(VideoViewActivity.this);
        pDialog.setTitle("Android Video Streaming Tutorial");
        pDialog.setMessage("Buffering...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();

        Uri video = Uri.parse(VideoURL);
        videoview.setVideoURI(video);
        videoview.start();

        final Handler handler = new Handler();
        videoPositionThread = new Runnable() {
            public void run() {
                int currentPosition = videoview.getCurrentPosition();

                if (currentPosition > 0)
                    pDialog.dismiss();
                else
                    handler.postDelayed(videoPositionThread, 1000);
            }
        };

        handler.postDelayed(videoPositionThread, 0);
    }
}
于 2014-10-18T08:47:48.743 に答える