簡體   English   中英

Android VideoView在特定時間后停止流式傳輸

[英]Android VideoView stop streaming after specific time

我正在從Android中的此URL播放實時流

到目前為止,我已經設法在videoView中播放視頻,問題是視頻在23秒后恰好停止了,因此我使用videoview方法setOnCompletionListener (...)來重新啟動視頻,但是,這提供了糟糕的體驗對於觀看者來說,因為它每23秒停止一次並重新開始,所以也會錯過幾幀。

所以我的問題是“在播放當前緩沖的視頻時如何使videoView緩沖視頻的下一部分。

這是我的代碼

    public class TvActivity extends Activity {

    // Declare variables
    ProgressDialog pDialog;
    VideoView videoview;


    // Insert your Video URL
    String VideoURL = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the layout from video_main.xml
        setContentView(R.layout.videoview_main);
        // Find your VideoView in your video_main.xml layout
        videoview = (VideoView) findViewById(R.id.VideoView);
        // Execute StreamVideo AsyncTask
        VideoURL = "http://ns3622101.ip-149-202-201.eu:8000/live/fr443500/75019pa/286.ts";

        // Create a progressbar
        pDialog = new ProgressDialog(TvActivity.this);
        // Set progressbar title
        pDialog.setTitle("Video Streaming ");
        // Set progressbar message
        pDialog.setMessage("buffering ...");
        pDialog.setIndeterminate(true);
        pDialog.setCancelable(true);
        // Show progressbar
        pDialog.show();

        try {
            // Start the MediaController
            final MediaController mediacontroller = new MediaController(
                    TvActivity.this);
            mediacontroller.setAnchorView(videoview);

            // Get the URL from String VideoURL
            final Uri video = Uri.parse(VideoURL);
            videoview.setMediaController(mediacontroller);
            videoview.setVideoURI(video);
            videoview.requestFocus();
            videoview.setOnPreparedListener(new OnPreparedListener() {

                // Close the progress bar and play the video
                public void onPrepared(MediaPlayer mp) {
                    pDialog.dismiss();
                    videoview.start();
                }
            });

            videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    videoview.stopPlayback();
                    videoview.setVideoURI(video);
                    videoview.requestFocus();
                    videoview.start();
                }
            });

        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }


    }



}

當您從Live Stream URL播放視頻時,建議您使用第三方播放器流式傳輸視頻並緩沖視頻的下一部分,建議您使用Android GirrafePlayer,這是很好的播放器,請從此處獲取

as you are Streaming .ts file我認為android videoview不會流式傳輸該視頻文件,因此請嘗試使用.ts文件流式支持的播放器來流式傳輸該視頻文件。

對於實時流媒體以及離線音頻或視頻播放,我建議使用ExoPlayer

這是用於播放Google開發的音頻和視頻的很好的庫。 簡短的介紹如下:

“ ExoPlayer是適用於Android的應用程序級媒體播放器。它提供了Android MediaPlayer API的替代方案,可以在本地和Internet上播放音頻和視頻。ExoPlayer支持Android MediaPlayer API當前不支持的功能,包括DASH和SmoothStreaming自適應播放。 Mediaolayer API,ExoPlayer易於定制和擴展,可以通過Play商店應用程序更新進行更新。”

有關更多信息,請在Github上搜索ExoPlayer。

暫無
暫無

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

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