2012-03-26 37 views
8

Tôi đang phát âm thanh trực tiếp và muốn có chức năng tạm dừng trình phát đa phương tiện và sau đó bắt đầu từ vị trí hiện tại. Pause() và Start() mặc định chỉ bắt đầu từ nơi nó dừng lại. Bất kỳ ý tưởng về làm thế nào để giữ cho vị trí hiện tại được cập nhật để Start() là ngay lập tức?Cập nhật Vị trí Bắt đầu MediaPlayer Khi Tạm dừng

+0

chỉ cần chỉnh sửa câu trả lời của tôi, hy vọng nó sẽ giúp – bughi

Trả lời

6

Bạn đã thử gọi hàm seekTo() chưa?

Bạn có thể cập nhật thông tin này bằng cách gọi seekTo() cứ nửa giây một lần hoặc lâu hơn với TimerTask, Nhưng tôi không biết tôi cảm thấy thế nào về điều này.

EDIT: Nếu bạn gọi hàm seekTo() sau mỗi 500 mili giây, để giữ nó di chuyển về phía trước, bạn sẽ gọi nó với currentPosition + thời gian đã trôi qua kể từ lần gọi cuối cùng (500 mili giây trong trường hợp này). Nhưng một lần nữa tôi không biết liệu đây có phải là sản phẩm tốt nhất hay không. Một cách khác là tạo một OnSeekCompleteListener để tạo phôi mới (currentPosition + timeEllapsed). Trong trường hợp này, bạn cần phải tính toán timeEllapsed như vậy: currentSystemTime - systemTimeOnLastCall

Từ http://developer.android.com/reference/android/media/MediaPlayer.html:

Vị trí phát lại có thể được điều chỉnh với một cuộc gọi đến seekTo (int).

Mặc dù cuộc gọi tìm kiếm không đồng bộ (int) trả về đúng cách, thao tác tìm kiếm thực tế có thể mất một lúc để hoàn thành, đặc biệt là cho âm thanh/video được phát trực tuyến. Khi hoạt động tìm kiếm thực sự hoàn thành, công cụ trình phát nội bộ gọi người dùng được cung cấp OnSeekComplete.onSeekComplete() nếu một OnSeekCompleteListener đã được đăng ký trước qua setOnSeekCompleteListener (OnSeekCompleteListener).

Xin lưu ý rằng seekTo (int) cũng có thể được gọi ở các trạng thái khác, chẳng hạn như trạng thái Đã chuẩn bị, Tạm dừng và Phát lại được hoàn thành.

Hơn nữa, vị trí phát hiện tại thực tế có thể được truy lục bằng lệnh gọi getCurrentPosition(), rất hữu ích cho các ứng dụng như Trình phát nhạc cần theo dõi tiến trình phát lại.

+0

có vẻ như getCurrentPosition() đang trả về vị trí mà tại đó nó bị tạm dừng, làm thế nào tôi sẽ nhận được vị trí của phần cuối luồng (nội dung trực tiếp) tới vị trí đó(). – Brianjs

+1

+1 cho "Mặc dù cuộc gọi tìm kiếm không đồng bộ (int) trả về đúng cách, hoạt động tìm kiếm thực tế có thể mất một lúc để hoàn thành". Điều này giải quyết được vấn đề của tôi. – Tiago

+0

gọi seekTo (0); sau stream.start(); đã làm cho tôi – aytek

1

Bạn gọi MediaPlayer.getCurrentPosition khi bạn tạm dừng MediaPlayer và gọi MediaPlayer.seekTo để đặt lại vị trí cho MediaPlayer khi bạn khởi động lại.

+0

Sẽ không chỉ trả lại cho tôi vị trí trong luồng khi Tạm dừng được nhấn? Ít nhất khi tôi thử nghiệm nó là những gì nó làm. Tôi muốn đi đến cuối luồng đến nội dung trực tiếp khi Bắt đầu được nhấn lại. – Brianjs

+2

Ồ, xin lỗi, tôi không để ý đến 'live'. Vì bạn đang phát trực tuyến âm thanh, bạn có thể chỉ đơn giản là 'stop' MediaPlayer khi người dùng tạm dừng nó,' reset' và 'start' MediaPlayer khi người dùng khởi động lại nó. Bạn sẽ luôn ở cuối luồng trực tiếp. – neevek

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