2013-04-05 7 views
7

적어도 4 개의 mediaPlayers를로드하려고 할 때마다 그 중 하나가로드하려고하는 비디오를 손상시키고 Android OS 메시지를 트리거합니다. "Can not 모든 것이 잘 작동 3 Mediaplayers에 대 한4 개의 MediaPlayers가있는 Android 4.2 = "이 비디오를 재생할 수 없습니다"

:이 비디오 "

기타 정보를 재생할 수 있습니다.

다른 Android 버전에서는 4.2와 다른 4 개의 동영상이 동일한 동일한 코드가 작동합니다.

4 비디오는 장치에서 독립적으로 재생할 수 있습니다. 형식에 문제가 없습니다.

프로그램을 시작한 후 "이 비디오를 재생할 수 없습니다"라는 메시지가 나타나면 장치를 재설정하지 않으면 비디오를 더 이상 다른 응용 프로그램에서 재생할 수 없습니다.

VideoViews 또는 surfaceViews에 표시된 독립 MediaPlayers를 사용하여이 작업을 시도했습니다.

Android 4.2를 실행하는 더 많은 기기에서 오류를 복제했습니다. android 4.1.2 및 기타 Android 4 버전에서 코드가 정상적으로 작동했음을 기억하지 못합니다.

+0

4 비디오 뷰에서 4 개의 비디오를 재생하려고 할 때 한 화면에서 4 개의 비디오를 재생하면 성공 했습니까? "비디오를 재생할 수 없습니다"라는 메시지가 나타나면 – bindal

답변

1

Android의 경우 미디어 코덱과 관련된 모든 것이 일관되고 고유 한 API 인 MediaPlayer을 사용해야하는 개발자에게는 숨겨져 있다는 아이디어가 있습니다.

미디어를 재생할 때 스트림이나 외부 장치에있는 미디어 일 때 응용 프로그램이 도움을 필요로 할 때마다 저수준 코덱/파서가 인스턴스화됩니다.

그러나 하드웨어 디코딩과 관련된 특정 이유로 인해 일부 코덱을 두 번 이상 인스턴스화 할 수 없습니다. 사실 응용 프로그램 MediaPlayer.release()을 유효한 상태로 호출하여이 더 이상 필요하지 않을 때 리소스 (예 : 코덱 인스턴스)를 해제해야합니다. 사실

, 무슨 말인지 것은 Android 개발자 웹 사이트의 documentation of release에 예시되어있다 :이 MediaPlayer를 객체와 연관된

리소스를 해제합니다. MediaPlayer를 사용하여이 메서드를 호출하면 좋습니다. 특히 응용 프로그램의 Activity가 일시 중지되거나 (해당 onPause() 메서드가 호출 될 때) 또는 중지 (onStop() 메서드 메서드가 호출 될 때),이 메서드를 호출하여 MediaPlayer 개체를 해제해야합니다 주변에 을 보관해야하는 특별한 필요성이 있습니다. 불필요한 리소스 (예 : 메모리 및 코덱 인스턴스)가 유지되는 경우 MediaPlayer 객체가 더 이상 필요하지 않은 경우 즉시 메서드를 호출하지 못하면 이 모바일 장치의 배터리를 계속 소모하고 재생에 실패 할 수 있습니다. 같은 코덱이 여러 인스턴스가 장치에서 지원되지 않으면 다른 응용 프로그램. 같은 코덱의 인스턴스가 여러 개 지원되는 경우에도 동일한 시간에 불필요한 여러 인스턴스가 사용될 경우 성능 저하가 나타날 수 있습니다 ( ).

재생 완료 후 release을 호출하지 않거나 다른 앱이 이러한 종류의 리소스에 대한 참조를 보유하고 있습니다.

편집 :

같은 Activity에 여러 비디오를 렌더링 할 필요가있는 경우, 당신은 두 가지 선택이있다. 내 답변에서 말했듯이, 당신이 원래 원했던 것은 저급 문제 때문에 가능하지 않았으며, 그런데 그것은 iOS에 있지 않습니다. 당신이 하지만 할을 시도 할 수 있습니다 무엇

입니다 :

  • 연주하는 매개체가 당신이 사용하여 하나 하나에 4 개 개의 비디오를 포장 수, 하지 실시간으로 콘텐츠를 스트리밍하는 경우 널리 이용 가능한 무료 비디오 편집자 중 한 명. 그런 다음 활동에 전체 화면으로 비디오를 렌더링하면 4 Views처럼 보입니다.

  • 실시간/비 녹화 콘텐츠 인 경우 의 첫 번째 메시지는 인 상태로 유지하십시오. 모든 비디오가 동일한 코덱/컨테이너를 사용하여 인코딩되었다고 가정합니다. 시도 할 수있는 것은 다른 코덱과 다른 형식을 사용하도록 3 개의 다른 비디오를 트랜스 코딩하는 것입니다. supported by Android 인 코덱/컨테이너로 코드 변환해야합니다. 이 일 수 있으므로 동시에 Android가 서로 다른 디코더를 사용하도록 할 수 있습니다. 나는 이것이 당신이 기대하는 결과에 비해 과잉이라고 생각합니다.

  • 마지막으로 MediaPlayer + FFMPEG 또는 FFMPEG과 같은 다른 백엔드를 사용하여 디코딩 할 수 있습니다. 그러나 다시, 그것이 작동하더라도, 나는 생각한다, 거대한 잔인한 사람 일 것이다.

이 모든 것을 요약하면이 기능을 작동시키기 위해 절충안을 작성해야합니다.

+0

도와주세요. 다시 하다. 불행하게도 실제로 같은 시간에 MediaPlayer의 4 가지 인스턴스가 모두 필요하기 때문에 나에게 도움이되지 않습니다. 나는 장치를 재부팅하기 때문에 다른 응용 프로그램이 자원을 사용하고 있지 않을 것이라고 확신합니다. 그것은 다른 안드로이드 버전에서 작동한다는 것이 이상합니다. –

+0

다른 Android 버전을 말하면 다른 휴대 전화에서도이 버전을 테스트 중이라고 가정합니다. 저는 왜 당신이 동시에 '4'MediaPlayers에 대한 참조를 유지해야하는지 알지 못합니다. 완전히 다른 액티비티, 서비스 또는 응용 프로그램을 실행하는 경우에도 MediaPlayer를 주문형으로 시작해야하며 재생이 끝나거나 재생이 중지 될 수있는 이유가 발생하는 즉시 해제해야합니다. 그런 다음 다시 재생해야 할 때 다시 복원하십시오. –

+0

동일한 화면에서 동시에 같은 대상에 대해 4 가지 시점을 표시해야합니다. –

관련 문제