Android는 MediaPlayer를 사용하여 원시 디렉토리에서 mp3를 재생합니다.

Android와 함께 제공되는 MediaPlayer를 사용하여 mp3를 재생하는 경우 몇 가지 사항에 주의해야 합니다.

1. 사용:

——>초기화:

MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.example_song);

——>재생:

mediaPlayer.start();

--> 릴리스:

mediaPlayer.stop();
mediaPlayer.release();

2. 재생 모니터링 추가:

——> 오류 모니터링:

mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {     @Override     public boolean onError(MediaPlayer mp, int what, int extra) {         // 이 메서드는 MediaPlayer에서 오류가 발생할 때 호출됩니다         . // 여기에서 적절한 오류 처리를 할 수 있습니다. 예 팝업 오류 프롬프트 상자 등         return false;     } });






팁: MediaPlayer에서 오류가 발생하면 onError 메서드가 호출됩니다. 여기에서 오류 프롬프트 상자를 표시하는 등의 적절한 오류 처리를 수행할 수 있습니다. 반환 값 false는 오류가 MediaPlayer에서 처리되지 않고 호출자 자체에서 처리됨을 의미합니다. true가 반환되면 MediaPlayer가 오류를 처리하고 계속함을 의미합니다.

--> 준비:

mediaPlayer.setOnPreparedListener(new MediaPlayer.onPreparedListener(){ 
        @Override 
        public void onPrepared(MediaPlayer mp) { LogUtils.e("MP3Player————onPrepared");  
             mp.start(); 
        } 
});

——>재생 완료:

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {     @Override     public void onCompletion(MediaPlayer mp) {         // 이 메서드는 MediaPlayer가 재생을 마치면 호출됩니다         . // 여기에서 UI 인터페이스 업데이트와 같은 몇 가지 관련 작업을 수행할 수 있습니다. .     } }) ;





3. 발매에 관하여

setOnCompletionListener 리스너에서는 mediaPlayer.stop(), mediaPlayer.release() 메서드를 수동으로 호출할 필요가 없습니다.

setOnCompletionListener 메서드는 MediaPlayer가 재생을 마친 후 자동으로 호출되며 이 메서드에서 stop() 및 release() 메서드를 호출하면 예측할 수 없는 문제가 발생할 수 있습니다.

MediaPlayer가 재생을 마치면 자동으로 중지되고 중지 상태가 됩니다. 여전히 MediaPlayer를 사용해야 하는 경우 MediaPlayer.create() 메서드를 다시 호출하도록 선택하여 다른 오디오 파일을 재생하기 위한 새 MediaPlayer 객체를 만들 수 있습니다. 더 이상 MediaPlayer를 사용할 필요가 없으면 적절한 시간에 release() 메서드를 호출하여 차지하는 리소스를 해제할 수 있습니다.

4. 초기화에 대하여

MediaPlayer.create()와 new MediaPlayer()의 차이점은 서로 다른 방식으로 MediaPlayer 객체를 생성한다는 것입니다.

MediaPlayer.create()는 리소스 파일 또는 파일 경로에서 MediaPlayer 개체를 직접 생성하고 데이터 소스, 버퍼 크기 등의 설정과 같은 MediaPlayer의 일부 초기화 작업을 자동으로 완료할 수 있는 정적 메서드입니다. 구체적으로 MediaPlayer.create() 메서드는 컨텍스트와 리소스 ID 또는 파일 경로라는 두 가지 매개 변수를 허용하며 자동으로 MediaPlayer 클래스의 생성자를 호출하고 데이터 소스와 같은 매개 변수를 설정한 다음 준비된 MediaPlayer 개체를 반환합니다.

그러나 new MediaPlayer()를 사용하려면 MediaPlayer의 데이터 소스, 버퍼 크기 및 기타 매개변수를 수동으로 설정해야 하며 이를 완료하려면 추가 코드가 필요합니다. 예를 들어 setDataSource() 메서드를 호출하여 데이터 소스를 설정하고, prepare() 메서드를 호출하여 MediaPlayer를 준비하는 등의 작업을 수행해야 합니다. 새로운 MediaPlayer() 메서드를 사용하여 MediaPlayer 개체를 생성하도록 선택한 경우 점유 중인 리소스를 해제하려면 적절한 시간에 release() 메서드를 호출해야 합니다.

따라서 빠르고 쉽게 MediaPlayer 객체를 생성하고 오디오 파일을 재생해야 하는 경우 MediaPlayer.create() 메서드를 사용할 수 있습니다. 그러나 재생 중 버퍼링 처리, 특정 재생 모드 설정 등과 같이 더 많은 제어 및 사용자 지정이 필요한 경우 새 MediaPlayer() 메서드를 사용하여 MediaPlayer 개체를 만들고 매개 변수를 수동으로 구성해야 합니다.

5. 초기화 반복:

MediaPlayer.create() 메서드를 호출할 때 시스템은 각 호출에 대해 새 MediaPlayer 개체를 만들고 호출이 완료된 후 개체와 관련된 리소스를 자동으로 해제합니다. 따라서 MediaPlayer.create() 메서드를 여러 번 호출해도 성능 문제가 발생하지 않습니다.

그러나 각 MediaPlayer 개체는 일정량의 메모리 리소스를 차지하므로 응용 프로그램에서 MediaPlayer 개체를 자주 생성하고 릴리스하는 경우 시스템의 메모리 리소스에 특정 영향을 미쳐 응용 프로그램 성능을 저하시킬 수 있습니다. 문제. 다른 오디오 파일을 자주 재생해야 하는 경우 단일 MediaPlayer 객체를 사용하는 것을 고려할 수 있으며, 다른 파일을 재생해야 할 때 setDataSource() 메서드를 호출하여 다른 데이터 소스를 설정할 수 있습니다.

또한 MediaPlayer 개체가 여러 개 존재하여 동시에 오디오 파일을 재생하는 경우 여러 오디오 파일이 동시에 재생될 수 있어 혼란과 사용자 경험이 저하될 수 있다는 점에 유의해야 합니다. 따라서 응용 프로그램에서는 단일 MediaPlayer 개체를 사용하여 오디오 파일을 재생하는 것이 좋으며 오디오 파일을 전환해야 하는 경우 먼저 reset() 메서드를 호출하여 이전 상태를 지우고 setDataSource( ) 메서드를 사용하여 새로운 데이터 소스를 설정하고, prepare() 메서드를 다시 호출하여 MediaPlayer 객체를 준비합니다.

6. 불완전 재생 관련:

인터넷에서는 MediaPlayer 객체가 재생 과정에서 재활용될 수 있기 때문에 재생이 불완전하다고 하는데, 이 객체를 멤버 변수로 선언해야 합니다.테스트 후 불완전한 재생 속도를 상당히 줄일 수 있습니다. 그러나 완전히 피할 수는 없습니다.

아시는 분은 쪽지 남겨주세요

추천

출처blog.csdn.net/set_one_name/article/details/130624586