2013-04-05 37 views
7

Bất cứ khi nào tôi cố gắng tải ít nhất 4 MediaPlayers, một trong số chúng sẽ làm hỏng video đang cố tải và kích hoạt thông báo Android OS "Không thể phát video này "Android 4.2 với 4 MediaPlayers = "Không thể phát video này"

Thông tin khác:

Cho 3 phương tiện truyền thôngXem mọi thứ hoạt động tốt.

Trên các phiên bản Android khác, khác với phiên bản 4.2, cùng mã với cùng 4 video hoạt động.

Có thể phát 4 video độc lập trên thiết bị. Không có vấn đề về định dạng.

Sau khi khởi động chương trình và nhận được thông báo "Không thể phát video này", video không thể phát được trong bất kỳ ứng dụng nào khác trừ khi tôi đặt lại thiết bị.

Tôi đã thử điều này cả với VideoView hoặc MediaPlayers độc lập được hiển thị trên surfaceViews.

Tôi đã sao chép lỗi trên nhiều thiết bị chạy Android 4.2. Trên Android 4.1.2 và các phiên bản Android 4 khác tôi không nhớ mã hoạt động tốt.

+0

bạn có thành công khi chơi 4 video trong một màn hình không khi tôi đang cố gắng phát 4 video trong cùng một màn hình trong 4 videoview nó cho tôi thấy thông báo "Video không thể phát", hãy giúp tôi – bindal

Trả lời

1

Trên Android, ý tưởng là mọi thứ liên quan đến codec phương tiện đều bị ẩn khỏi nhà phát triển phải sử dụng API nhất quán và duy nhất: MediaPlayer.

Khi bạn phát một phương tiện, nó sẽ là một luồng hoặc một thứ gì đó nằm trên thiết bị bên ngoài, các bộ phân tích/trình phân tích mức thấp được instanciated mỗi khi một ứng dụng sẽ cần sự giúp đỡ của chúng.

Tuy nhiên, nó xảy ra vì những lý do cụ thể liên quan đến giải mã phần cứng, một số codec, không thể được khởi tạo nhiều lần. Trên thực tế, mọi ứng dụngphải mới phát hành tài nguyên (ví dụ về codec) khi không cần chúng nữa bằng cách gọi MediaPlayer.release() ở trạng thái hợp lệ.

Trong thực tế, những gì tôi đang nói được minh họa trong documentation of release trên trang web nhà phát triển Android:

chí nguồn lực liên quan đến đối tượng MediaPlayer này. Đó là được coi là phương pháp hay để gọi phương thức này khi bạn sử dụng xong MediaPlayer. Đặc biệt, bất cứ khi nào Hoạt động của ứng dụng bị tạm dừng (phương thức onPause() của nó được gọi) hoặc dừng (phương thức onStop() được gọi), phương thức này cần được gọi để giải phóng đối tượng MediaPlayer trừ khi ứng dụng có nhu cầu đặc biệt để giữ đối tượng xung quanh. Ngoài các tài nguyên không cần thiết (chẳng hạn như bộ nhớ và các phiên bản codec) đang được giữ, không gọi phương thức này ngay lập tức nếu đối tượng MediaPlayer không còn cần thiết nữa. các ứng dụng khác nếu không có nhiều phiên bản của cùng một codec được hỗ trợ trên thiết bị. Ngay cả khi nhiều phiên bản của cùng một codec được hỗ trợ, một số sự xuống cấp hiệu suất có thể là được mong đợi khi nhiều trường hợp không cần thiết được sử dụng tại cùng thời gian .

Vì vậy, bạn không gọi số release khi bạn phát lại xong hoặc ứng dụng khác đang giữ tham chiếu về loại tài nguyên này.

EDIT:

Nếu bạn cần phải được render một số đoạn video trên cùng một Activity, bạn có hai lựa chọn. Như tôi đã nói trong phản hồi của tôi, những gì ban đầu bạn muốn là không thể vì các vấn đề cấp thấp, không phải trên iOS bằng cách này.

Những gì bạn có thể thử để làm mặc dù là:

  • Nếu phương tiện truyền thông bạn đang chơi là không real-time xem trực tiếp nội dung, bạn có thể quấn 4 video vào một duy nhất, sử dụng một trong những trình chỉnh sửa video miễn phí có sẵn rộng rãi. Sau đó, hiển thị video ở chế độ toàn màn hình trong Hoạt động của bạn, có vẻ như bạn có 4 Views.

  • Nếu chúng là nội dung theo thời gian thực/không được ghi lại, hãy giữ video trước tiên là. Tôi cho rằng mỗi video được mã hóa bằng cùng một codec/vùng chứa. Những gì bạn có thể đang thử là chuyển mã 3 video khác để chúng sử dụng codec khác và định dạng khác. Đảm bảo bạn chuyển mã sang codec/vùng chứa là supported by Android. Điều này có thể có khả năng buộc Android sử dụng các bộ giải mã khác nhau trong cùng một thời điểm. Tôi nghĩ rằng điều này là quá mức cần thiết so với kết quả bạn mong đợi.

  • Cuối cùng, bạn có thể sử dụng một chương trình phụ trợ khác để giải mã như MediaPlayer + FFMPEG hoặc chỉ FFMPEG. Nhưng một lần nữa, ngay cả khi nó hoạt động, tôi nghĩ, một sự quá mức rất lớn.

Để tổng hợp điều này, bạn phải thỏa hiệp để làm việc này.

+0

Xin cảm ơn! phát lại. Thật không may nó không giúp tôi bởi vì tôi thực sự cần tất cả 4 trường hợp của MediaPlayer trong cùng một thời gian. Tôi chắc chắn rằng không có ứng dụng nào khác đang sử dụng tài nguyên vì tôi đang khởi động lại thiết bị. Thật kỳ lạ khi các phiên bản Android khác hoạt động. –

+0

Khi bạn nói các phiên bản Android khác, tôi cho rằng bạn cũng đang thử nghiệm trên các điện thoại khác. Tôi không thấy lý do tại sao bạn sẽ phải giữ một tham chiếu trên '4' MediaPlayers cùng một lúc. Ngay cả khi bạn đang chạy các Hoạt động, Dịch vụ hoặc Ứng dụng hoàn toàn khác nhau, bạn nên instanciating MediaPlayer 'on-demand', và phát hành nó ngay sau khi phát lại kết thúc hoặc bất kỳ lý do nào có thể dẫn phát lại dừng lại. Và sau đó, một lần nữa, khôi phục lại nó khi phát lại là bắt buộc. –

+0

Tôi cần hiển thị 4 phối cảnh của cùng một đối tượng song song trên cùng một màn hình. –