簡體   English   中英

音頻播放但視頻未在VideoView Android中顯示(低互聯網中的黑屏)

[英]Audio Playing But Video not Showing in VideoView Android (Black Screen in Low Internet)

我正在研究Android中的視頻流。 當我想在低互聯網速度下播放視頻視頻時,VideoView顯示黑屏並沒有出現,但音頻播放正常。 我看到這些鏈接link1link2 但這些鏈接無法幫助我。 這是我的代碼快照: -

private void playvideo(String url){
    final MediaController mediacontroller;
    try {
        mediacontroller = new MediaController(MainActivity.this);
        mediacontroller.setAnchorView(videoView);
        final Uri video = Uri.parse(url);
        videoView.setMediaController(mediacontroller);
        videoView.setVideoURI(video);
        videoView.requestFocus();
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            // Close the progress bar and play the video
            public void onPrepared(MediaPlayer mp) {
                mp.start();
                mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                    @Override
                    public boolean onError(MediaPlayer mediaPlayer, int what, int extra) {
                        if (extra == MediaPlayer.MEDIA_ERROR_SERVER_DIED
                                || extra == MediaPlayer.MEDIA_ERROR_MALFORMED) {
                            Log.e(TAG , "MEDIA_ERROR_SERVER_DIED && MEDIA_ERROR_MALFORMED");
                            Toast.makeText(MainActivity.this , "Server Died or Malformed" , Toast.LENGTH_LONG).show();
                            return true;
                        } else if (extra == MediaPlayer.MEDIA_ERROR_IO) {
                            Log.e(TAG , "MediaPlayer.MEDIA_ERROR_IO");
                            Toast.makeText(MainActivity.this , "Media Error IO" , Toast.LENGTH_LONG).show();
                            return true;
                        }else if (extra == MediaPlayer.MEDIA_ERROR_UNKNOWN){
                            Log.e(TAG , ".MEDIA_ERROR_UNKNOWN");
                            Toast.makeText(MainActivity.this , "MEDIA ERROR UNKNOWN" , Toast.LENGTH_LONG).show();
                            return true;
                        }
                        return false;
                    }
                });
                mp.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
                    @Override
                    public void onBufferingUpdate(MediaPlayer mediaPlayer, int percentage) {
                        Log.e(TAG , "onBufferingUpdate :- " + percentage);
                    }
                });
                progressBar.setVisibility(View.GONE);
                videoView.start();
            }
        });
    } catch (Exception e) {
        Log.e("Error", e.getMessage());
        progressBar.setVisibility(View.GONE);
        Toast.makeText(getApplicationContext() ,"URL is Wrong Test with other URL" , Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
}

因為音頻和視頻都是不同的流,所以在低互聯網上它能以某種方式下載音頻流而不是視頻流,是嗎? 所以在這種情況下,可以向用戶顯示一條消息,如“你有低互聯網再試一次”而不播放音頻?

謝謝

嘗試使用Exoplayer,它是Android的MediaPlayer API的替代品,用於在本地和通過Internet播放音頻和視頻。

https://github.com/google/ExoPlayer

我建議你使用SurfaceView。

surfaceView = (SurfavceView) findView.....;
holder = surfaceView.getHolder();
holder.addCallback(this); // implement SurfaceHolder.Callback methods

然后在surfaceCreated方法中:

mediaPlayer.setDisplay(holder);
mediaPlayer.setDataSource(mVideoUrl);
mediaPlayer.prepareAsync();

您也可以使用https://github.com/anthorlop/EasyExoPlayer

它使用ExoPlayer for Android SDK> = 16和MediaPlayer for Android <16。

我希望這個對你有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM