2016-08-08 25 views
9

tôi đang chơi live stream từ this URL trong androidAndroid VideoView dừng phát trực tiếp sau một thời gian cụ thể

Cho đến nay, tôi đã được quản lý để phát video trong videoView, vấn đề là video dừng lại chính xác sau 23 giây, vì vậy tôi có sử dụng phương pháp videoview setOnCompletionListener (...) để bắt đầu lại video, tuy nhiên, điều này mang lại trải nghiệm không tốt cho người xem, bởi vì nó dừng sau mỗi 23 giây và bắt đầu lại, cũng bỏ lỡ nhiều khung hình.

Vì vậy, câu hỏi của tôi là "làm thế nào để làm cho videoView đệm phần tiếp theo của video trong khi chơi video đệm hiện hành.

đây là mã của tôi

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(); 
     } 


    } 



} 

Trả lời

3

Mã này sẽ được làm việc tốt, kiểm tra xem không hoạt động sau đó dán lỗi/vấn đề của bạn trong nhận xét.

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(); 
        mp.start(); 
       } 
      }); 

      videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
       @Override 
       public void onCompletion(MediaPlayer mp) { 
        mp.start(); 
        mp.pause(); 
        mp.setOnCompletionListener(this); 
       } 
      }); 

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


    } 



} 
+0

cảm ơn câu trả lời, bây giờ nó phát lại cùng một mức tăng video đệm và một lần nữa, mọi đề xuất sẽ giúp ích. – solid

+0

i cập nhật ans, thêm tạm dừng tuyên bố trong kiểm tra chưa đầy đủ là nó làm việc hay không –

+0

Tôi không chắc chắn tại sao đặt pause() sau khi bắt đầu() sẽ sửa bất kỳ suy nghĩ, bất kỳ cách nào thử nghiệm nó, kết quả đã tạm dừng video. – solid

5

Vì bạn đang phát video từ URL phát trực tuyến tôi đề xuất T bạn để Stream video bằng cách sử dụng của bên thứ ba Player để dòng video và cho đệm phần tiếp theo của phim, tôi đề nghị bạn sử dụng Android GirrafePlayer nó tốt chơi được nó từ here

as you are Streaming.tsfile tôi đừng nghĩ android videoview sẽ truyền trực tuyến tệp video này để cố gắng phát trực tuyến tệp video này bằng .ts hỗ trợ phát trực tuyến tệp.

+0

cảm ơn đề xuất của bạn, tôi đã thử nghiệm GirrafePlayer, nó thực sự là một trình chơi đẹp, nhưng ngay cả trong GirrafePlayer, các vấn đề vẫn tồn tại. Tôi nghĩ rằng vấn đề trong VideoView, chúng tôi cần một số cách để đệm phần video tiếp theo trong khi phần hiện tại đang phát. – solid

+1

Thực ra bạn đang phát tệp **. Ts ** và như tôi biết **. Ts ** tệp sẽ không phát trực tuyến. Nó chơi với playlist ** M3U8 ** tập tin ... làm R & D về điều này tôi dnt biết thêm về điều đó. –

1

Đối với Live streaming và cũng cho âm thanh off-line hoặc chơi video tôi đề nghị sử dụng ExoPlayer

Đó là thư viện rất tốt để chơi âm thanh và video được phát triển bởi Google. Giới thiệu ngắn gọn được cung cấp dưới đây:

"ExoPlayer là trình phát đa phương tiện cấp ứng dụng cho Android. Nó cung cấp giải pháp thay thế cho API MediaPlayer của Android để phát âm thanh và video cả cục bộ lẫn trên Internet. ExoPlayer hỗ trợ các tính năng hiện không được hỗ trợ bởi Android API MediaPlayer, bao gồm cả phát lại thích ứng DASH và SmoothStreaming. Không giống như API MediaPlayer, ExoPlayer dễ dàng tùy chỉnh và mở rộng và có thể cập nhật thông qua cập nhật ứng dụng Cửa hàng Play. "

để biết thêm thông tin, tìm kiếm ExoPlayer trên Github.

+0

cảm ơn câu trả lời, tôi sẽ kiểm tra và cung cấp kết quả. – solid

Các vấn đề liên quan