7

Tôi đang gặp phải sự cố bất cứ khi nào một luồng được phát bởi ứng dụng của tôi trên Android 4.0+ phương pháp OnPrepare từ MediaPlayer.OnPreparedListener được gọi ngay cả trước khi luồng được tải và do đó tôi không thể chỉ ra người dùng rằng quá trình tải xuống/tải xuống luồng đang diễn ra. I have already found a question of the same kind but not answered Đây là những gì tôi đang làm.Android - MediaPlayer trên Chuẩn bị được gọi ngay cả trước khi luồng được chuẩn bị trên Android 4.0+

@Override 
    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     playVideo(someRtspUrl); 
    } 
    private void playVideo(String url) { 
     // if app is running on Google TV then change RTSP link to HLS 
     if (url.contains("rtsp")) { 

      // split the RTSP URL and make it as HLS 
      String videoUrlParts[] = url.split("\\?"); 
      url = videoUrlParts[0].replace("rtsp", "http") + "/playlist.m3u8"; 

      if (videoUrlParts.length > 1) 
       url += "?" + videoUrlParts[1]; 
     } mVideoView.setVideoURI(Uri.parse(url)); 
     mVideoView.requestFocus(); 
     mVideoView.setOnCompletionListener(this); 
     mVideoView.setOnPreparedListener(this); 

    } 



    @Override 
     public void onPrepared(MediaPlayer player) { 
      dismissProgressDialog(); 
      mVideoView.start(); 
     } 

Mã này được làm việc tốt trên Google TV và Android 3.0+ khác và < 4.0 + thiết bị

Trả lời

1

Tôi không có nhiều kinh nghiệm với media player. Nhưng một vài đề xuất/truy vấn từ phía tôi

  1. Không có cuộc gọi nào để chuẩn bị. Nếu bạn đang làm điều đó, bạn đã thử preparAsync chưa?
  2. Bạn hiện không sử dụng phiên bản trình phát đa phương tiện được chuyển tới cuộc gọi lại được chuẩn bị sẵn. Có thể có một cơ hội mà bạn đang cố gắng để bắt đầu sai mediaplayer.
+0

Cảm ơn các đề xuất/truy vấn @gvmani. cho người thứ hai tôi sẽ nói rằng tôi đang chơi đối tượng orignal/main. cho cái đầu tiên. chuẩn bị đồng bộ cũng đang hoạt động. vấn đề là trên hệ điều hành cụ thể –

1

Tôi khuyên bạn nên sử dụng lớp học MediaPlayer khả dụng. Không giống như VideoViewMediaPlayer nhận thức được trạng thái của nó và quản lý nhiều thứ hơn cho bạn mà VideoView không cung cấp .. Được ghép nối với việc thiết lập một số SurfaceHolder để hiển thị nội dung trong đó khá đơn giản.

Bạn chỉ muốn đảm bảo rằng bạn đang xử lý đúng trạng thái và sử dụng cuộc gọi PrepareAsync() của MediaPlayer.

+0

cũng vấn đề là nếu xem video là không biết trạng thái của nó thì làm thế nào nó hoạt động tốt trên Android 3.1 trở lên. –

1

Đây là sự cố đã biết cho .m3u8 với Android < 4.3.

Chúng đã sửa lỗi này trong 4.3. Sẽ rất đáng để so sánh mã MediaPlayer hoặc VideoView của các nền tảng khác nhau, ví dụ: 4.3 & < 4.3

+0

tiếc là đây không phải là trường hợp .. i tôi đã kiểm tra rtsp và các dòng khác quá. và đối với trường hợp nhỏ hơn 4.3 **, nó hoạt động trên 3.0 trở lên so với trước 4.0.4 như đã đề cập trong câu hỏi ** –