2011-01-20 37 views
60

Tôi có đoạn mã sau để quay video dưới dạng tài nguyên thô, bắt đầu phát video và lặp lại nhưng tôi cần video lặp liên tục như bây giờ khi kết thúc clip và bắt đầu clip một lần nữa sự chuyển đổi giữa các nguyên nhân gây ra một nhấp nháy cho một phần hai, mà tôi thực sự không thể có cho ứng dụng của tôi.Vòng lặp video liền mạch với VideoView

public class Example extends Activity { 
    VideoView vv; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     vv = (VideoView)findViewById(R.id.VideoView01); 

     //Video Loop 
     vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      public void onCompletion(MediaPlayer mp) { 
       vv.start(); //need to make transition seamless. 
      } 
     }); 

     Uri uri = Uri.parse("android.resource://com.example/" 
       + R.raw.video); 

     vv.setVideoURI(uri); 
     vv.requestFocus();  
     vv.start(); 
    } 
} 

Đoạn clip chỉ dài 22 giây nhưng được tạo liền mạch để có thể hoạt động mà không bị chậm trễ.

Trả lời

149

Hãy thử điều này nó sẽ làm việc 100%


videoView.setOnPreparedListener(new OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
     mp.setLooping(true); 
    } 
}); 
+0

Vẫn còn bộ đệm cho mỗi vòng lặp, nó không trơn tru như phương pháp trước đây cho tôi – Pencilcheck

+0

@Pencilcheck đây là vòng lặp đơn giản cho video cục bộ, nếu bạn muốn sử dụng nó cho url và đệm nó, thì bạn phải thực hiện logic khác. – PravinDodia

+0

FYI cho mọi người, tính năng này cũng không hoạt động đối với video địa phương. Nếu bạn phát video có âm thanh không đổi, bạn có thể nghe thấy tiếng tạm dừng giữa các vòng lặp. – Edison

4

Tạm dừng cho phần cơ bản MediaPlayer để làm mới bộ đệm của nó. Thời gian sử dụng sẽ tùy thuộc vào một số yếu tố, nhiều yếu tố nằm ngoài tầm kiểm soát của bạn (ví dụ: tốc độ CPU, tốc độ lưu trữ flash trên bo mạch).

Một trong những bạn có thể kiểm soát là đưa video của bạn ra khỏi tài nguyên và vào hệ thống tệp. Tài nguyên được lưu trữ trong APK, là tệp ZIP, do đó việc trích xuất video theo cách này có thể mất thêm thời gian.

Bạn có thể cần phải chuyển từ VideoView và sử dụng SurfaceView với hai MediaPlayers, xen kẽ giữa chúng - trò chơi đang phát trong khi chế độ tiếp theo đang chuẩn bị, vì vậy khi phát kết thúc, bạn có thể chuyển sang trình phát mới. Tôi đã không cố gắng điều này, và vì vậy tôi không biết những gì các chi nhánh có thể được. Tuy nhiên, tôi biết rằng kỹ thuật này thường được sử dụng để phát lại âm thanh để chuyển đổi từ clip này sang clip khác.

+0

Nếu tôi nhớ không lầm thì MediaPlayers giữ cho surfaceViews khi nhận được chuẩn bị, vì vậy bạn không thể chuẩn bị một MediaPlayer trong khi đang sử dụng nó. – Edison

0

Trả lời câu hỏi này là xóa âm thanh khỏi video và chuyển đổi âm thanh đó thành tệp .ogg có thể được lặp liên tục và sau đó sử dụng video không có âm thanh vòng lặp và hoạt động.

1

Ít trễ, nhưng có lý do nào khiến bạn không thể sử dụng những điều sau đây?

MediaPlayer.setLooping(true); 
+1

Đây là một thời gian dài trước đây, nhưng với điều đó tôi nghĩ rằng có một sự tạm dừng đáng chú ý trong video khi vòng lặp xung quanh được gọi. – SamRowley

1

Không chắc nếu điều này giúp năm sau, nhưng tôi đã sử dụng

vv.start(); 
vv.setOnCompletionListener (new MediaPlayer.OnCompletionListener() { 

@Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 
    vv.start(); 
    } 
}); 

và nó có một vòng lặp liền mạch

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